Handelsplattformleistung anhand eines einfachen Beispiels


In diesem Artikel möchte ich in populärwissenschaftlicher Form über die Optimierung der Reaktionszeit auf Handelsplattformen von Börsen und Banken (HFT) sprechen. Als Referenz sprechen wir von Zeiten von Hunderten von Nanosekunden bis Hunderten von Mikrosekunden. Für die meisten anderen Anwendungen sind viele der folgenden Optimierungsmethoden irrelevant, nur weil es keine derart strengen Anforderungen gibt.


Normalerweise betrachten wir die Leistung in Bandbreiteneinheiten. Zum Beispiel in Gigaflops. In solchen Fällen reduziert sich die Optimierungsaufgabe darauf, die maximale Anzahl von Berechnungen pro Zeiteinheit durchzuführen oder das Problem in der minimalen Zeit zu lösen. Das Design des Prozessors ist in erster Linie darauf ausgelegt, die maximale Anzahl von Berechnungen pro Zeiteinheit und Standardoptimierungstechniken für diese zu erreichen.


Es gibt jedoch Anwendungen, bei denen die Reaktionszeit wichtiger ist, z. B. Handelsplattformen im Computerhandel (HFT), Suchmaschinen, Robotik und Telekommunikation. Die Antwortzeit ist die Ausführungszeit einer "einzelnen" Operation dieses Typs, beispielsweise vom Empfang eines Pakets mit aktuellen Angeboten von der Vermittlungsstelle bis zum Senden der Bestellung für die Vermittlungsoperation. Tatsächlich hängen die Reaktionszeit und der Durchsatz (die Anzahl der Operationen dieses Typs pro Zeiteinheit) eng zusammen, aber der Unterschied ist grundlegend. Es ist oft möglich, den Durchsatz einfach durch Hinzufügen von Hardware (mehr Server) zu erhöhen, aber die Verbesserung der Antwortzeit auf diese Weise ist problematisch (außer bei Spitzenlasten).


Zur Optimierung der Reaktionszeit werden mehrere hervorragende Techniken verwendet. Einige verbessern gleichzeitig sowohl die Reaktionszeit als auch den Durchsatz, andere verbessern eine auf Kosten der anderen. Um beispielsweise den Durchsatz zu verbessern, ist das Puffern typisch, um ein Array von Paketen gleichzeitig zu verarbeiten. Offensichtlich ist dieser Ansatz für die Antwortzeit auf ein einzelnes Paket schädlich.


Auf Handelsplattformen ist auch die Stabilität der Reaktionszeit sehr wichtig. Die meisten Gewinne und Verluste treten bei starken Marktbewegungen auf, die von ungewöhnlich hohen Aktivitäten begleitet werden. Die Plattform muss solchen Belastungen standhalten. Jeder Stecker kann spürbare Verluste verursachen.


Im Allgemeinen ist eine solche Optimierung der Antwortzeit auf niedriger Ebene ein komplexes Thema, das ein gutes Verständnis des Netzwerkstapels, des Kerns des Betriebssystems, der Prozessor- und Plattformleistung sowie eine effiziente Thread-Synchronisation erfordert. Meine Aufgabe ist es, all diese komplexen Dinge mit einem einfachen und verständlichen Beispiel zu erklären.


Büroarbeit


Verwenden wir die folgende Analogie. Stellen Sie sich eine Gruppe von Menschen vor, die in einem Büro arbeiten. Die Kommunikation erfolgt durch den Austausch von Nachrichten auf Papier (Briefe). Jeder Brief enthält den Adressaten, den Absender und die Aufgabe. Briefe werden auf bestimmte Tische im Büro gelegt. Es gibt Mitarbeiter, deren Aufgabe es ist, Briefe von außen zu erhalten und auf Tische zu legen. Andere nehmen Briefe von Tischen auf und geben sie an Entscheidungsträger weiter. Jeder Entscheider arbeitet nur mit einer bestimmten Art von Buchstaben (oder Aufgaben).


Der Entscheider liest die für ihn bestimmten Briefe und entscheidet, ob diese Aufgabe erledigt, verschoben oder ignoriert wird. Aufgaben zur Ausführung werden in einer separaten Tabelle gestapelt. Spezialarbeiter nehmen Briefe von diesem Tisch auf und verteilen sie an die Darsteller. Einige Briefe müssen außerhalb des Büros beantwortet werden, z. B. eine Bestätigung an den externen Absender senden.


Um näher an der Realität zu sein, wollen wir die Bedingungen etwas komplizierter machen. Ein Büro ist beispielsweise ein komplexes Netzwerk von Räumen und Korridoren, und verschiedene Arten von Arbeitnehmern können nur zu bestimmten Orten gehen, zu denen sie Zugang haben. Nehmen wir, wie Mathematiker sagen, ohne Verlust der Allgemeinheit an, dass unser Büro unter normalen Bedingungen 200 Nachrichten pro Tag mit einer durchschnittlichen Nachrichtenverarbeitungszeit von 5 Minuten verarbeitet.


