Die Performance der Handelsplattform an einem einfachen Beispiel


In diesem Artikel möchte ich in der populärwissenschaftlichen Forschung über die Optimierung der Reaktionszeit in den Handelsplattformen von Börsen und Banken (HFT) sprechen. Als Referenz sprechen wir von Zeiten von mehreren hundert Nanosekunden bis zu mehreren hundert Mikrosekunden. Für die meisten anderen Anwendungen sind viele der folgenden Optimierungsmethoden einfach nicht relevant, da diese strengen Anforderungen nicht erfüllt sind.


Die Leistung wird normalerweise in Bandbreiteneinheiten betrachtet. Zum Beispiel in Gigaflop. Das Optimierungsproblem reduziert sich in solchen Fällen darauf, die maximale Anzahl von Berechnungen pro Zeiteinheit durchzuführen oder das Problem in kürzester Zeit zu lösen. Das Design des Prozessors ist in erster Linie darauf ausgelegt, die maximale Anzahl von Berechnungen pro Zeiteinheit und Standardoptimierungsverfahren für dieselbe zu erreichen.


Es gibt jedoch Anwendungen, bei denen die Reaktionszeit wichtiger ist, beispielsweise Handelsplattformen im Computerhandel (HFT), Suchmaschinen, Robotik und Telekommunikation. Die Antwortzeit ist die Ausführungszeit einer "einzigen" Operation dieses Typs, z. B. vom Empfang eines Pakets mit aktuellen Angeboten von der Börse bis zum Senden einer Bestellung an eine Börsentransaktion. Tatsächlich sind die Antwortzeit und der Durchsatz (die Anzahl von Operationen dieses Typs pro Zeiteinheit) eng miteinander verbunden, der Unterschied ist jedoch grundlegend. Sie können die Bandbreite häufig durch einfaches Hinzufügen von Hardware erhöhen (mehr Server), aber es ist problematisch, die Antwortzeit auf ähnliche Weise zu verbessern (außer bei Spitzenlast).


Zur Optimierung der Antwortzeit werden verschiedene Methoden verwendet. Einige verbessern sowohl die Reaktionszeit als auch den Durchsatz, andere wiederum verbessern sie auf Kosten des anderen. Um beispielsweise den Durchsatz zu verbessern, ist die Pufferung typisch, um ein Array von Paketen gleichzeitig zu verarbeiten. Für die Antwortzeit auf ein einzelnes Paket ist ein solcher Ansatz offensichtlich schädlich.


In Handelsplattformen ist die Stabilität der Antwortzeit ebenfalls sehr wichtig. Die meisten Gewinne und Verluste treten während starker Marktbewegungen auf, begleitet von ungewöhnlich hoher Aktivität. Die Plattform muss solchen Belastungen standhalten. Ein Verstopfen kann zu spürbaren Verlusten führen.


Im Allgemeinen ist eine solche Optimierung der Antwortzeit ein komplexes Thema, das ein gutes Verständnis des Netzwerkstacks, des Betriebssystemkerns, der Prozessor- und Plattformleistung und der effizienten Thread-Synchronisierung erfordert. Meine Aufgabe ist es, all diese komplexen Dinge mit einem einfachen und klaren 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 Empfänger, den Absender und die Aufgabe. Auf bestimmten Tischen im Büro werden Briefe angebracht. Es gibt Arbeiter, deren Aufgabe es ist, Briefe von der Außenwelt zu erhalten und auf den Tisch zu legen. Andere holen Briefe von den Tischen ab und geben sie an die Entscheidungsträger weiter. Jeder Entscheidungsträger arbeitet nur mit einer bestimmten Art von Buchstaben (oder Aufgaben).


Der Entscheider liest die für ihn bestimmten Briefe und entscheidet, ob diese Aufgabe ausgeführt, verzögert oder ignoriert wird. Aufgaben zur Ausführung werden einer separaten Tabelle hinzugefügt. Spezielle Arbeiter holen Briefe von diesem Tisch ab und verteilen sie an die Ausführenden. Einige Briefe müssen außerhalb des Büros beantwortet werden, z. B. wird eine Bestätigung an den externen Absender gesendet.


Um der Realität näher zu sein, lassen Sie uns die Dinge 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 gelangen, an denen sie Zugang haben. Nehmen wir an, wie die Mathematiker sagen, ohne die Gemeinschaft zu stören, wir nehmen an, dass unser Büro unter normalen Bedingungen 200 Nachrichten pro Tag mit einer durchschnittlichen Verarbeitungszeit von 5 Minuten verarbeitet.


