Frage

Wir haben ein niedriges Latenz-Handelssystem (Feed-Handler, Analytik, Auftragserfassung) in Java geschrieben. Es verwendet TCP und UDP ausführlich, ist es nicht Infiniband verwendet oder andere Nicht-Standard-Vernetzung.

Kann jemand Kommentar über die Vor- und Nachteile verschiedenen Betriebssysteme oder Betriebssystemkonfigurationen, dieses System zu implementieren? Während Durchsatz offensichtlich wichtig ist, mit modernem Preis-Feeds zu halten, Latenz ist unsere Priorität # 1.

Solaris scheint wie ein natürlicher Kandidat, da sie Java erstellt; soll ich Sparc oder x64-Prozessoren verwenden?

Ich habe gute Dinge über RHEL und SLERT gehört, das sind die richtigen Versionen von Linux in unserem Benchmarking zu nutzen.

Hat jemand von Windows gegen die oben OSes getestet? Oder wird angenommen, dass sie nicht mithalten?

Ich mag die Java vs C ++ Debatte für einen anderen Thread verlassen.

War es hilfreich?

Lösung

Vendors lieben diese Art von Benchmark. Sie haben Code, nicht wahr?

IBM, Sun / Oracle, HP wird alle lieben Ihre App auf ihrem Gang zu laufen, ihre Vorteile zu demonstrieren.

Machen sie dies tun. Wenn Sie Code haben, stellen die Verkäufer eine Demonstration auf ihrem Gang-Show betrachten, die für Ihre Bedürfnisse am besten ist.

Es ist einfach, schmerzlos, kostenlos und sachlich. Die endgültige Entscheidung wird einfach und klar sein. Und Sie werden wissen, wie die Installation und Optimierung der Leistung zu maximieren.


Was ich hasse es tun diese Art der Sache ist die Vorhersage vor wird der Code geschrieben. Zu viele Kunden haben sich für ein H / W und OS Empfehlung gefragt, bevor wir alle Anwendungsfälle fertig sind identifiziert. Vorstellung für diese Art von Vorahnung ist einfach Wahnsinn.

Aber Sie Code haben. Sie können Testfälle erzeugen, die Ihren Code ausüben. Das ist perfekt.

Andere Tipps

Für eine Handelsumfeld, zusätzlich zu niedrige Latenzzeiten werden Sie wahrscheinlich über Konsistenz betroffen sowie Latenz so konzentriert sich auf die Auswirkungen von GC zu reduzieren, so viel wie möglich Pausen können Sie auch mehr Nutzen geben als Differnt OS Auswahl.

  • Der G1 Garbage Collector in neueren Versionen von Sonnen Hotspot VM verbessert die Welt stoppen viele Pausen, in ähnlicher Weise wie das JRockit VM
  • Für echte Leistungsgarantien aber Azul Systems Version der Hotspot-Compiler auf ihrer Java-Appliance liefert die niedrigste garantiert Pausen verfügbar - auch skaliert sie auf eine massive Größe -. 100s von GB-Stack und 100s des Kerns
  • Ich würde Java Echtzeit-Rabatt - obwohl Sie Garantien Antwort erhalten würde, würden Sie opfern Durchsatz diese Garantien bekommen

Allerdings, wenn Ihre Planung Ihres Trading-Systems in einer Umgebung zur Verwendung, wo alle Mikrosekunde zählt, sind Sie wirklich mit dem Mangel an Konsistenz zu haben, leben Sie von der aktuellen Generation von VMs erhalten werden - keiner von ihnen (mit Ausnahme Echtzeit) garantiert niedrige Mikrosekunde GC Pausen. Natürlich auf dieser Ebene in die gleichen Fragen von OS-Aktivität (Prozess Vorkaufsrecht, Interrupt-Handling, Seitenfehler, etc.) Sie gehen zu laufen. In diesem Fall wird eine der Echtzeit-Varianten von Linux zu helfen Ihnen geht.

