Warum verwendet apt-get NICHT 100% (CPU ODER Festplatte ODER Netz)?


21

Warum wird apt-get nicht 100% der CPU, der Festplatte oder des Netzwerks verwendet - oder sogar in der Nähe? Selbst auf einem langsamen System (Raspberry Pi 2+) bekomme ich höchstens 30% CPU-Auslastung. Ich denke nur, dass es entweder künstlich gedrosselt wird oder dass es etwas ausreizen sollte, während es arbeitet ... oder dass es in der Lage sein sollte, seine Sache schneller als es zu tun.

Edit: Ich messe nur grob über CPU / Disk / Net Monitore in meinem Panel und die System Monitor App von Ubuntu MATE.

Bitte erkläre, warum ich falsch liege. :-)

Update: Ich verstehe, dass apt-getdie Updates abgerufen werden müssen (und möglicherweise durch die Bandbreite des Upstreams / Anbieters beschränkt sind). Aber sobald es "entpackt" und so weiter ist, sollte die CPU-Auslastung zumindest steigen (wenn nicht maximal). Auf meiner recht ordentlichen Heimarbeitsstation, die eine SSD als Hauptlaufwerk und eine Ramdisk für / tmp verwendet, ist dies nicht der Fall.

Oder vielleicht muss ich genauer hinsehen.


Wie messen Sie die Festplatten- und Netzwerklast?
JigglyNaga

1
Disk IO ist jedoch genau wie Network IO. Die App wird weiterhin blockiert, sodass die CPU nicht verwendet werden kann. Leider apt-getist es nicht besonders gut, dies zu optimieren. Ich stelle mir vor, es könnte beim Herunterladen installiert werden, sodass zum Zeitpunkt des Herunterladens der größte Teil Ihrer Nutzlast bereits installiert sein könnte, dies ist jedoch leider nicht der Fall. In jedem Fall werden bei Einzelinstallationen meist nur Daten auf die Festplatte extrahiert. Diese Vorgänge sind von Natur aus an E / A gebunden, und es bleibt einfach nicht viel anderes zu tun, als auf dem Festplattenlaufwerk zu warten, bis das Lesen oder Schreiben abgeschlossen ist.
PSkocik

Wie haben Sie die CPU-Auslastung von 30% erhalten ?
AL

1
@PSkocik "Ich stelle mir vor, es könnte installiert werden, während es herunterlädt." Und dpkg ist intelligenter als apt-get, wenn eine Reihe von Paketen installiert werden sollen, die möglicherweise nicht mit den von apt-get heruntergeladenen Paketen identisch sind.
Braiam

Beachten Sie, dass eine Anwendung, die für einen halben Tick zu 100% an die CPU und für die andere Hälfte zu 100% an die E / A gebunden ist, weder an die CPU noch an die E / A gebunden ist.
MSalters

Antworten:


28

Apps schöpfen die CPU nur aus, wenn die App CPU-gebunden ist . Eine App ist CPU-gebunden, wenn sie alle Daten schnell abrufen kann und darauf wartet, dass der Prozessor die Daten verarbeitet.

apt-getAuf der anderen Seite ist IO-gebunden . Das bedeutet, dass es seine Daten relativ schnell verarbeiten kann, das Laden der Daten (von der Festplatte oder vom Netzwerk) jedoch einige Zeit in Anspruch nimmt. In dieser Zeit kann der Prozessor entweder andere Aufgaben ausführen oder im Leerlauf arbeiten, wenn keine anderen Prozesse dies erfordern.

Normalerweise sind alle E / A-Anforderungen (Festplatte, Netzwerk) langsam. Wenn ein Anwendungsthread eine erstellt, wird sie vom Kernel vom Prozessor entfernt, bis die Daten in den Kernel geladen werden (= diese E / A-Anforderungen werden als Blockierungsanforderungen bezeichnet ).


6
Bei aptBefehlen wird dies durch die Tatsache verschlimmert, dass viele Dateien im Synchronisierungsmodus geöffnet sind oder dass häufig explizite Löschvorgänge auf die Festplatte angefordert werden, um sicherzustellen, dass die Daten auf der Festplatte in einem konsistenten Zustand bleiben, da ein Systemabsturz sonst schwerwiegende Folgen haben könnte. Das Ausführen von aptBefehlen mit eatmydatakann häufig die Leistung auf Kosten einer verringerten Zuverlässigkeit dramatisch verbessern (ganz zu schweigen davon, dass Dienste, die im Rahmen von Paketinstallationen gestartet werden, die Einstellungen von eatmydata übernehmen)
Stéphane Chazelas

Lol an diesem letzten Punkt :). Hat jemand Nummern für eatmydata seit dem Commit 2010 in bugs.debian.org/cgi-bin/bugreport.cgi?bug=578635 ? Ich weiß nicht, ob "dramatisch" immer noch das richtige Wort ist.
Sourcejedi

Ah, vielleicht ist es (zumindest bei einigen Cloud-Anbietern) bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi

1
@sourcejedi Auf einem Raspberry Pi2 mit einer relativ High-End-SD-Karte (aber immer noch einer SD-Karte, keine High-End-SSD) halte ich "dramatisch" für etwas untertrieben. Die Leistung von dpkg auf Flash-Medien ist wirklich schlecht.
Gilles 'SO- hör auf böse zu sein'

1
Wenn die Festplatte an E / A gebunden ist, warum wird dann nicht 100% der Festplattenbandbreite verwendet?
user253751

15

Selbst auf einem langsamen System (Raspberry Pi 2+) bekomme ich höchstens 30% CPU-Auslastung.