Unsere Aufgabe ist es daher, die Verarbeitungszeit für Nachrichten zu minimieren. In diesem Fall ist es wünschenswert, dass die maximale Verarbeitungszeit den Durchschnitt nicht mehr als beispielsweise zweimal überschreitet. Das heißt, Aktivitätsschübe sollten effektiv behandelt werden.


Wo fangen wir an? Der einfachste Weg, mehr Mitarbeiter einzustellen, besteht darin, mehr Nachrichten zu verarbeiten. Es ist schön, nach schnellen Mitarbeitern zu suchen, dann wird die Bearbeitungszeit verkürzt. Nehmen wir an, wir haben Usain Bolt und die anderen olympischen Finalisten engagiert. Möglicherweise hat sich die Verarbeitungszeit auf 2 Minuten verringert. Es ist jedoch offensichtlich, dass es keinen weiteren Weg in diese Richtung gibt. Niemand läuft schneller. Das Limit ist erreicht. Wenn man diese Ansätze mit einem Computer vergleicht, kauft die Einstellung von Mitarbeitern zusätzliche Hardware (Server, Prozessoren, Kerne), um die Anzahl der Ausführungsthreads zu erhöhen. Die Einstellung von Athleten ähnelt dem Kauf des schnellsten Eisens (maximale Häufigkeit an erster Stelle).


Vielleicht ist das Layout unseres Büros nicht optimal. Es muss ausreichend Platz vorhanden sein, damit die Arbeitnehmer effizient arbeiten können. Vielleicht die Korridore erweitern, sonst müssen sich die Leute gegenseitig weichen und wertvolle Zeit verlieren? Lassen Sie uns erweitern. Lassen Sie uns auch die Räume leicht vergrößern, damit sich die Leute nicht nähern, wenn sie sich den Tischen nähern. Es ist wie beim Kauf eines Servers mit mehr Kernen und mehr Speicher und E / A-Bandbreite.


Darüber hinaus können wir zum Expressdienst anstatt zur regulären Post wechseln, um Nachrichten mit der Außenwelt auszutauschen. In Bezug auf den Computer ähnelt dies der Auswahl und Optimierung von Netzwerkgeräten und dem Netzwerkstapel des Betriebssystems. All dies sind zusätzliche Kosten, aber wir gehen davon aus, dass sie sich definitiv auszahlen werden.


Nach den Innovationen sank unsere Nachrichtenverarbeitungszeit beispielsweise auf eine Minute. Die Mitarbeiter können auch geschult werden, um den Kommunikations- und Ausführungsprozess zu verbessern. Vielleicht gibt dies 15 Prozent mit der richtigen Motivation. Er weiß, dass wir 51 Sekunden erreicht haben. Dies ähnelt der Softwareoptimierung.


Der nächste Schritt besteht darin, Kollisionen zwischen unseren schnelllebigen Mitarbeitern zu vermeiden. Der wahrscheinliche Engpass ist die Herangehensweise an die Tabellen. Es ist ratsam, dass die Mitarbeiter sofort und gleichzeitig auf die benötigten Schreibtische zugreifen können. Sie können Nachrichten in Tabellen sortieren, wenn Sie sie anordnen (in separaten Ordnern ablegen), um den Zugriff zu beschleunigen. Nachrichten können auch unterschiedliche Prioritäten haben. Im Programm ist dies ein Analogon zur Thread-Synchronisation. Streams sollten unbegrenzten parallelen und maximalen Zugriff auf Daten haben. Das Beheben von Thread-Synchronisationsproblemen führt häufig zu einer enormen Erhöhung des Systemdurchsatzes und zur Verbesserung der Antwortzeiten. Im Sinne der Verarbeitung von Aktivitätsbursts ist der Einfluss eines optimalen Synchronisationsalgorithmus im Allgemeinen schwer zu überschätzen.


Außerdem befinden sich Arbeiter manchmal vor einer geschlossenen Tür. Andere kleinere Probleme dieser Art können zu Unannehmlichkeiten und Verzögerungen führen. Es ist ratsam, die folgenden Bedingungen zu erfüllen: Die Anzahl der Personen in einem bestimmten Gebäude überschreitet niemals seine Kapazität, die Geschwindigkeit der Mitarbeiter ist unbegrenzt, es werden keine Maßnahmen ergriffen, die nicht mit der Hauptarbeit zusammenhängen, und niemand tritt in den Arbeitsprozess ein. In Bezug auf den Computer bedeutet dies, dass die Anzahl der Threads niemals die Anzahl der verfügbaren Kerne überschreitet, die Plattform für maximale Frequenz / Leistung konfiguriert ist, die Sparmodi deaktiviert sind, der Turbomodus aktiviert ist und der Kernel des Betriebssystems und anderer Anwendungen isoliert ist und (fast) keine Auswirkungen auf die Handelsplattform hat.


