"Ein typischer Fehler - sinnlos alles hintereinander messen": ein Interview mit Andrey Akinshin über das Benchmarking



Letztes Jahr hat Andrei Akinshin (Traumtänzer) wurde das Buch „Pro .NET Benchmarking“ veröffentlicht : eine detaillierte Arbeit zum Benchmarking, die sowohl für .NET-Entwickler als auch für IT-Spezialisten in anderen Bereichen nützlich ist.

Als noch ein paar Monate bis zu seiner Veröffentlichung verblieben, veranstalteten wir die DotNext 2019 Piter-Konferenz, bei der wir Andrei in der Online-Sendung nach dem Buch und allgemein nach Benchmarking fragten. Es scheint, dass dieses Interview seitdem veraltet sein sollte: Dort wird über das Buch in der Zukunftsform gesprochen, und jetzt sind es bereits sechs Monate. In den letzten sechs Monaten hat sich die Menschheit jedoch nicht anders für das 99. Perzentil entschieden. Für alle, die Benchmarking verwenden können, sind die Antworten von Andrei immer noch relevant und interessant.

Er wird auftretenüber die Zukunft von DotNext mit dem Thema „Sprechen wir über die Leistungsanalyse“ - das heißt nicht über das Schreiben von Benchmarks, sondern über die Analyse der gesammelten Werte. Derzeit studiert Andrey Hunderte von Artikeln zur mathematischen Statistik, um Ihnen die Methoden zu erläutern, die für die Leistungsanalyse im wirklichen Leben am besten geeignet sind. In dem Buch wird auch auf eine solche Analyse geachtet, und in einem Interview erklärte Andrey nur ihre Bedeutung. In Erwartung eines neuen Berichts haben wir daher ein Interviewvideo für alle geöffnet und ein Textprotokoll speziell für Habr erstellt: Jetzt kann es nicht nur angezeigt, sondern auch gelesen werden.


Die Hauptsache über das Buch


- Wir begrüßen wieder die Zuschauer der DotNext-Sendung. Diesmal ist Andrey Akinshin bei uns.

- Hallo alle zusammen!

- Die wichtigste Neuigkeit, die Sie betrifft, ist die Ankündigung eines Buches, das im September veröffentlicht wird ...

- Wenn alles gut geht, wird es Ende Juni veröffentlicht.

Hier müssen Sie verstehen, wie Fristen funktionieren. Es gibt die extremsten, die auf keinen Fall verletzt werden können. Bei Amazon hat das Buch jetzt ein Erscheinungsdatum um den 23. August. Und wenn Sie dieses Datum umdrehen, werden alle möglichen Strafen verhängt, Amazon wird unglücklich sein. Und wenn das Buch früher herauskommt - gut.

Daher hoffe ich wirklich, dass es im Juni möglich sein wird, zu lesen, wenn es nirgendwo Probleme gibt. Ende August ist also die Frist. Sie arbeiten auch in der IT, damit Sie verstehen, wie diese Dinge funktionieren.

- Die meisten Zuschauer haben wahrscheinlich schon von dem Buch gehört. Aber für diejenigen, die es nicht wissen, beginnen wir mit einer Geschichte über sie.

- Das Buch heißt "Pro .NET Benchmarking . " Sie stammt aus der Apress-Serie - der gleichen, in der kürzlich das Pro .NET Memory Management- Buch von Conrad Coconut veröffentlicht wurde . Und es gab ein Buch von Sasha Goldstein „Pro .NET Performance“ - Sie haben wahrscheinlich davon gehört, es wird von Zeit zu Zeit auf DotNext gespielt. Und in der gleichen Serie kommt mein Buch. Es geht darum, wie man von Anfang bis Ende Benchmarking durchführt.

