2010-08-29 3 views
12

Es scheint, dass alle großen Investmentbanken C++ unter Unix (Linux, Solaris) für ihre Latenz-/Hochfrequenz-Serveranwendungen verwenden. Warum wird Windows im Allgemeinen nicht als Plattform dafür verwendet? Gibt es technische Gründe, warum Windows nicht mithalten kann?Handelssysteme mit niedriger Latenz mit C++ in Windows?

+13

Wer bringt Marshmallows? Ich möchte diese Flammen benutzen! –

Antwort

11

Technisch, nein. Es gibt jedoch einen sehr einfachen Geschäftsgrund: Der Rest der Finanzwelt läuft unter Unix. Banken laufen auf AIX, der Aktienmarkt selbst läuft unter Unix, und deshalb ist es einfacher, Programmierer in der Finanzwelt zu finden, die eher an eine Unix-Umgebung als an eine Windows-Umgebung gewöhnt sind.

+0

+1 für nicht in Unix FUD. –

+4

Es geht definitiv NICHT darum, Leute mit Windows-Kenntnissen zu finden. Ich versichere Ihnen, dass Betriebssystem-bezogenes Wissen 1% des erforderlichen Wissens für diese Art von Entwicklung ist, und jeder, der in diesem Bereich arbeitet, kann bei Bedarf auf JEDES Betriebssystem wechseln. – BarsMonster

+1

@BarsMonster: Ich könnte jedoch für Dinge wie Netzwerk-Stacks sehen, die vollständig Plattform abhängig sind, würde ein gewisses Maß an Wissen erfordern, bevor in der Lage sein, Plattformen zu wechseln. Hinzu kommen Dinge wie 'fork', die in der POSIX-Welt üblich sind, aber in einer Windows-Umgebung nicht möglich sind. Ich denke, es ist eine vernünftige Antwort. –

4

Linux/UNIX sind viel mehr verwendbar für gleichzeitige Remote-Benutzer, so dass es einfacher ist, Skripts um die Systeme zu erstellen, verwenden Sie Standard-Tools wie grep/sed/awk/perl/ruby ​​/ less auf Protokollen ... ssh/scp .. Das ganze Zeug ist nur da.

Es gibt auch technische Probleme, zum Beispiel: Um die verstrichene Zeit unter Windows zu messen, können Sie zwischen einer Reihe von Funktionen basierend auf dem Windows-Tick und dem hardwarebasierten QueryPerformanceCounter() wählen. Ersteres wird alle 10 bis 16 Millisekunden inkrementiert (Anmerkung: einige Dokumentation impliziert höhere Genauigkeit - z. B. die Werte von GetSystemTimeAsFileTime() messen auf 100 ns, aber sie melden die gleiche 100 ns Flanke des Clock-Ticks, bis sie erneut tickt). Letzteres - QueryPerformanceCounter() - hat Probleme, bei denen verschiedene Cores/CPUs die Zeit seit dem Start melden können, die sich um einige Sekunden unterscheiden, da sie zu verschiedenen Zeiten während des Systemstarts aufgewärmt sind. MSDN dokumentiert dies als einen möglichen BIOS-Fehler, aber es ist üblich. Wer möchte also Handelssysteme mit niedriger Latenz auf einer Plattform entwickeln, die nicht richtig instrumentiert werden kann? (Es gibt Lösungen, aber Sie werden keine Software finden, die bequem in Boost oder ACE sitzt).

Viele Linux/UNIX-Varianten haben viele einfach zu ändernde Parameter, um die Latenz für ein einzelnes Ereignis gegen die durchschnittliche Latenz unter Last, Zeitscheibengrößen, Planungsrichtlinien usw. abzuwägen. Auf Open-Source-Betriebssystemen gibt es auch die Gewissheit, die kommt Mit der Fähigkeit, auf den Code zu verweisen, wenn man denkt, dass etwas schneller sein sollte, als es ist, und dem Wissen, dass eine (potenziell riesige) Gemeinschaft von Leuten so kritisch war und ist - mit Windows werden es natürlich hauptsächlich die Leute sein Ich bin beauftragt, es mir anzusehen. Auf der FUD/Reputation-Seite - etwas unfassbar, aber ein wichtiger Teil der Gründe für die OS-Auswahl - denke ich, dass die meisten Programmierer in der Branche Linux/UNIX mehr vertrauen würden, um eine zuverlässige Planung und Verhalten zu bieten. Außerdem hat Linux/UNIX den Ruf, weniger zu stürzen, obwohl Windows heutzutage ziemlich zuverlässig ist und Linux eine viel volatilere Code-Basis als Solaris oder FreeBSD hat.