Ich würde nicht von diesem nur ausschließen, weil es Windows-Windows-ist. Meine expirience in den letzten Jahren hat sich gezeigt, dass die Windows-Versionen der Sun JVM war in der Regel die reifste Leistung weise im Gegensatz zu Linux oder Soaris x86 auf der gleichen Hardware. Die JVM für Solaris SPARC zu gut sein kann, aber ich denke, mit Windows auf x86 finden Sie mehr Leistung für weniger Geld bekommen.

Ich würde empfehlen, dass Sie ein Betriebssystem Blick in Sie bereits Erfahrung mit. Solaris ist ein seltsames Tier, wenn Sie Linux kennen, z.

Auch würde ich dringend eine Plattform empfiehlt tatsächlich zu verwenden unterstützt von Sun, da dies wird es viel einfacher professionelle Hilfe zu bekommen, wenn man wirklich, es wirklich brauchen.

http://java.sun.com/javase /6/webnotes/install/system-configurations.html

würde ich wahrscheinlich kümmern Garbage Collection Latenz gut, bevor das Betriebssystem verursacht; Sie haben in Abstimmung sah das überhaupt?

Wenn ich bereit, die Zeit vor Gericht verschiedene OSs zu verbringen, würde ich versuchen, Solaris 10 und NetBSD, und wahrscheinlich eine Linux-Variante für eine gute Maßnahme.

Ich würde experimentieren mit 32-vs-64-Bit-Architekturen; 64 Bit geben Ihnen einen größeren Haufen Adressraum ... aber wird länger dauern, um jedes Bit Speicher zu adressieren.

Ich nehme an, Sie haben Ihre Anwendung profiliert und wissen, wo die Engpässe sind; durch den Kommentar zu GC, haben Sie das getan. In diesem Fall sollten Sie Ihre Anwendung nicht CPU-gebunden, und Chip-Architektur soll nicht ein vorrangiges Anliegen sein.

Ich glaube nicht, verwalteten Code-Umgebungen und Echtzeitverarbeitung sehr gut zusammenpassen. Wenn Sie wirklich über Latenz kümmern, entfernen Sie die von den verwalteten Code auferlegt Schicht. Dies ist kein Java vs C ++ Argument, aber ein Java / C # / ... vs C / C ++ / Fortran / ... Argument, und ich glaube, dass eine gültige Design Diskussion ist zu haben.

Und ja, ich meine Fortran, führen wir eine Reihe von in der Nähe von Echtzeitsystemen mit einer Fortran-Stiftung.

Eine Möglichkeit, die Latenz zu verwalten ist mehrere JVMs Dividieren der Arbeit mit kleineren Haufen so haben, dass ein Stopp der Welt Garbage Collection ist nicht so zeitaufwendig, wenn es passiert, und betrifft wenige Prozesse.

Ein weiterer Ansatz ist eine Gruppe von JVM mit genügend Speicher zu laden und die Prozesse zuweisen, um sicherzustellen, wird kein Stopp der Welt Garbage Collection sein in den Stunden, die Sie über Latenz sorgen (wenn dies kein 24/7 app) und Neustart JVMs auf off Stunden.

Sie sollten auch als eine Möglichkeit (wie JRocket) in anderen JVM-Implementierungen aussehen. Natürlich, wenn einer von ihnen angemessen sind ganz auf Ihre spezifische Anwendung abhängig ist.

Wenn eine der oben genannten Fragen zu Ihrem Ansatz, es wird die Wahl des OS beeinflussen. Zum Beispiel, wenn Sie mit einer anderen JVM Implementierung gehen, das könnte Limit OS Auswahl, und wenn Sie gehen mit Clustering oder sonst eine mehr JVM für die Anwendung ausgeführt wird, dass möglicherweise einige besseren zugrunde liegende Betriebssystem-Tools erfordern effektiv zu verwalten, wodurch die O Wahl beeinflussen .

Die Wahl des Betriebssystems oder konfigurierbar vollständig redundant ist die Verfügbarkeit von schnelleren Netzwerkstoffen unter Berücksichtigung.

Schauen Sie sich 10GigE- mit ToE NICs oder der schnelleren Lösung von 4X QDR (40Gbs) InfiniBand aber mit

scroll top