Ich habe versucht, eine Vielzahl von Aspekten abzudecken, angefangen bei der Statistik, es gibt ein separates Kapitel darüber. Und es ist nicht die Art und Weise, wie wir an der Universität unterrichtet wurden. Ich habe kein einziges Beispiel für "Bälle, die in Kisten gelegt werden". Konzentrieren Sie sich auf das, was beim Benchmarking nützlich sein kann: Metriken, Standardabweichung, Standardfehler, alle Arten von Konfidenzintervallen und deren Interpretation. Das heißt, wir sprechen über Folgendes: Wenn das bedingte BenchmarkDotNet Ihnen eine Million verschiedene Zahlen gegeben hat, was soll ich damit machen? Es werden praktische Empfehlungen zur Interpretation dieser Daten gegeben und Schlussfolgerungen gezogen.

Es gibt beispielsweise ein Kapitel über CPU-gebundene Benchmarks und über speichergebundene Benchmarks. Es gibt viele verschiedene Fallstudien mit Beispielen, wie Sie einen Benchmark für 3-4 Zeilen schreiben und sich aufgrund einiger mikroarchitektonischer Effekte moderner Intel-Prozessoren gleichzeitig in den Fuß schießen können.

Und es gibt ein Kapitel über Leistungsanalyse und Leistungstests. Benchmarking ist als separates Experiment gut, aber viele Leute möchten Benchmarks auf CI setzen, sie ständig auf einem Server (im Idealfall auf demselben) betreiben und Daten sammeln, um beispielsweise Leistungseinbußen zu erkennen. Daher gibt es ein Kapitel darüber, wie man mit solchen Daten arbeitet und verschiedene Arten von Leistungstests schreibt (es gibt viele davon unterschiedliche). Was ist zum Beispiel der Unterschied zwischen Tests für einen Kaltstart, für einen Heißstart, wie Graphen verarbeitet werden, wie ganze Datenfelder verarbeitet werden.

Bei einem der letzten DotNext sprach ichÜber die Leistungsanalyse sprach er über verschiedene Methoden zur Suche nach Leistungsanomalien. Der Abbau ist nicht das einzige Problem, das auftreten kann. Beispielsweise gibt es multimodale Verteilungen, wenn der Benchmark eine oder zehn Sekunden lang funktioniert. In einem großen Produkt (insbesondere mit mehreren Threads) werden solche Fälle sicherlich auftreten, und normalerweise verbergen sie das Problem. Auch wenn es nicht um Leistungstests geht, die auf den entsprechenden Maschinen ausgeführt werden, sondern um die üblichen Tests, weiß der Teufel, wie man "zittert" und viel Varianz erzeugt. Wenn Sie all diese Daten sammeln und analysieren, können Sie viele Tests mit solchen Problemen finden.

Im Allgemeinen gibt es beim Benchmarking eine Vielzahl sehr interessanter Aufgaben, die ich sorgfältig in den Regalen angeordnet habe. Aber ich habe versucht, es so praktisch wie möglich zu machen, damit es nicht nur eine Theorie war, sondern etwas Wissen, das ich für mein Produkt in der Produktion verwenden konnte.

Benchmarking-Feinheiten


- Ich erinnere mich an den Satz, den ich irgendwo gelesen habe, dass Sie für jedes Benchmark-Ergebnis im Internet die falsche Interpretation dieses Ergebnisses finden können. Inwieweit stimmen Sie diesem Satz zu?

- Absolute Zustimmung. Es wird viel über gültige und ungültige Benchmarks gesprochen, aber wenn Sie aus der Vogelperspektive schauen, wenn Sie etwas irgendwie gemessen, zumindest einige Leistungsmetriken gesammelt und in einer Datei oder Konsole angezeigt haben, dann ist dies ein Benchmark mit einem bestimmten Aus der Sicht ist es gültig: Etwas misst und zeigt einige Zahlen an. Die Hauptfrage ist, wie Sie diese Zahlen interpretieren und was Sie als nächstes tun werden.

