Storage Performance Engineering

Hallo, alle miteinander! Unser großes und freundliches Team von Ingenieuren löst jeden Tag komplexe Probleme und trägt zur Entwicklung von High-Tech-Produkten bei - Datenverarbeitungs- und Speichersystemen. Wir haben uns entschlossen, Sie näher an ihre Routine heranzuführen, und heute starten wir eine Reihe von Interviews mit Kollegen, um Sie über alle Nuancen ihrer Arbeit in der ersten Person zu informieren.



Bild



Leistung ist eines der Hauptmerkmale guter Software, andere Merkmale von Speichersystemen werden nicht gewürdigt, wenn sie langsam oder instabil sind. Heute sprechen wir mit Sergey Kachkin Kachini- Leiter der Abteilung für technische Expertise der Abteilung für angewandte Forschung und technische Expertise von YADRO.



Sein Beruf hat mehrere Namen: Performance Analyst, Performance Engineer, Performance Tester. Und alle sind in Russland ziemlich selten. Performance Engineering hilft dabei, effiziente Computersysteme zu erstellen, die schnell und zuverlässig arbeiten. Seine Aufgabe ist es zu untersuchen, warum das System nicht so funktioniert, wie wir es möchten, die Gründe für die langsame oder nicht den Zielparametern der Arbeit entsprechende zu verstehen, Problembereiche zu identifizieren und zu finden, um sie zu beseitigen.  



Sergey Kachkin sprach über das Auffinden von Engpässen im Software-Stack und das Optimieren der Speicherleistung sowie über die Aktivitäten seines Teams.

 

Sergey, wie bist du zu YADRO gekommen? Haben Sie bereits Erfahrungen mit OpenPOWER gemacht?

Zuvor arbeitete ich für einen anderen Anbieter und war an der Unterstützung einer proprietären Version von UNIX OS auf IA64-Prozessoren (nicht zu verwechseln mit x86) in Bezug auf die Kernelleistung beteiligt. Die EPIC-Architektur ist nicht wie RISC, sie ist völlig anders. Dies ist meine erste Erfahrung mit OpenPOWER bei YADRO, und der Wiederaufbau hat einige Zeit gedauert. Aber die Idee von OpenPOWER ist trotz eines gewissen Minimalismus dieselbe, sodass alles gemeistert werden kann.



Was machen Performance Engineers? Welche Methoden werden in der Arbeit angewendet? Ist es für Sie schwierig, neue Mitarbeiter zu finden?



Die Hauptspezialisierung unseres Teams ist Performance Engineering oder Performance Engineering. Es handelt sich um eine separate Disziplin, die sicherstellen soll, dass die zu entwickelnde Lösung nicht funktionale Anforderungen erfüllt, insbesondere die Leistung. Es enthält eine Reihe von Praktiken, Kenntnissen, Methoden und Techniken, die in verschiedenen Phasen der Softwareentwicklung angewendet werden können: Vorbereitung, Programmierung, Test und Systembetrieb.



In Russland ist diese Disziplin nicht sehr verbreitet, zumindest wird ein solcher Eindruck durch die Ergebnisse der Suche nach Mitarbeitern erzeugt. In der Welt ist dies jedoch eine etablierte Richtung. Diese IT-Spezialisierung beinhaltet selten eine direkte Codierung. Wir programmieren wenig und wissen in der Tat nicht, wie man es wie professionelle Programmierer macht. Dies erfordert spezielle Fähigkeiten, um "Hot Spots" in Software zu lokalisieren, die sich auf nicht funktionale Anforderungen auswirken. Einerseits hilft es, ein Produkt zu schaffen, das den Anforderungen entspricht, andererseits verhindert es die Kosten für weitere Optimierungen oder Nacharbeiten.



Wie stellen Sie die Qualitätskontrolle und die Identifizierung von Engpässen im Software-Stack sicher?



Die Methoden können in zwei Typen unterteilt werden. Der erste ist der systemzentrierte Ansatz. Es ist ressourcenorientiert: Wir analysieren die Auslastung einzelner Systemkomponenten und gehen auf der Grundlage der erzielten Ergebnisse davon aus, dass ein Engpass vorliegt.