Der Raspberry Pi 2+ hat 4 Kerne. Bei einigen Überwachungstools entspricht eine Auslastung von 100% einer Auslastung aller Kerne von 100%. Wenn nur ein Kern in einem Quad-Code-Prozessor verwendet wird, beträgt die CPU-Auslastung 25%. Die von Ihnen erwähnte CPU-Auslastung von 30% entspricht ungefähr einem Kern, der zu 100% verwendet wird, während einige Prozesse auf den anderen Kernen ausgeführt werden:

(100% on one core out of 4 = 100 / 4 = 25%) + some processes ≃ 30%

Da apt-getes sich nicht um einen Multithread handelt, wird niemals mehr als ein Prozessor verwendet, was 25% aller CPU-Ressourcen entspricht.


Hier ist ein Beispiel für einen Computer mit 8 Kernen (4 Kerne mit Hyper-Threading ), auf dem Ubuntu ausgeführt wird. Mit dem cat /dev/zero > /dev/nullBefehl habe ich einen Thread gestartet , um einen unendlichen Prozess zu erstellen, der nur einen Kern verwendet.

Wenn wir uns nun das Diagramm von ansehen htop, können wir sehen, dass die durchschnittliche Last ( AvgBalken) 12.7%, die einem zu 100% verwendeten Kern entspricht, auch 1/8 aller CPU-Ressourcen ist:

(100% = 100 / 8 = 12.5%) + some background processes ≃ 12.7%.

htop

Es kann auch angemerkt werden, dass der Befehl den Wert 100%in der CPU%Spalte hat, da er sich auf einen Kern und nicht auf alle Kerne bezieht.


+1, sollte eine Verwendung von% in der Nähe eines Vielfachen von (100 / nCores) immer eine weitere Überprüfung auslösen. Dies kann mithilfe eines Monitors überprüft werden, der die Nutzung pro Kern anzeigt, wobei 0 <=% <= 100 * nCores
underscore_d

Ist das nicht /dev/zero > /dev/nullein besseres Beispiel, da Urandom den Entropiepool erschöpfen wird?
Filip Haglund

@FilipHaglund cat /dev/zero > /dev/nullgibt das gleiche Ergebnis, ich wusste das Gerät nicht, danke. urandom wird den Entropiepool erschöpfen Ich kenne den Entropiepool nicht, wie kann es ein Problem sein?
AL

1
Wenn Programme Krypto verwenden, benötigen sie wirklich zufällige Daten, um sichere Verschlüsselungsschlüssel zu generieren. Der Computer erzeugt Entropie, indem er unter anderem die Mausbewegung beobachtet. Es gibt Hardware-Zufallszahlengeneratoren, aber die meisten Computer verfügen nicht über diese. Wenn die Entropie aufgebraucht ist, muss der Code, der eine sichere Entropie benötigt, warten, bis weitere generiert werden. Urandom verwendet, falls verfügbar, wirklich zufällige Bits oder gibt auf andere Weise weniger sichere zufällige Bits zurück.
Filip Haglund

Wenn Programme Krypto verwenden Auch wenn ich denke, dass niemand beim Generieren eines zufälligen Schlüssels einen CPU-Benchmark durchführen wird, habe ich meine Antwort vorsichtshalber aktualisiert.
AL

2

Ich denke, Sie messen tatsächlich nicht IO%. Ich habe kein Linux IO% -Widget gesehen. (Ich bin sehr neidisch auf den Windows 10 Task-Manager :). Überprüfen Sie mit dem iotopBefehl und Sie werden 100% IO sehen.

topsollte 100% über user+ + systemanzeigen iowait, für Werte von 100% geteilt durch Ihre Kernanzahl, wie von AL beschrieben. Ich sage nicht, dass dies top100% hilfreich ist, aber es kann ein wirklich nützliches Allround-Tool zum Lernen sein.

Der Durchsatz ist niedriger als der Maximalwert, da Sie viele kleine Dateien entpacken, auch bekannt als "zufällige E / A". Es gibt auch einige Platten-Synchronisierungs- / Cache-Löschvorgänge, obwohl seit 2010 unter Linux nur noch wenige für jedes installierte Paket vorhanden sind. ( Früher eine pro Datei ).


Verwenden Sie diese Option, um nur Prozesse oder Threads anzuzeigen iotop --only, die tatsächlich E / A ausführen . --only
AL

4
iostat, dstat, atop ... zeigen die Festplattenauslastung an, ohne dass Berechtigungen erforderlich sind. Für die Nutzung pro Task benötigen Sie Berechtigungen
Stéphane Chazelas,

@Stéphanechazelas absolut richtig. Der Punkt, den ich machen wollte (Ninja-Bearbeitung), ist, dass das OP ein paar GUI-Tools erwähnt. Und die speziellen GUI-Tools, die ich gesehen habe, wie Gnome System Monitor, zeigen den Durchsatz, aber keine IO%.
Sourcejedi

2

Tatsächlich sind E / A- / Netzwerkanforderungen im Vergleich zu CPU-Operationen sehr langsam. Dies bedeutet, dass während Ihre Netzwerkkarte Daten abruft oder Ihre Festplatte diese Daten schreibt, Ihre CPU absolut nichts unternimmt (für diesen Vorgang sowieso).

Wenn Ihre Festplatte schneller ist als Ihre Netzwerkverbindung (was wahrscheinlich zutrifft), wird nicht mehr geschrieben, als sie empfangen hat.

Schließlich entspricht das Netzwerk Prozentsatz auf die maximal mögliche Netzwerkkarte Nutzung, eine Verbindung nicht. Wenn Sie also über einen 1-Gbit / s-Netzwerkadapter verfügen, ist es sehr unwahrscheinlich, dass eine Internetverbindung besteht, die diese Bandbreite erreicht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.