Einer der ersten Fehler von Menschen, die sich mit dem Thema Benchmarking beschäftigen, ist, dass sie alles bewerten, ohne sich die Frage zu stellen, warum. Nun, wir haben Benchmarking durchgeführt, gemessen - und was dann? Es ist sehr wichtig zu bestimmen, zu welchem ​​Zweck wir Benchmarking durchführen.

Wenn wir beispielsweise eine stabile Arbeitslast erstellen möchten, mit der wir die Leistung bestimmter Fälle bewerten und Leistungseinbußen feststellen können, ist dies ein Fall. Ein anderer Fall: Wir haben zwei Bibliotheken, die dasselbe tun, und wir sind für die Leistung und wir möchten die schnellste auswählen - wie vergleichen Sie das?

Aus Sicht der Interpretationen kann jeder, der zur richtigen Geschäftsentscheidung führt, als gut angesehen werden. Es ist nicht unbedingt richtig, aber wenn Sie erfolgreich sind, ist es gut.

Und es gibt so etwas, dass ich sogar spezielle Übungen in meinem Buch habe. Angenommen, es gibt zwei Algorithmen, und die Übung lautet wie folgt: Zuerst müssen Sie einen Benchmark erstellen, der zeigt, dass der erste Algorithmus zehnmal schneller als der zweite ist, und dann einen Benchmark, der das Gegenteil zeigt. Sie können mit den Quelldaten und der Umgebung spielen, Mono in .NET Core ändern oder unter Linux anstelle von Windows ausführen - es gibt eine Million Anpassungsoptionen. Und die Schlussfolgerung lautet: Wenn Sie zeigen möchten, dass ein Programm schneller als ein anderes funktioniert, gibt es höchstwahrscheinlich eine Möglichkeit, dies zu tun.

Um auf Ihre Frage zurückzukommen, ist es daher sehr schwierig, eine Grenze zwischen gültigen und ungültigen Benchmarks zu ziehen und eine Definition von ungültig zu geben (dh was sollte vorhanden sein, damit wir erkennen, dass es schlecht ist). Und das Gleiche gilt für die Unterscheidung zwischen der „richtigen“ und der „falschen“ Interpretation: Sie können nicht vollständig verstehen, was im Benchmark geschieht, Sie können nicht alle internen Prozesse vollständig erklären (was nicht sehr gut ist, es wäre besser, dies zu tun, aber Sie können diesen Teil überspringen). wenn sehr beschäftigt), aber gleichzeitig im Allgemeinen verstehen, wie das Bild aussieht. Und wenn Sie es geschafft haben, es richtig zu machen (auch hier stellt sich die Frage, was „richtig“ ist) und zur richtigen Geschäftsentscheidung gekommen sind, dann sind Sie gut gemacht.

„Wenn Sie Ihr Buch nur nachdenklich lesen, werden Sie dann die„ richtigen “Entscheidungen treffen? Oder gibt es viele Dinge außerhalb des Rahmens des Buches, die auch Einfluss haben?

- Benchmarking ist ein Thema, das meiner Meinung nach nur in der Praxis beherrscht werden kann. Ja, in dem Buch gebe ich viele Methoden, Empfehlungen und beschreibe Fallstricke. Beim Benchmarking gibt es viele solcher Probleme, die Sie im Leben nie erraten werden, wenn Sie nichts über sie wissen. Wenn Sie jedoch davon wissen, gibt dies absolut keine Garantie dafür, dass Ihre Benchmarks korrekt sind. Das heißt, dies ist ein so minimales Toolkit, das hilft, sich auf dem Gebiet irgendwie zu orientieren.

Sie können normale Benchmarks und Leistungstests nur schreiben, wenn Sie sich systematisch mit diesem Bereich befassen. Das neuronale Gitter im Kopf trainiert das Lesen von Leistungsberichten. Wenn Sie sich die Verteilungen ansehen, die bei Leistungsmessungen erhalten wurden, sehen Sie sich Übersichtstabellen an, beispielsweise aus BenchmarkDotNet (und nicht nur die Spalte „Durchschnitt“, sondern auch die Standardabweichung ) betrachten Sie Standardfehler, zusätzliche Merkmale, ein Minimum, ein Maximum, ein Quantil, ein 99. Perzentil.

