Warum laufen Server nicht immer mit maximaler Geschwindigkeit?

12

Dies ist eine Frage, die mich seit einiger Zeit beschäftigt, und ich kann nichts online finden, was darüber spricht. Ich habe einen Server mit VMware Hypervisor ESXi. Wenn ich darauf virtuelle Maschinen hochfahre, dauert das Hochfahren normalerweise 2-3 Minuten. keine furchtbar lange Zeit, aber nicht augenblicklich. Wenn ich mir jedoch die Leistungsprotokolle auf dem Server ansehe, beträgt weder die Prozessor-, RAM- noch die Datenträgerverwendung etwa 100%. Normalerweise machen sie einen Durchschnitt von 60% -80%. Wenn der Server also noch etwas zu tun hat, warum macht er es dann nicht mit 100%?

Mir scheint, dass die Komponente, die die Leistung einschränkt, zu jedem Zeitpunkt zu 100% ausgeführt werden sollte. Wenn ich zum Beispiel eine sehr langsame Festplatte habe, sollte sie fast immer mit 100% laufen. Daher sollte mindestens einer der Bereiche (Prozessor, RAM, Festplatte und Netzwerk) immer auf 100% eingestellt sein, es sei denn, der Server ist vollständig im Leerlauf.

Warum ist das nicht der Fall?

Kernel Stearns
quelle
Ältere Linux-Distributionen, die nicht auf systemd basieren, konnten den Start nicht effizient parallelisieren. Die * BSDs leiden immer noch darunter. Booten Sie eine moderne Linux-Distribution und sehen Sie, wie sie sich unterscheidet.
Michael Hampton

Antworten:

18

Die Latenz wird ein Grund sein. Die Verzögerung zwischen "Datenträger gibt mir die Daten, die ich benötige, bevor ich etwas anderes tun kann" und die Zeit, in der die Daten zurückkommen, lässt die CPU für diese Zeit im Leerlauf.

Die Ressourcen werden wahrscheinlich zu 100% ausgeführt, jedoch nur für sehr kurze Zeiträume. Das Booten eines Betriebssystems folgt dem allgemeinen Muster: "Etwas verarbeiten oder entscheiden, etwas von der Festplatte abrufen, etwas im Speicher tun, etwas mit einem Gerät tun" und wiederholt sich viele Male pro Sekunde. Wenn Sie also eine Festplatte mit 25% in einem Zeitraum von 2 Sekunden sehen, bedeutet dies wahrscheinlich, dass sie 0,5 Sekunden lang mit 100% lief, und dann den Rest der Zeit im Leerlauf verbringen.

Wie die EEAA betonte, machen Multicore-Systeme dies etwas komplexer. Eine Software mit einem einzigen Thread auf einer CPU, die vier Threads ausführen kann, kann bei voller Geschwindigkeit nur 25% erreichen. Selbst Multithread-Software kann selten 100% erreichen, da Daten (normalerweise) von der Festplatte in den Arbeitsspeicher, in den Cache und in die CPU fließen müssen. Es ist schwierig, diese Pipeline voll zu halten, und dies ist vor allem bei vorhersehbaren Workloads wie der Videokodierung der Fall. In diesem Fall kann das Betriebssystem Lesemuster beobachten und Daten abrufen, bevor sie benötigt werden, und sie in geeignete Caches wie den Festplatten-Cache im RAM ablegen.

Tim
quelle
16

Sie denken sehr simpel darüber nach, was Sie veranlasst, einige falsche Annahmen zu treffen, die ich versuchen werde, zu klären.

Um die CPU-Auslastung zu verstehen, müssen Sie zunächst und möglicherweise am einfachsten auf einem Multicore-System berücksichtigen, ob die Prozesslast multithreaded ist und mehrere Kerne ausnutzen soll. Ist dies nicht der Fall, wird je nach der ausgeführten Prozessmischung möglicherweise nicht immer eine 100% ige Auslastung angezeigt. Je.

Zweitens müssen Sie die Leistung der E / A-Geräte berücksichtigen. Woher weiß Ihr System beispielsweise, zu wie vielen IOps Ihre Geräte fähig sind? Das tut es nicht. Eine aussagekräftigere Messgröße, die Sie überwachen sollten, ist Ihr iowaitWert während des Startvorgangs (der möglicherweise während des Startvorgangs nur schwer ermittelt werden kann) oder die Datenträgerwarteschlangen / -latenz während des Startvorgangs (der von Ihrem Hypervisor leichter ermittelt werden sollte). Wenn Warteschlangen oder Latenzspitzen auftreten, tragen Ihre E / A-Geräte wahrscheinlich zu Ihren Leistungsproblemen bei.

EEAA
quelle
11

Ich arbeite seit ungefähr 20 Jahren mit Servern. Es ist normalerweise keine gute Sache, wenn eine Komponente die ganze Zeit zu 100% ausgeführt wird.

Nehmen wir zum Beispiel an, Sie haben eine SQL-Datenbank, die nicht auf die Festplatte ausgelagert werden soll, sondern vollständig über genügend Arbeitsspeicher verfügt.

Wenn Ihre Datenbank 24 GB groß ist und das Betriebssystem 8 GB benötigt, möchten Sie nicht nur 32 GB RAM für die Maschine zuweisen. Es gibt viele "Dinge", die schief gehen können, schlechter Code, DDOS, hohe Anwendungsnutzung, wer weiß, Wie würden Sie wissen, dass der Server in Schwierigkeiten ist, wenn Sie keine Kopffreiheit haben?

Wir haben ungefähr 2000 Server in unserem Rechenzentrum. Wir möchten, dass sie alle mit 75% CPU und RAM laufen. Der Platz in unserem SAN ist also ein ganz anderer Wachsball. Wir haben auch Warnungen, die uns mitteilen, wann sie 85% der CPU oder des RAM erreichen, und Warnungen, die uns mitteilen, wann sie 90% erreichen.

Anthony Fornito
quelle
Ich denke, Sie sind hier ein wenig aus der Bahn geraten. Ich habe gesagt, dass ich virtuelle Maschinen verwende, daher gibt es eine konsistente Last, die sich stark von einem Datenbankserver unterscheidet, der ausgeführt wird, wenn Anforderungen abgerufen und Ressourcen zugewiesen werden. Ich war mehr besorgt darüber, was auch immer der begrenzende Leistungsfaktor ist, nicht darüber, wie diese Ressourcen zugewiesen werden. Aber danke für die Antwort!
Kernel Stearns