+0

Windows * Client * -Betriebssysteme erlauben nur einer Person, RDP gleichzeitig zu verwenden. Windows Terminal Server gibt es jedoch schon immer (es war in der Tat die ursprüngliche Verwendung von RDP) und erlaubt so viele Verbindungen wie Clientzugriffslizenzen. Windows Server-Betriebssysteme verfügen standardmäßig über die Möglichkeit, mehrere Remotebenutzer zu verwenden. Wenn Sie den Kommentar zur Planung erhalten könnten, würde ich hier +1 geben - dieser Teil der Antwort scheint mir an dieser Stelle FUD zu sein (der Rest der Antwort ist gut). YMMV. –

+0

Es gibt keine UNIX/Linux-Planung. Es ist einer der Bereiche, in denen sich Implementierungen unterscheiden. Und Linux hat tatsächlich mehr als eine Scheduler-Wahl (google Completely Fair Scheduler Linux für den Hintergrund), so dass man nicht einmal sagen kann "Linux Scheduling ist zuverlässig". – MSalters

+1

@Billy: danke für die Korrektur zu RDP - Antwort aktualisiert entsprechend. Habe klar gemacht, was FUD/Meinung ist, was ich immer noch für relevant halte. @MSalters: Das ist wie zu sagen, es gibt keinen Sport, weil es Fußball und Tennis gibt. Die UNIX/Linux-Planung kann weiterhin gemeinsam behandelt werden. Und man kann vernünftig verallgemeinern, so wie man Sport spielen kann ist gesund .... –

4

Grund ist einfach, vor 10-20 Jahren, als solche Systeme entstanden, "hardcore" Multi-CPU-Server waren nur auf irgendeine Art von UNIX. Windows NT war in diesen Tagen im Kindergarten. Der Grund ist also "historisch".

Moderne Systeme könnten unter Windows entwickelt werden, das ist heutzutage nur eine Frage des Geschmacks.

PS: Ich bin currencly auf einer solchen Systemen arbeiten :-)

+0

+1 für * eine andere * Antwort nicht in Unix FUD. –

2

eine Vielzahl von Gründen gibt es, aber der Grund ist historisch nicht nur. In der Tat scheint es, als würden heutzutage mehr und mehr serverseitige Finanzanwendungen auf * nix laufen als jemals zuvor (einschließlich großer Namen wie der London Stock Exchange, die von einer .NET-Plattform wechselten). Für clientseitige oder Desktop-Apps wäre es albern, auf etwas anderes als Windows zu zielen, da dies die etablierte Plattform ist. Bei serverseitigen Apps sind die meisten Orte, an denen ich gearbeitet habe, jedoch an * nix verteilt.

+0

Windows war sicherlich nicht die etablierte Desktop-Plattform im Jahr 1990, als solche Handelssysteme zuerst entwickelt wurden. Und wenn Sie auf Ihrem Desktop eine seriöse Leistung benötigen, ist Windows 16 Bit keine Option. – MSalters

14

Die Leistungsanforderungen an Systeme mit extrem niedriger Latenz für den algorithmischen Handel sind extreme.In dieser Umgebung zählen Mikrosekunden.

Ich bin nicht sicher über Solaris, aber der Fall von Linux, diese Jungs schreiben und verwenden Low-Latency-Patches und Anpassungen für den gesamten Kernel, von den Netzwerkkartentreibern bis. Es ist nicht, dass es einen technischen Grund gibt, warum das unter Windows nicht gemacht werden konnte, aber es gibt einen praktischen/legalen Zugriff auf den Quellcode und die Möglichkeit, ihn mit Änderungen neu zu kompilieren.

+0

Das scheint eine gute Antwort zu sein, aber wissen Sie wirklich, dass sie Patches mit niedriger Latenz schreiben und den Kernel neu kompilieren? – Jon

+0

@ Jon: Ich habe nur anekdotische Beweise aus verschiedenen Diskussionen über LKML und ähnliche Orte im Laufe der Jahre (zB Christoph Lameter ist ein Kernel-Entwickler, der für solche Anwendungen eine kurze Latenzzeit hat). – caf

+0

@Jon Ich habe Kernel-Patches in Bereiche wie pdflush geschrieben. Die Standard-Kernelzugriffsannahmen stimmen nicht notwendigerweise mit gewünschten Zugriffsmustern überein. –