Wenn Sie sich das alles sehr, sehr, sehr genau ansehen, wird ein bestimmtes Mindestvolumen angesammelt, das es Ihnen ermöglicht, Performance-Investitionen viel schneller durchzuführen und zu sehen, was Menschen ohne Erfahrung (selbst wenn sie mein Buch und eine Million Blog-Beiträge lesen) nicht sehen werden aufgrund der Tatsache, dass sie keine Erfahrung haben. Sie werden keine Probleme sehen oder nicht in der Lage sein, die Daten sofort und korrekt zu interpretieren.

- Zu diesem DotNext in einem Interview mit Dmitry Nesteruk (Mezastel) Wir sagten, dass IT-Bücher normalerweise schnell veraltet sind, aber wenn er über Designmuster schreibt, ändert sich dort nicht jedes Jahr alles. Und was ist mit Benchmarking: Dieses Buch ist möglicherweise auch schon lange nicht mehr veraltet, oder hätten Sie vor zwei Jahren noch etwas anderes geschrieben?

- Es ist sehr schwierig, eine einsilbige Antwort zu geben. Es gibt eine Grundlage, ein Material, das nicht veraltet ist. Dieselbe Statistik: Da das 99. Perzentil vor zwei Jahren in Betracht gezogen wurde, wird es immer noch in Betracht gezogen, und es besteht der Verdacht, dass sich in zwei Jahren nichts ändern wird.

Gleichzeitig stelle ich fest: Ich glaube, dass Benchmarking eine separate Disziplin sein sollte. Aus irgendeinem Grund hat historisch gesehen niemand systematischen Messungen gebührende Aufmerksamkeit geschenkt. Nun, was ist da? Er nahm es, startete den Timer, schaltete den Timer aus und sah, wie viel vergangen war. Und in dem Buch sind nach vorläufigen Schätzungen mehr als 600 Seiten erschienen, und jeder fragt mich: "Was könnte auf 600 Seiten geschrieben werden?"

Und ich glaube, dass dies eine Disziplin sein sollte, ein separater Bereich der Informatik. Und dies ist eine solche „sprachunabhängige“ Richtung, in der die allgemeine Ausstattung korrekt bleibt und sich nicht ändert: Dies ist, was die Menschheit als Ganzes erreicht hat. Dies gilt für alle Laufzeiten, Sprachen, Ökosysteme. Dies ist jedoch nur ein Teil der Antwort.

Und der andere Teil ist bereits an die Funktionen der Laufzeit gebunden, an die Funktionen von .NET. Im Moment (wir haben viel darüber im Buch) haben wir das .NET Framework, es gibt den .NET Core und es gibt Mono. Leistungsmessungen können zu unterschiedlichen Laufzeiten oder sogar zu zwei benachbarten Versionen derselben Laufzeit variieren. Wenn Sie .NET Core 2.2 und das kommende .NET Core 3.0 verwenden, unterscheiden sich einige Workloads wie Tag und Nacht. Sie machen so coole Optimierungen, dass die einfachsten Szenarien einfach 10-mal, 50-mal beschleunigt werden.

Es ist klar, dass wenn Sie zur neuen Version von Core wechseln, das gesamte Programm nicht 50-mal schneller funktioniert, aber einzelne kleine Teile, die meistens in synthetische Benchmarks fallen, können durchaus übertaktet werden.