Unsere Aufgabe besteht also darin, die Verarbeitungszeit für Nachrichten zu minimieren. Es ist wünschenswert, dass die maximale Bearbeitungszeit den Durchschnitt von mehr als beispielsweise zweimal nicht überschreitet. Das heißt, Aktivitätsschübe müssen effizient gehandhabt werden.


Also wo fangen wir an? Am einfachsten ist es, mehr Mitarbeiter einzustellen, um mehr Nachrichten zu verarbeiten. Es ist nicht schlecht, nach schnellen Arbeitern zu suchen, dann wird die Bearbeitungszeit reduziert. Angenommen, wir haben Usain Bolt und andere Olympia-Finalisten eingestellt. Vielleicht ist die Bearbeitungszeit auf 2 Minuten gesunken. Es ist jedoch offensichtlich, dass in diese Richtung nichts weiter gehen kann. Schneller läuft niemand. Das Limit ist erreicht. Wenn Sie diese Ansätze mit einem Computer vergleichen, kaufen Mitarbeiter zusätzliche Hardware (Server, Prozessoren, Kerne), um die Anzahl der Ausführungsthreads zu erhöhen. Die Einstellung von Athleten ist vergleichbar mit dem Kauf des schnellstmöglichen Bügeleisens (die maximale Häufigkeit überhaupt).


Vielleicht ist das Layout unseres Büros nicht optimal. Es muss genügend Platz vorhanden sein, damit die Arbeitnehmer effizient arbeiten können. Vielleicht erweitern Sie die Korridore, und dann müssen sich die Menschen gegenseitig nachgeben und dabei wertvolle Zeit verlieren. Lass uns erweitern. Lassen Sie uns auch die Räume etwas vergrößern, damit sich die Menschen beim Betreten der Tische nicht drängen. Es ist wie der Kauf von Servern mit einer großen Anzahl von Kernen und mehr Speicher und E / A-Bandbreite.


Außerdem können wir anstelle der normalen Post den Expressdienst nutzen, um Nachrichten mit der Außenwelt auszutauschen. Aus rechnerischer Sicht ähnelt dies der Auswahl und Optimierung von Netzwerkgeräten und dem Netzwerkstack des Betriebssystems. All dies ist mit zusätzlichen Kosten verbunden, aber wir gehen davon aus, dass sie sich definitiv auszahlen werden.


Nach den Neuerungen fiel unsere Bearbeitungszeit für Nachrichten beispielsweise auf eine Minute. Sie können immer noch Mitarbeiter trainieren, um den Kommunikations- und Ausführungsprozess zu verbessern. Vielleicht gibt es mit der richtigen Motivation 15 Prozent. Wir erreichten also 51 Sekunden. Dies ist ähnlich wie bei der Softwareoptimierung.


Der nächste Schritt ist, Kollisionen unserer schnell laufenden Mitarbeiter zu vermeiden. Wahrscheinlicher Engpass - die Annäherung an die Tische. Es ist wünschenswert, dass die Mitarbeiter sofort und gleichzeitig auf die benötigten Tische zugreifen können. Sie können die Nachrichten in den Tabellen sortieren (in separaten Ordnern ablegen), um den Zugriff zu beschleunigen. Nachrichten können auch eine andere Priorität haben. Im Programm ist dies ein Analogon zur Thread-Synchronisation. Streams sollten unbegrenzt parallel und schnell auf Daten zugreifen können. Das Beheben von Problemen mit der Synchronisierung von Threads führt häufig zu einer erheblichen Erhöhung der Systembandbreite und verbessert die Antwortzeit. Im Hinblick auf die Verarbeitung von Aktivitätsbursts ist der Einfluss des optimalen Synchronisationsalgorithmus im Allgemeinen schwer zu überschätzen.


Außerdem befinden sich die Arbeiter manchmal vor einer geschlossenen Tür. Andere kleinere Probleme dieser Eigenschaft können zu Unannehmlichkeiten und Verzögerungen führen. Es ist wünschenswert, die folgenden Bedingungen zu erfüllen: Die Anzahl der Personen in einem bestimmten Raum übersteigt niemals ihre Kapazität, die Arbeitsgeschwindigkeit ist nicht durch irgendetwas beschränkt, keine Handlungen, die nicht mit der Hauptarbeit zusammenhängen, und kein Außenseiter passt in den Arbeitsprozess. Computermäßig bedeutet dies, dass die Anzahl der Threads die Anzahl der verfügbaren Kerne niemals überschreitet, die Plattform auf maximale Frequenz / Leistung eingestellt ist, die Sparmodi deaktiviert sind, der Turbo-Modus aktiviert ist und der Betriebssystemkern und andere Anwendungen isoliert sind und die Handelsplattform (fast) nicht beeinflussen.