9

(Ich habe seit 8 Jahren im Investment Banking gearbeitet) In der Tat ist ziemlich viel, was Banken niedrige Latenz nennen in Java getan. Und nicht einmal Real Time Java - nur normal Java mit dem GC ausgeschaltet. Der Haupttrick hier ist, um sicherzustellen, dass Sie Ihren gesamten Code genug ausgeübt haben, damit das jit ausgeführt wurde, bevor Sie eine bestimmte VM in prod umschalten (also einige Startup-Schleifen, die für ein paar Minuten ausgeführt werden - und Hot-Failover) .

Die Gründe für Linux verwenden, sind:

Vertrautheit

Remote-Verwaltung ist immer noch besser, und auch geringe Auswirkungen - es wird auf der Maschine eine minimale Auswirkung auf die anderen Prozesse haben. Denken Sie daran, dass diese Systeme oft an der Börse installiert sind, so dass die Verbindungen zu den Maschinen (von Ihnen/Ihrem Support-Team) wahrscheinlich schlechter sind als die zu Ihren normalen Rechenzentren.

Durchstimmbarkeit - die Fähigkeit Swappiness auf 0 zu setzen, die JVM dazu zu bringen, große Seiten vorzuprogrammieren, und andere Low-Level-Tricks sind sehr nützlich.

Ich bin mir sicher, dass Sie Windows dazu bringen können, akzeptabel zu arbeiten, aber es gibt keinen großen Vorteil - wie andere gesagt haben, müssten alle Mitarbeiter, die Sie pochierten, all ihre Latenztricks wieder entdecken, anstatt nur einen runterzulaufen Checkliste.

+0

Ich war in einer HFT/Market Making Firma, und unser Code war in Java, der Denkprozess war die Zeit und die eingesparten Fehler überwogen jeden potenziellen Nutzen von C/C++. – cohensh

1

Ich bin teilweise mit den meisten der obigen Antworten einverstanden. Obwohl das, was ich realisiert habe, der größte Grund für die Verwendung von C++ ist, ist es relativ schnell mit einer sehr großen STL-Bibliothek.

Abgesehen davon wird Linux/Unix-System auch verwendet, um die Leistung zu steigern. Ich kenne viele Low-Latency-Teams, die in gewissem Umfang den Linux-Kernel optimieren. Offensichtlich ist dieses Maß an Freiheit nicht durch Windows gegeben.

Andere Gründe wie Legacy-Systeme, Lizenzkosten, Ressourcen zählen ebenfalls, sind aber weniger treibende Faktoren. Wie "rjw" erwähnt, habe ich gesehen, dass Teams Java auch mit einer modifizierten JVM verwenden.

0

Ich zweitens die Meinungen der historischen und den Zugang zu Kernel-Manipulation.

Abgesehen von diesen Gründen glaube ich auch, dass genau wie, wie sie Garbage Collection von .NET und den ähnlichen Mechanismus in Java deaktivieren, wenn diese Technologien in einigen niedrigen Latenz verwenden. Sie könnten Windows wegen der APIs auf hoher Ebene meiden, die mit Low-Level-Betriebssystemen und dann mit dem Kernel interagieren.

Also der Kern ist natürlich der Kernel, der mit der Verwendung der Low-Level-OS interagiert werden kann. Die High-Level-APIs werden nur bereitgestellt, um den normalen Benutzern das Leben zu erleichtern. Aber im Falle einer niedrigen Latenz stellt sich heraus, dass es sich bei jeder Operation um eine Fettschicht und Sekundenbruchteileverlust handelt. Also eine lukrative Option, um wenige Sekunden pro Anruf zu gewinnen.

Abgesehen davon ist eine andere Sache, die zu berücksichtigen ist, Integration. Die meisten Server, Rechenzentren und Börsen verwenden UNIX und nicht Windows, sodass die Verwendung der Clients derselben Familie die Integration und Kommunikation erleichtert.

Dann haben Sie Sicherheitsprobleme (viele Leute da draußen sind vielleicht nicht einverstanden mit diesem Punkt) Hacking UNIX ist nicht einfach im Vergleich zu WINDOWS hacken. Ich stimme nicht zu Lizenzierung muss das Problem für die Banken sein, weil sie Geld für jedes einzelne Stück von Hardware und Software und die Leute, die sie anpassen überschütten, so Kauflizenzen werden nicht so groß das Problem, wenn sie betrachtet, was sie durch den Kauf gewinnen.

Verwandte Themen