Und was sich ändert, ändert sich hauptsächlich in Bezug auf all diese Versionen, neue Optimierungen erscheinen. In .NET Core 3.0 wird beispielsweise gestuftes Jitting angezeigt . Das heißt, die Laufzeit kann zunächst schnell eine einfache (und nicht sehr effektive) native Implementierung für die Methode per Code generieren. Und wenn die Laufzeit bemerkt, dass Sie diese Methode viele, viele Male aufrufen, wird sie etwas mehr Zeit im Hintergrund verbringen und einen produktiveren Code neu generieren. Es geht um die Tatsache, dass es in HotSpot viele Jahre in Java gegeben hat. In der .NET-Welt wird es in der Version erscheinen, die dieses Jahr in der zweiten Jahreshälfte standardmäßig enthalten ist (Anmerkung des Herausgebers: Wir erinnern Sie, das Interview wurde 2019 aufgenommen) .

Für BenchmarkDotNet ist es eine Herausforderung, solche Fälle normal zu behandeln. In der Java-Welt Alexey Shipilev in seinem JMHIch habe vor langer Zeit gelernt, damit umzugehen, aber wir müssen es noch. Auch zu diesem Thema kommuniziere ich mit den Leuten, die die Laufzeit gesehen haben. Das heißt, ich brauche spezielle Stifte, APIs von ihnen, um mit allem richtig umzugehen.

Diese Dinge ändern sich. Bald werden wir alle Laufzeiten vereint haben, es wird ein .NET 5 geben. Ich gehe davon aus, dass es irgendwie anders umbenannt wird, dass dies ein Zwischenname ist. Vielleicht ist es nicht 5, sondern 6, weil wir bereits eine Version von .NET Core 5.0 hatten.

- Wie wir von Windows wissen, ist es für Microsoft kein Problem, die Nummer in der Version zu überspringen.

- Ja. Bereits zur Zeit von DNXEs gab Ziel-Frameworks mit dem fünften .NET Core, jetzt wurde „5.0“ bereits viel verwendet, wo es viele alte Beiträge gibt. Ich weiß also nicht, dass sie jetzt die fünfte nach der dritten Version machen werden, aber ich hätte nicht nur die vier, sondern auch die fünf verpasst und hätte sofort die sechste gemacht. Und unter Berücksichtigung der Tatsache, dass sie jetzt meiner Meinung nach die ungeraden Versionen stabil und die geraden nicht sehr stabil machen wollen, wäre es möglich, sofort sieben zu machen.

Nun, das sind ihre Kopfschmerzen. Es ist jedoch wichtig, dass Sie die Entwicklung der Laufzeiten überwachen. Dieser .NET-spezifische Teil wird veraltet - nicht so schnell, dass er veraltet ist, sondern leise.

Ich denke bereits daran, die zweite Ausgabe eines Buches zu erstellen, in dem all dies aktualisiert wird. Intel-Prozessoren stehen auch nicht still, sie entwickeln sich, es erscheinen neue Optimierungen, die auch schlau gehandhabt werden müssen. Skylake präsentierte viele unangenehme Überraschungen. Im selben BenchmarkDotNet wurde viel Arbeit geleistet, um die kniffligen Optimierungen zu umgehen und stabile Ergebnisse zu erzielen.

Interaktion mit BenchmarkDotNet und Rider


- Es ist klar, dass Sie durch die Arbeit an der BenchmarkDotNet- Bibliothek viel Erfahrung gesammelt haben. Daher ist es logisch, dass Sie das Buch zum Thema Benchmarking geschrieben haben. Und hier stellt sich die Frage: Ist das Buch irgendwie an BenchmarkDotNet gebunden oder ist es „werkzeugunabhängig“?

- Ich habe versucht, sie werkzeugunabhängig zu machen. Über BenchmarkDotNet habe ich einen kleinen Abschnitt, den ich auch als Beispiele in meinen Fallstudien verwende: Wenn ich einen kleinen mikroarchitektonischen Effekt zeigen muss, sage ich: „Hier schreiben wir einen Benchmark mit BenchmarkDotNet“. Nur um nicht eine Million Umreifungen in jeden Benchmark des Buches zu setzen, kann man die Aufwärmlogik nirgends separat schreiben. Wir haben bereits eine vorgefertigte Lösung, die die gesamte Benchmark-Routine für uns erledigt, und wir werden nicht mehr über die Methodik sprechen (wir haben am Anfang darüber gesprochen), sondern über die Auswirkungen auf CPU-Ebene.