Jetzt ist es an der Zeit, die Bedingungen im Büro noch genauer zu betrachten. Öffnen sich die Türen leicht? Rutscht der Boden? Dies entspricht in etwa der Analyse der Interaktion mit dem Betriebssystem. Wenn nichts zu verbessern ist, können Sie die Verwendung einiger Teile vermeiden. Anstatt Briefe durch das Büro zu schicken, sollten Sie sie beispielsweise von Fenster zu Fenster werfen. Sag unbequem? Vielleicht unangenehm, aber schnell. Dies ist analog zur Verwendung des Kernel-Bypass-Ansatzes im Netzwerkstack.


Anstatt den Netzwerkstack des Betriebssystems zu verwenden, führt der Kernel-Bypass den Netzwerkstapel im Benutzerbereich aus. Dies hilft, unnötige Datenkopien zwischen dem System und dem Benutzerstapel und die Verzögerung bei der Ausführung des Nachrichtenempfangsflusses zu beseitigen. Beim Kernel-Bypass wartet der Empfangsstrom normalerweise aktiv. Er sitzt nicht auf der Betriebssystemsperre, sondern prüft die Sperrvariable kontinuierlich, bis sie ihm die Erlaubnis zur Ausführung erteilt.


Wenn wir begonnen haben, Nachrichten durch die Fenster zu werfen, sollten wir dies effektiv tun. Die zuverlässigste Option ist, sie von Hand zu Hand durch das Fenster zu führen. Dieses Prinzip wird im TCP-Protokoll verwendet. Dies ist nicht die schnellste Option. Mit UDP können Sie einfach eine Nachricht ohne Bestätigung senden. Es ist schneller Niemand muss warten. Glaubst du, 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 gesenkt.


Oder vielleicht ein Büro von Grund auf neu aufbauen, anstatt das bestehende an unsere Bedürfnisse anzupassen? Dies bot ideale Arbeitsbedingungen. Vielleicht verbessert sich dadurch die Antwortzeit von Sekunden auf 20 oder sogar weniger. Eigenes Office-Design ist die Verwendung des FPGA (Field Programmable Gate Array). FPGA ist so etwas wie ein Prozessor, dessen Hardware zur Lösung eines bestimmten Problems programmiert ist. Ein herkömmlicher Prozessor wird codiert, um einen bestimmten Satz von Anweisungen für bestimmte Datentypen auszuführen, und der Ausführungsablauf (der nicht mit dem Anwendungsablauf zu verwechseln ist) ist ebenfalls festgelegt. Im Gegensatz zum Prozessor sind FPGAs für den Befehlssatz, die Datentypen und den Ausführungsfluss nicht vorprogrammiert. Sie sind für eine bestimmte Aufgabe programmiert und können sie in einem solchen Zustand nur ausführen (bis zur nachfolgenden Neuprogrammierung). Eine effektive FPGA-Programmierung ist keine leichte Aufgabe. Änderungen am Programm können auch sehr viel Aufwand erfordern. Und obwohl das FPGA nicht die Einstellung von Usain Bolt impliziert (die Frequenzen sind viel niedriger als die des Prozessors), aber die uneingeschränkte Parallelität bei der Ausführung von Befehlen ermöglicht niedrigere Nachrichtenverarbeitungszeiten als auf dem Prozessor.


Abschließend empfehle ich Ihnen Performance-Analyse-Tools für Software. Der Intel VTune TM Amplifier und die Intel Processor Trace-Technologie zeigen Ihnen detailliert, wo und warum CPU-Zeit aufgewendet wird.


Wenn Sie sich für das Thema interessieren, können Sie meine Artikel zur Intel Developer Zone (in Englisch) lesen, die auch praktische technische Tipps zur Optimierung der Antwortzeit enthält.


  • https://software.intel.com/en-us/articles/optimizing-computer-applikationen-für-latency-part-1-configuring-the-hardware
  • https://software.intel.com/en-us/articles/optimizing-computer-applikationen-für-latency-part-2-tuning-applikationen

Jetzt auch beliebt: