Dlaczego apt-get
nie używa 100% procesora, dysku lub sieci - a nawet blisko niego? Nawet w wolnym systemie (Raspberry Pi 2+) mam maksymalnie 30% obciążenia procesora. Po prostu myślę, że albo jest sztucznie dławione, albo powinno maksymalnie zwiększyć wydajność podczas pracy ... albo powinno być w stanie robić to szybciej niż robi.
Edycja: Właśnie mierzę z grubsza za pomocą monitorów cpu / disk / net w moim panelu oraz aplikacji System Monitor systemu Ubuntu MATE.
Wyjaśnij, dlaczego się mylę. :-)
Aktualizacja: Rozumiem, że apt-get
należy pobrać aktualizacje (i mogą być ograniczone przepustowością łącza nadawczego / dostawcy). Ale kiedy „rozpakowanie” i tak dalej, użycie procesora powinno przynajmniej wzrosnąć (jeśli nie maksymalnie). Na mojej dość przyzwoitej domowej stacji roboczej, która używa dysku SSD jako napędu głównego i ramdysku dla / tmp, tak nie jest.
A może muszę przyjrzeć się bliżej.
apt-get
nie jest szczególnie dobry w optymalizacji tego. Wyobrażam sobie, że można go zainstalować podczas pobierania, aby do czasu zakończenia pobierania większość ładunku mogła już zostać zainstalowana, ale niestety tak się nie dzieje. W każdym razie samodzielne instalacje przeważnie po prostu wyodrębniają dane na dysk. Te operacje są z natury związane z IO i po prostu nie ma wiele więcej do roboty niż czekać na dysku, aby zakończyć odczyt lub zapis.Odpowiedzi:
Aplikacje będą maksymalnie obciążały procesor tylko, jeśli aplikacja jest związana z procesorem . Aplikacja jest powiązana z procesorem, jeśli może szybko uzyskać wszystkie swoje dane, a procesor przetwarza dane.
apt-get
z drugiej strony jest związany z IO . Oznacza to, że może przetwarzać swoje dane dość szybko, ale ładowanie danych (z dysku lub z sieci) zajmuje dużo czasu, podczas którego procesor może wykonywać inne czynności lub pozostawać bezczynny, jeśli inne procesy go nie potrzebują.Zazwyczaj wszystkie żądania We / Wy (dysk, sieć) są wolne i za każdym razem, gdy wątek aplikacji je tworzy, jądro usuwa je z procesora, dopóki dane nie zostaną załadowane do jądra (= te żądania We / Wy nazywane są żądaniami blokującymi ).
źródło
apt
poleceń pogarsza to fakt, że wiele plików jest otwartych w trybie synchronizacji lub częste jawne opróżnianie dysku w celu zagwarantowania, że dane na dysku pozostaną w spójnym stanie, ponieważ awaria systemu może mieć poważne konsekwencje. Uruchamianieapt
poleceń zaeatmydata
pomocą często może znacznie poprawić wydajność kosztem zmniejszonej niezawodności (nie wspominając, że usługi uruchomione w ramach instalacji pakietów odziedziczą ustawieniaRaspberry Pi 2+ ma 4 rdzenie. W przypadku niektórych narzędzi do monitorowania użycie 100% odpowiada wszystkim rdzeniom użytym w 100%. Jeśli używany jest tylko jeden rdzeń procesora czterokodowego, obciążenie procesora wynosi 25%. Wspomniane 30% obciążenie procesora to w przybliżeniu jeden rdzeń używany na 100%, podczas gdy niektóre procesy działają na innych rdzeniach:
Ponieważ
apt-get
nie jest wielowątkowy, nigdy nie użyje więcej niż jednego procesora, co stanowi 25% wszystkich zasobów procesora.Oto przykład na moich 8 rdzeniach (4 rdzenie z Hyper-Threading ) na maszynie z Ubuntu, uruchomiłem jeden wątek z
cat /dev/zero > /dev/null
poleceniem, aby stworzyć nieskończony proces, który całkowicie wykorzystuje jeden rdzeń.Teraz, jeśli spojrzymy na wykres
htop
, zobaczymy, że średnie obciążenie (Avg
bar) wynosi12.7%
, co odpowiada jednemu rdzeniu użytemu na 100%, co stanowi również 1/8 wszystkich zasobów procesora:Można również zauważyć, że polecenie ma wartość
100%
wCPU%
kolumnie, ponieważ jest to związane z jednym rdzeniem, a nie ze wszystkimi rdzeniami.źródło
/dev/zero > /dev/null
jest lepszym przykładem, skoro urandom wyczerpuje pulę entropii?cat /dev/zero > /dev/null
daje ten sam wynik, nie znałem tego urządzenia, dzięki. urandom wyczerpuje pulę entropii Nie znam puli entropii, jak może to stanowić problem?Myślę, że tak naprawdę nie mierzysz% IO. Nie widziałem widżetu Linux IO%. (Jestem bardzo zazdrosny o menedżera zadań Windows 10 :). Sprawdź za pomocą
iotop
polecenia, a zobaczysz 100% IO.top
powinien pokazywać 100% w całymuser
+system
+iowait
, dla wartości 100% podzielonych przez liczbę rdzeni, jak opisano przez AL Nie twierdzę, żetop
jest w 100% pomocny, ale może być naprawdę przydatnym wszechstronnym narzędziem do nauki.Przepustowość będzie niższa niż maksymalna, ponieważ rozpakowujesz wiele małych plików, czyli „losowe we / wy”. Jest też kilka opróżnień synchronizacji dysku / pamięci podręcznej, chociaż od 2010 roku w Linuksie jest tylko kilka z nich dla każdego zainstalowanego pakietu. ( Kiedyś jeden na plik ).
źródło
iotop --only
,--only
opcja pokazuje tylko procesy lub wątki, które faktycznie wykonują operacje we / wy .W rzeczywistości żądania We / Wy są bardzo wolne w porównaniu do operacji procesora. Oznacza to, że podczas gdy twoja karta sieciowa pobiera dane lub dysk zapisuje te dane, twój procesor absolutnie nic nie robi (w tym przypadku i tak).
Jeśli twój dysk twardy jest szybszy niż połączenie sieciowe (co prawdopodobnie jest prawdą), nie zapisze więcej niż otrzymał.
Wreszcie procent sieci odpowiada maksymalnemu możliwemu użyciu karty sieciowej , a nie połączeniu. Więc możesz mieć kartę sieciową 1 Gb / s, naprawdę mało prawdopodobne jest, aby połączenie internetowe osiągało tę przepustowość.
źródło