Hier sind zwei Anwendungsfälle, und ich habe versucht, den Rest so weit wie möglich von BenchmarkDotNet zu abstrahieren. Dass das Buch nicht nur für .NET-Entwickler, sondern beispielsweise auch für Java-Entwickler nützlich war. Da alle gängigen Mechaniken problemlos auf jede andere Plattform portiert werden können, werden .NET und BenchmarkDotNet als Hilfsmittel zur Veranschaulichung des Konzepts verwendet.

- Und in die andere Richtung war der Einfluss? Was haben Sie bei der Arbeit an dem Buch endlich verstanden, was Sie in BenchmarkDotNet so tun müssen?

- Ja, ich habe alle möglichen kleinen Chips geschrieben, damit sie in das Buch aufgenommen werden können. Zum Beispiel die coole Erkennung multimodaler Verteilungen, über die ich bereits gesprochen habe.

Wenn Sie die Ergebnisse des Benchmarks analysieren, sollten Sie sich immer die Verteilung ansehen, das Bild öffnen und untersuchen, was dort passiert ist. Aber in der Praxis tut es niemand. Denn wenn ich unter bestimmten Bedingungen 50 Benchmarks auf einer Codebasis ausführe und diese Codebasis 10 Mal am Tag ändere und jedes Mal, wenn ich den vollständigen Satz neu starte, selbst wenn ich keine 50 Grafiken sehe, muss ich dies tun träge. Und das macht im Großen und Ganzen keinen Sinn, das ist keine menschliche Aufgabe, das ist eine Aufgabe des Tunings.

BenchmarkDotNet verfügt über einen coolen Algorithmus, der automatisch feststellt, dass die Distribution multimodal ist, und den Benutzer warnt: „Dude! Schauen Sie sich die Tabelle an! Hier ist alles schlecht! Hier wurde der Durchschnittswert in der Spalte angezeigt. Sehen Sie ihn sich nicht an! Es entspricht nichts, schauen Sie sich die Tabelle an! “

Und dies wird nur in den Fällen gedruckt, in denen es wirklich wichtig ist, eine Person in Grafiken nicht umsonst abzulenken. Dort ist ein Ansatz, der auf den sogenannten m-Werten von Brendan Gregg basiert, ein führender Performance-Ingenieur bei Netflix.

Aber sein Ansatz hat mir nicht gereicht, weil er speziell konstruierte Histogramme verwendet, die auf der Verteilung basieren. Das heißt, ein Histogramm wird dem Eingang zugeführt, der n-Wert wird berücksichtigt und es wird magisch dadurch bestimmt, ob wir eine multimodale Verteilung haben oder nicht. Und wie man Histogramme erstellt, hat Brendan Gregg nicht geschrieben! Ich musste eine Art eigenes Fahrrad erfinden, was überraschenderweise gut funktionierte. Dieser Algorithmus ist in einem Buch zusammengefasst.

Es gab einige solcher Geschichten. Das direkte Schreiben eines Buches dauerte zweieinhalb Jahre. Im Allgemeinen sammle ich seit fünf Jahren und zweieinhalb Jahre nach dem Abschluss einer Vereinbarung mit dem Verlag Inhalte. In diesen zweieinhalb Jahren wurde die Bibliothek dank des Buches in vielerlei Hinsicht gepumpt, und viele Dinge sind dort aufgetaucht.

- Es ist schwer vorstellbar, aber neben dem Buch und BenchmarkDotNet gibt es in Ihrem Leben auch Arbeiten an Rider - und dort werden Sie wahrscheinlich auch Benchmarks erstellen. Kannst du darüber sprechen? Sie hatten auf Twitter Fotos von einem MacBook im Gefrierschrank und neben der Heizung , um zu überprüfen, wie sich dies auf die Leistung auswirkt - war es für die Arbeit oder für ein Buch oder beides gleichzeitig?