Der zweite ist der anwendungsorientierte Ansatz, bei dem das Forschungsobjekt die gesamte Anwendung oder einzelne Prozesse unter Linux ist. Wir schauen uns an, was die Anwendung macht, welche Arbeit sie macht. Ist diese Arbeit nützlich oder macht sie etwas Nutzloses, das heißt, sie verschwendet Zeit. Wenn die Anwendung wartet, sehen wir, worauf sie wartet. Normalerweise sind dies Hardware- oder Softwareressourcen, Synchronisationsmechanismen.



Im wirklichen Leben müssen Sie zwischen diesen Methoden wechseln. Das heißt, einerseits betrachten wir die Ressourcen: Gibt es offensichtliche Probleme, Fehler. Wir ziehen Schlussfolgerungen. Dann schauen wir uns die Anwendung an: wie es sich anfühlt. In diesem Fall ist die Anwendung der Speichersystemcode oder etwas anderes, das Gegenstand der Optimierung ist.



Wie kann man verstehen, dass Speicher "am Limit" funktioniert? Wie können Sie feststellen, ob Ihre Produktivität erschöpft ist? Welche Parameter weisen darauf hin? Was sind die wichtigsten Metriken zur Messung der Speicherleistung?



Dem durchschnittlichen Benutzer stehen mehrere Metriken zur Verfügung. Die wichtigste ist die Reaktionszeit. Sein absoluter Wert ist wichtig. Neben der Antwortzeit ist auch die Bandbreite wichtig. Wenn mit zunehmender Last die Antwortzeit zu steigen beginnt, während sich das IOPS und die Menge der übertragenen Daten nicht erhöhen, bedeutet dies, dass einige Speicherressourcen nahezu gesättigt sind. Wie Sie wissen, arbeitet ein Speichersystem so schnell, wie seine langsamste Ressource funktionieren kann.



Gleichzeitig können verschiedene Anwendungen entweder für die Antwortzeit oder für die Bandbreite von entscheidender Bedeutung sein. Wenn es sich beispielsweise um eine Datenbank handelt, handelt es sich normalerweise um Direktzugriff in kleinen Blöcken, viele Lesevorgänge, und es ist wichtig, dass diese in IOPS ausgeführt wird und die Mindestantwortzeit eingehalten wird. Für andere Lasten wie Streaming für Backups, Aufzeichnung von Videokameras oder das Internet der Dinge ist die Bandbreite wichtiger, die Fähigkeit, einen großen Datenstrom aufzuzeichnen.



Ist das Speichersystem für eine bestimmte Aufgabe optimiert oder wird es als universelle Lösung erstellt?



Speichersysteme waren lange Zeit, zumindest für allgemeine Zwecke, vielseitig einsetzbar. Sie werden für eine bestimmte Last nicht "geschärft" und versuchen, die gängigsten Anwendungen zu "befriedigen". Schließlich ist ungefähr bekannt, wie das Lastprofil der Datenbank, des Sicherungssystems, der Videoüberwachung usw. ist. Das Speichersystem muss ohne zusätzliche Konfiguration angemessen auf solche Lasten reagieren.



Allzweckspeichersysteme sind daher von Anfang an auf die gängigsten Aufgaben ausgelegt. Hierzu werden synthetische Tests mit einer Reihe von "kritischen" Profilen verwendet, die eine reale Situation simulieren. Meistens funktioniert es, aber die Realität ist immer viel komplizierter.



Reale Lasten werden sehr annähernd durch Kunststoffe modelliert. Dies ist im Allgemeinen ein wissenschaftsintensiver Bereich, da die Last neben IOPS, Bandbreite, Blockgröße und dem Verhältnis von Lese- / Schreiboperationen viel mehr Eigenschaften aufweist. Dies ist die Lokalisierung des Datenpunkts auf der Festplatte, das Vorhandensein von "heißen Bereichen", die zeitliche Verteilung von Anforderungen und die Einheitlichkeit ihres Eintreffens. Daher besteht die Möglichkeit, dass eine bestimmte Last k in keines der Profile fällt. Möglicherweise aufgrund der Funktionen der Software oder der Besonderheiten der Geschäftsaufgabe. In diesem Fall müssen Sie das System für bestimmte Aufgaben konfigurieren.



Untersuchen Sie die Anwendung, wie sie funktioniert. Möglicherweise müssen Sie entweder den Betrieb der Anwendung oder die Speichereinstellungen ändern. Manchmal ist es viel einfacher, Probleme auf der Anwendungsseite mit einer Anpassung zu lösen, als das Speichersystem zu ändern.



