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-get
die 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.
apt-get
ist 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.Antworten:
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-get
Auf 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 ).
quelle
apt
Befehlen 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 vonapt
Befehlen miteatmydata
kann 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)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:
Da
apt-get
es 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/null
Befehl 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 (Avg
Balken)12.7%
, die einem zu 100% verwendeten Kern entspricht, auch 1/8 aller CPU-Ressourcen ist:Es kann auch angemerkt werden, dass der Befehl den Wert
100%
in derCPU%
Spalte hat, da er sich auf einen Kern und nicht auf alle Kerne bezieht.quelle
/dev/zero > /dev/null
ein besseres Beispiel, da Urandom den Entropiepool erschöpfen wird?cat /dev/zero > /dev/null
gibt 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?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
iotop
Befehl und Sie werden 100% IO sehen.top
sollte 100% überuser
+ +system
anzeigeniowait
, für Werte von 100% geteilt durch Ihre Kernanzahl, wie von AL beschrieben. Ich sage nicht, dass diestop
100% 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 ).
quelle
iotop --only
, die tatsächlich E / A ausführen .--only
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.
quelle