- Eher alle zusammen. Im FahrerWir verwenden BenchmarkDotNet für individuelle Performance-Investitionen. Das heißt, wenn Sie herausfinden müssen, wie Code in einem leistungskritischen Teil am besten geschrieben werden kann, oder wenn Sie untersuchen möchten, wie sich das Verhalten eines Codes unter Mono unter Linux und unter .NET Framework unter Windows unterscheidet. Wir nehmen BenchmarkDotNet, entwerfen ein Experiment, sammeln Ergebnisse, ziehen Schlussfolgerungen, treffen Geschäftsentscheidungen und schreiben Code, damit er überall schnell funktioniert. Und dann wird dieser Benchmark verworfen.

Das heißt, wir haben keine systematischen Benchmarks für BenchmarkDotNet, die auf CI ausgeführt würden. Stattdessen haben wir viele andere Bereiche der Performance-Arbeit. Zum Beispiel ein internes Tool, das Zahlen aus allen Tests sammelt und nach unterschiedlichen Leistungsanomalien sucht, dieselben multimodalen Verteilungen, Tests mit einer großen Standardabweichung und alles in einem Dashboard sammelt.

Ein weiterer Ansatz, an dem wir schon sehr lange gearbeitet haben, dies aber nicht getan haben, sind zuverlässige Leistungstests. Das heißt, wir möchten einen Ansatz entwickeln, bei dem es unmöglich ist, Leistungseinbußen im Hauptzweig einzufrieren.

Und klassische Benchmarks sind nicht sehr geeignet, weil sie sehr ressourcenintensiv sind. Es ist notwendig, viele Iterationen durchzuführen, um normale Statistiken zu erhalten und irgendwie damit zu arbeiten. Und wenn Sie Hunderte oder Tausende von Leistungstests haben, wenn Sie jeden Test wie erwartet 30 Mal ausführen, und dies ist für jeden Brunch jeder Person - kein Eisen ist genug.

Daher möchte ich einerseits so wenig Iterationen wie möglich durchführen (idealerweise eine, aber es ist sehr schwierig zu sagen, ob Sie eine Verschlechterung haben). Das Schlimmste, was passieren kann, ist falsch positiv, wenn Sie nichts falsch gemacht haben, aber das System spricht von Leistungseinbußen und erlaubt Ihnen nicht, den Brunch im Master einzufrieren. In diesem Fall werfen sie Steine ​​auf mich und niemand wird dieses System benutzen.

Wenn nach einer Iteration der Verdacht auf Perfdegradation besteht, aber kein 100% iges Vertrauen besteht, lohnt es sich daher, die zweite Iteration durchzuführen. Nach dem zweiten können Sie entscheiden, dass bei uns alles in Ordnung ist, nur durch Zufall, dass etwas passiert ist. Sie können sagen, dass wir jetzt sicher sind, dass die Leistung abnimmt und der Marsch verboten wird. Und Sie können sagen: "Nein, zwei Iterationen reichen immer noch nicht aus, wir müssen zum dritten gehen." Gut und so weiter.

Und bei einer kleinen Anzahl von Iterationen (eins, zwei, drei) funktionieren Standardtests überhaupt nicht. Hier ist mein Lieblings- Mann-Whitney- Test.funktioniert einwandfrei, wenn Sie mindestens fünf Iterationen haben. Aber wir erreichen den fünften erst, wenn alles völlig schlecht ist. Dementsprechend ist es notwendig, einen solchen Satz von Heuristiken zu entwickeln, die niemals falsch positiv sind, aber gleichzeitig Verschlechterungen erkennen, wenn sie existieren, mit der minimal möglichen Anzahl von Iterationen. Und jetzt ist dies eine ziemlich schwierige Aufgabe für eine Mischung aus Programmierertechnik und mathematischen Formeln. Wir sind noch nicht fertig, aber wir werden dies tun.