Wird das System automatisch für die Aufgabe konfiguriert? Benötigen Sie dafür künstliche Intelligenz? Kann der Administrator oder Benutzer das Lastprofil selbst auswählen?



Speichersysteme tun dies seit langer Zeit automatisch - der Administrator ist mit einer solchen Aufgabe nicht geladen. Normalerweise versuchen sie dies ohne künstliche Intelligenz zu erreichen - traditionelle Algorithmen. KI hat jedoch ein großes Potenzial. Wenn Sie damit vorhersagen können, welche Datenblöcke und zu welchem ​​Zeitpunkt die Anwendung anfordern kann, können Sie sich im Voraus darauf vorbereiten.



Wenn frühere Optimierungsalgorithmen recht einfach waren, wie z. B. Vorauslesen, dh beim sequentiellen Lesen von Daten, hat das System die Daten im Voraus in den Cache geladen oder im Gegenteil den Cache-Speicher für andere Daten freigegeben, erweitern sich jetzt die Möglichkeiten: Das System kann sich auf einen Spitzenwert von Anforderungen vorbereiten oder komplex organisiert sein. " Hot Data Spot. "



Wie groß sollte die Speicheroptimierung sein? Deckt es auch Serversoftware / -hardware, Infrastruktur (SAN) ab? Erfordert es eine enge Integration der Software- und Hardware-Stacks?



Aus Sicht des Performance Engineering wird das System als Ganzes in einem Komplex betrachtet, dh einer Anwendung, einem Host (Server), einer Speicherinfrastruktur (SAN) und Speichersystemen. Es ist wichtig zu verstehen, wie die Anwendung funktioniert, da sie Anforderungen an das Speichersystem generiert. All dies wird natürlich berücksichtigt und genutzt.



Es wird angenommen, dass die optimalste Option für die Verwendung von Laufwerken unterschiedlichen Typs in Speichersystemen die abgestufte Datenspeicherung ist. Kann ein Aufreißen als Mittel zur Steigerung der Speicherleistung angesehen werden?



Im Allgemeinen ähnelt das Zerreißen dem Zwischenspeichern - sie haben gemeinsame Elemente. Der einzige Unterschied besteht darin, dass Daten im Cache dupliziert werden, dh sie befinden sich sowohl auf der SSD (im Cache) als auch auf der Festplatte und wenn die Schichtung nur an einem Ort gespeichert wird. Das heißt, wenn das Zwischenspeichern eine Möglichkeit zur Leistungsoptimierung darstellt, kann das Zerreißen auch als Optimierungsmethode betrachtet werden.



Wo sehen Sie die Vor- und Nachteile von Software Defined Storage (SDS) in Bezug auf Leistungsanalyse und Systemoptimierung? Vielleicht sind dies einfachere, flexiblere Lösungen?



Im Gegenteil. SDS ist ein verteiltes System, das aus vielen Servern besteht, die miteinander interagieren. Wenn spezielle Betriebssysteme verwendet werden, eine Art Dateisystem, erhöht dies auch die Komplexität. Aus technischer Sicht ist dies schwieriger, aber in gewisser Weise interessanter. Auf der anderen Seite stellt SDS normalerweise keine strengen Leistungsanforderungen, während klassische Speichersysteme strenger sind. Was für softwaredefinierte Systeme vergeben wird, wird für den herkömmlichen Speicher nicht vergeben.



Eines der Ziele des Unternehmens ist die Entwicklung optimierter Produkte für Netzwerke mit künstlicher Intelligenz, IoT und der fünften Generation. Wie schwierig denkst du ist das? Wie werden diese Produkte aussehen?



Derzeit werden zum Speichern von Rohdaten in AI häufig Dateispeicher verwendet, um Modelle zu trainieren und zu erstellen - SDS, dh dies sind fast immer verteilte Lösungen. Meiner Meinung nach verwenden viele Unternehmen KI jetzt als eine Art Experiment. Sie betrachten es und versuchen zu verstehen, wie es nützlich sein kann. Daher sind die Anforderungen an die Hardware nicht sehr streng. Wenn es funktioniert - nun, es funktioniert nicht - können Sie ein oder zwei Tage warten. Da die Arbeit der KI in Unternehmen immer kritischer wird, steigen auch die Anforderungen an Festplattensubsysteme. Wir werden sehen, dass neue Speicherlösungen für KI und das Internet der Dinge bereits eine geschäftskritische Klasse sind.