Jetzt ist es an der Zeit, die Bedingungen im Büro noch genauer zu betrachten. Öffnen sich Türen leicht? Rutscht der Boden? Dies entspricht in etwa der Analyse von Interaktionen mit dem Betriebssystem. Wenn es nichts zu verbessern gibt, können Sie versuchen, die Verwendung bestimmter Teile zu vermeiden. Zum Beispiel, anstatt Briefe durch das Büro zu liefern, warum nicht versuchen, sie von Fenster zu Fenster zu werfen? Sie sagen unangenehm? Es kann unangenehm sein, aber schnell. Dies ähnelt der Verwendung des Kernel-Bypass-Ansatzes im Netzwerkstapel.


Anstatt den Netzwerkstapel des Betriebssystems zu verwenden, führt die Kernelumgehung den Netzwerkstapel im Benutzerbereich aus. Dies hilft, unnötiges Kopieren von Daten zwischen System und Benutzerstapel und die Verzögerung bei der Ausführung des Nachrichtenempfangsstroms zu vermeiden. Bei der Kernel-Umgehung wartet der Empfangsstrom normalerweise aktiv. Er sitzt nicht auf der Sperre des Betriebssystems, sondern überprüft die Sperrvariable kontinuierlich, bis er die Berechtigung zur Ausführung erhält.


Wenn wir anfingen, Nachrichten durch die Fenster zu werfen, lassen Sie es uns effizient tun. Am zuverlässigsten ist es, von Hand zu Hand durch das Fenster zu gehen. Dieses Prinzip wird im TCP-Protokoll verwendet. Dies ist nicht die schnellste Option. Mit UDP können Sie einfach eine Nachricht ohne Bestätigung löschen. Es ist schneller. Niemand muss warten. Denken Sie, das ist die Grenze? Nein, Sie können immer noch lernen, durch das Fenster zu werfen, sodass der Buchstabe direkt auf die gewünschte Tabelle und in den gewünschten Ordner fällt. Dieser Ansatz wird als Remote Direct Memory Access (RDMA) bezeichnet. Ich denke, wir haben die Verarbeitungszeit von Sekunden auf 35 reduziert.


Oder vielleicht ein Büro von Grund auf neu bauen, anstatt das bestehende an unsere Bedürfnisse anzupassen? Dies bietet ideale Arbeitsbedingungen. Möglicherweise verbessert dies die Reaktionszeit von Sekunden auf 20 oder sogar weniger. Eigenes Bürodesign ist die Verwendung eines feldprogrammierbaren Gate-Arrays (FPGA). FPGA ist so etwas wie ein Prozessor, dessen Hardware so programmiert ist, dass sie ein bestimmtes Problem löst. Ein regulärer Prozessor ist codiert, um einen bestimmten Befehlssatz für bestimmte Datentypen auszuführen, und der Ausführungsthread (nicht zu verwechseln mit dem Anwendungsthread) ist ebenfalls festgelegt. Im Gegensatz zum Prozessor sind FPGAs nicht für eine Reihe von Anweisungen, Datentypen und Ausführungsabläufen vorprogrammiert. Sie sind für eine bestimmte Aufgabe programmiert und können in diesem Zustand nur diese ausführen (bis zur anschließenden Neuprogrammierung). Effektive FPGA-Programmierung ist keine leichte Aufgabe. Änderungen am Programm können ebenfalls viel Aufwand erfordern. Und obwohl FPGA nicht bedeutet, Usain Bolt einzustellen (die Frequenzen sind viel niedriger als die des Prozessors), ermöglicht die unbegrenzte Parallelität der Befehlsausführung niedrigere Nachrichtenverarbeitungszeiten als auf dem Prozessor.


Abschließend werde ich Tools zur Leistungsanalyse für Software empfehlen. Mit dem Intel VTuneTM-Verstärker und der Intel Processor Trace-Technologie können Sie detailliert erkennen, wo und warum CPU-Zeit verschwendet wird.


Wenn Sie sich für das Thema interessieren, können Sie meine Artikel zur Intel Developer Zone (auf Englisch) lesen, die auch praktische technische Tipps zur Optimierung der Reaktionszeit enthalten.


  • https://software.intel.com/en-us/articles/optimizing-computer-applications-for-latency-part-1-configuring-the-hardware
  • https://software.intel.com/en-us/articles/optimizing-computer-applications-for-latency-part-2-tuning-applications

Source: https://habr.com/ru/post/de437626/


All Articles