Und über das Macbook im Kühlschrank - das ist auch alles für die Arbeit. Eines der Mini-Projekte, die ich ziemlich oft mache, ist das Studium von thermischen Drosselungsmodellen. Die Situation ist wie folgt: Wenn der CPU-gebundene Benchmark die Hardware sehr stark belastet, steigt die Temperatur der CPU und wenn sie einen bestimmten Schwellenwert erreicht, sagt der Intel-Prozessor oder das Intel-Betriebssystem: „Ay-yy-yy! Wir überhitzen! “ - und für einige Zeit reduziert die Frequenz. Und dann werden zum Beispiel 2-3 Iterationen erhalten, bei denen angeblich eine Leistungsverschlechterung sichtbar ist. Und wir sagen: „Oh, oh, oh, oh! Alles ist schlecht! Wir werden diesen Brunch nicht abhalten. “ Tatsächlich haben wir jedoch nur einen überhitzten Performance-Agenten.

Es gibt verschiedene Möglichkeiten, damit umzugehen. Wir haben einen eigenen Serverraum mit eigenen Ständen, wir versuchen dort eine ausreichende Kühlung bereitzustellen, damit diese thermische Drosselung nicht auftritt. Dies gelingt aber auch nicht immer. Das heißt, wir können die Agenten nicht vollständig einfrieren, sie werden nicht sehr stark davon betroffen sein, aber irgendwie müssen wir kämpfen.

Eine andere Möglichkeit besteht beispielsweise darin, den Turbo-Boost auszuschalten, damit der Prozessor die Grundfrequenz nie überschreitet. Dies verringert dementsprechend die Wahrscheinlichkeit einer Überhitzung, der Prozessor ist bereits nicht so heiß. Und zweitens erhalten wir eine stabilere Frequenz (bei einem Turbo-Boost zittert es oft ziemlich stark, und wenn der Turbo-Boost bei der Grundfrequenz ausgeschaltet ist, geht es viel richtig und Sie erhalten ein viel stabileres Ergebnis).

Und die Modelle für die thermische Drosselung sind sehr unterschiedlich: Erstens hängt vieles vom Prozessor und der Konfiguration des gesamten Bügeleisens ab, und zweitens vom Betriebssystem. Nehmen Sie zum Beispiel einen Mac: Wir haben viele Mac-Tests, da es viele Benutzer gibt, die nicht möchten, dass Rider langsamer wird. Und es gibt ein sehr aggressives thermisches Drosselungsmodell.

Bei den kürzlich angekündigten neuen Intel-Prozessoren gibt es noch komplexere Witze. Wenn Ihre Temperatur unter einen bestimmten Schwellenwert wie 50 Grad fällt, kann die Frequenz bei einem regulären Turbo-Boost sogar höher als die maximale Frequenz springen. Das heißt, sie machen so etwas wie dynamisches Übertakten "ein bisschen" bei niedrigen Temperaturen. Der gleiche Effekt. Unsere Agenten sind immer noch bedingt alte Prozessoren, wurden noch nicht aktualisiert, aber Geeks, die sich gerne die neuesten Produkte kaufen, können darauf zugreifen.

Zukunft


"Ich muss dich unterbrechen, weil die Zeit knapp wird." Aber für diejenigen, die fasziniert sind: Wirst du einen Blog-Beitrag zu diesem Material schreiben?

- Ja, während ich Material sammle, ist dort alles sehr interessant, ein sehr komplexes Modell der thermischen Drosselung. Unter Windows gibt es beispielsweise Power Throttling, mit dem Sie Batteriestrom und vieles mehr sparen können. Während ich Daten sammle, werde ich alles entweder in einem Blog-Beitrag oder sogar in einem wissenschaftlichen Artikel kombinieren oder es wird in die zweite Ausgabe des Buches fallen.

, . — , , .

DotNext 2020 Piter -. , , , . -, , . -, . — .

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


All Articles