Welche Rolle spielt die Partnerschaft von YADRO mit globalen Technologieunternehmen bei der Softwareoptimierung?



Aus Sicht eines Technikers hilft es sicherlich. Eine solche Zusammenarbeit erleichtert die Kommunikation der Ingenieure untereinander, ihren Zugang zu Informationen und vorgefertigten Entwicklungen und muss nicht jedes Mal das Rad neu erfinden.



Wie sehen Sie die Rolle der Virtualisierung im Speicher? Hilft es, Software-Engpässe zu beseitigen oder umgekehrt? Und wie hängen Systemleistung und Zuverlässigkeit zusammen? Kann die Zuverlässigkeit erhalten bleiben und gleichzeitig die Produktivität gesteigert werden?

Die Virtualisierung erhöht natürlich die Komplexität, kann jedoch nützlich sein, um eine Speicherfunktionalität von einer anderen zu isolieren. Im Allgemeinen handelt es sich hierbei um zusätzliche Kosten und Komplikationen. Daher sollte dies mit Vorsicht kritisch betrachtet werden.



Wenn es darum geht, die Produktivität zu steigern, ist es in der Tat leicht, die Zuverlässigkeit auf dem Weg zu verlieren. Dies ist eine Art Dualismus. Wenn wir beispielsweise über Server sprechen, steht bei einem Hochleistungsserver (HPC) die Zuverlässigkeit normalerweise an zweiter Stelle. Speichersysteme müssen im Allgemeinen zuerst eine hohe Verfügbarkeit, Funktionalität und Leistung bereitstellen. Mit zunehmender Zuverlässigkeit des Redundanzniveaus wird das System komplexer. Es wird notwendig, Elemente zu synchronisieren. Die Systemleistung wird jedoch unweigerlich darunter leiden. Die Aufgabe der Entwicklung besteht darin, diesen Effekt zu minimieren.



Jetzt gibt es neue Speicherklassen wie Speicherklassenspeicher, Persistenter Speicher, Flash-Laufwerke werden verbessert. Wie wirkt sich dies auf die Systemarchitektur aus? Hält die Software mit diesen Änderungen Schritt?



Zumindest versucht er es. Im Allgemeinen hat das Aufkommen des schnellen Speichers die Arbeitsweise von Leistungsingenieuren in der Branche erheblich verändert. Vor dem Aufkommen von SSDs war die überwiegende Mehrheit der IT-Leistungsprobleme auf Speicher-E / A zurückzuführen. Weil es schnelle Prozessoren und Festplatten (HDD) mit mechanischen Elementen gibt, die viele Größenordnungen langsamer sind als ein Prozessor. Daher mussten wir auf Kosten von Algorithmen versuchen, Verzögerungen von langsamen Festplatten auszugleichen.



Mit dem Aufkommen des schnellen Speichers müssen sich auch die Algorithmen ändern. Wenn der Algorithmus schwer genug ist, hat er vorher immer noch geholfen, da die Festplatte viel langsamer ist. Wenn Sie es geschafft haben, die Verzögerung in der Mechanik zu verbergen, ist das gut. Mit dem Aufkommen von SSDs sollte Software anders funktionieren. Es sollte die minimale Latenz einführen, um die maximale Geschwindigkeit von der SSD zu erhalten. Das heißt, der Bedarf an komplexen Algorithmen, die die Latenz vor Festplatten verbergen, hat abgenommen. Eine E / A-intensive Datenbank, die besonders empfindlich auf die Antwortzeit reagiert, kann auf eine SSD migriert werden.



Wird dies die Speicherarchitektur ändern? Ja und nein. Weil die Festplatten nirgendwo hingegangen sind. Einerseits muss der Code in der Lage sein, mit SSD zu arbeiten, dh sehr schnell zu sein. Auf der anderen Seite verwenden mechanische Scheiben Lasten, denen sie gut standhalten können, wie z. B. Streaming. Gleichzeitig nahm die Größe der Festplatten um ein Vielfaches zu, aber die Geschwindigkeit blieb dieselbe wie vor 10 Jahren.



All Articles