Чому apt-get НЕ використовує 100% (процесор чи АБО чи нетто)?


21

Чому apt-get не використовується 100% ні процесора, ні диска, ні мережі - або навіть близько до нього? Навіть у повільній системі (Raspberry Pi 2+) я отримую щонайменше 30% завантаження процесора. Я просто думаю, що або його штучно заглушують, або він повинен щось максимумувати під час роботи ... або він повинен мати можливість робити свою справу швидше, ніж це робиться.

Редагувати: Я просто орієнтовно вимірюю через монітори cpu / disk / net на моїй панелі та додаток System Monitor Ubuntu MATE.

Поясніть, будь ласка, чому я помиляюся. :-)

Оновлення: я розумію, що apt-getпотрібно отримати оновлення (і може бути обмежено пропускною здатністю / пропускною здатністю постачальника). Але як тільки він "розпакується" тощо, використання процесора має принаймні збільшитись (якщо не максимально). На моїй досить пристойній домашній робочій станції, яка використовує SSD для свого основного диска, і ramdisk для / tmp, це не так.

А може, мені потрібно придивитись уважніше.


Як ви вимірюєте навантаження диска та мережі?
JigglyNaga

1
Диск IO, як і мережний IO, хоча. Він все одно заблокує додаток, не даючи йому використовувати процесор. На жаль, apt-getне особливо добре в оптимізації цього. Я думаю, він міг би встановитись під час завантаження, так що до моменту завершення завантаження більшість вашої корисної навантаження вже може бути встановлена, але, на жаль, це не відбувається. У будь-якому випадку, окрема установка здебільшого просто витягує дані на диск. Ці операції пов'язані між собою вводу-виводу, і просто не залишається нічого іншого, як чекати на диску, щоб закінчити читання або запис.
PSkocik

Як ви отримали 30% завантаження процесора ?
AL

1
@PSkocik "Я думаю, що він може встановитись під час завантаження" apt-get просто завантаження, встановлення dpkg. І dpkg розумніший, ніж apt-get у тому порядку, що слід встановити купу пакетів, які можуть бути не такими, як apt-get завантажує їх.
Брайам

Зауважте, що додаток, що на 100% пов'язаний з процесором на половину галочки, а потім на 100% пов'язане з IO для другої половини, не з’явиться ні пов'язаним з процесором, ні зв'язаним з IO.
MSalters

Відповіді:


28

Додатки максимум збільшуватимуть CPU лише у тому випадку, якщо програма обмежена процесором . Додаток пов'язаний з процесором, якщо він може швидко отримати всі свої дані, і що його чекає - це процесор для обробки даних.

apt-getз іншого боку, пов'язаний з IO . Це означає, що він може обробляти свої дані досить швидко, але завантаження даних (з диска або з мережі) вимагає часу, під час якого процесор може робити або інші речі, або простоювати, якщо інші процеси не потребують цього.

Як правило, всі запити вводу-виводу (диск, мережа) є повільними, і кожного разу, коли потік програми зробить його, ядро ​​видалить його з процесора, поки дані не завантажуються в ядро ​​(= ці запити вводу-виводу називаються запитами блокування ).


6
За допомогою aptкоманд це посилюється тим, що багато файлів відкриті в режимі синхронізації, або при частому явному переливанні диска, який вимагає гарантувати дані про перебування диска в постійному стані, оскільки аварія системи може мати серйозні наслідки в іншому випадку. Запуск aptкоманд за eatmydataдопомогою часто може різко підвищити продуктивність за рахунок зниженої надійності (не кажучи вже про те, що сервіси, запущені в рамках встановлення пакунків, успадкують налаштування дієтиданих даних)
Stéphane Chazelas

Lol у цьому останньому пункті :). Хтось має цифри для їдміданих з часу вчинення 2010 року в bugs.debian.org/cgi-bin/bugreport.cgi?bug=578635 ? Я не знаю, чи "драматично" все-таки правильне слово.
sourcejedi

Ах, можливо, це (принаймні, на деяких хмарних провайдерах) bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi

1
@sourcejedi На Raspberry Pi2 з відносно високоякісним SD-карткою (але все-таки SD-карткою, а не SSD-версією високого класу), я вважаю "різко" заниженням. Продуктивність dpkg на флеш-носіях справді відстійна.
Жиль "ТАК - перестань бути злим"

1
Якщо він пов'язаний з диском-IO, то чому він не використовує 100% пропускну здатність диска?
користувач253751

15

Навіть у повільній системі (Raspberry Pi 2+) я отримую щонайменше 30% завантаження процесора.

Raspberry Pi 2+ має 4 ядра. Для деяких інструментів моніторингу 100% використання відповідає всім використаним ядрам на 100%. Якщо в процесорі чотирьох коду використовується лише одне ядро, завантаження процесора становить 25%. 30% завантаження процесора, яке ви згадуєте, - це приблизно одне ядро, що використовується на 100%, а деякі процеси працюють на інших ядрах:

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

Оскільки apt-getвін не є багатопоточним, він ніколи не використовуватиме більше одного процесора, що становить 25% усіх ресурсів процесора.


Ось приклад на моїх 8 ядрах (4 ядра з Hyper-Threading ) на машині під керуванням Ubuntu, я запустив один потік з cat /dev/zero > /dev/nullкомандою, щоб створити нескінченний процес, який повністю використовує одне ядро.

Тепер, якщо ми подивимось на графік з htop, ми можемо побачити, що середнє навантаження ( Avgбар) - це те 12.7%, що відповідає одному ядру, використовуваному на 100%, що також становить 1/8 всіх ресурсів процесора:

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

htop

Можна також зазначити, що команда має значення 100%у CPU%стовпці, це тому, що це відносно одного ядра, а не для всіх ядер.


+1, використання%, близьке до кратного (100 / nКори), завжди повинно викликати подальший аналіз. Це можна перевірити - і справді це виключено - за допомогою монітора, здатного показувати використання на одне ядро, де 0 <=% <= 100 * nCores
підкреслити

Це не /dev/zero > /dev/nullкращий приклад, оскільки урандам вичерпає пул ентропії?
Філіп Хаглунд

@FilipHaglund cat /dev/zero > /dev/nullдає такий же результат, я не знав цього пристрою, дякую. urandom вичерпає пул ентропії. Я не знаю пулу ентропії, як це може бути проблемою?
AL

1
Коли програми використовують крипто, їм потрібні справді випадкові дані для створення захищених ключів шифрування. Комп'ютер генерує ентропію, спостерігаючи за переміщенням миші серед іншого. Існують апаратні генератори випадкових чисел, але більшість комп'ютерів їх не мають. Якщо ентропія використана, код, який потребує захищеної ентропії, повинен чекати, коли буде сформовано більше. Urandom використовує справді випадкові біти, якщо вони доступні, або іншим чином поверне менш безпечні випадкові біти.
Філіп Хаглунд

Коли програми використовують криптовалюту Навіть якщо я думаю, що ніхто не буде виконувати орієнтир процесора під час генерування випадкового ключа, я оновив свою відповідь як запобіжний захід.
AL

2

Я думаю, ви насправді не вимірюєте IO%. Я не бачив віджет% IO% Linux. (Я дуже заздрю ​​менеджеру завдань Windows 10 :). Перевірте за допомогою iotopкоманди, і ви побачите 100% IO.

topмає показувати 100% в межах user+ system+ iowait, для значень 100%, розділених на ваш основний підрахунок, як описано в АЛ top.

Пропускна здатність буде нижчою від максимальної, тому що ви розпаковуєте безліч невеликих файлів, які називають "випадковим IO". Також є кілька помилок синхронізації / кешу диска, хоча з 2010 року в Linux існує лише декілька з них для кожного встановленого пакету. ( Раніше був один на файл ).


Використовуйте iotop --only, --onlyпараметр показує лише процеси або потоки, які фактично виконують введення-виведення .
AL

4
iostat, dstat, зверху ... відображатиметься за використання дискового диска без необхідності привілеїв. Саме для виконання завдання вам потрібні пільги
Стефан Шазелас,

@ StéphaneChazelas абсолютно коректний. Справа, яку я намагався зробити (редагування ніндзя), полягає в тому, що в ОП згадується пара інструментів GUI. І конкретні інструменти GUI, які я бачив, як-от Gnome System Monitor, показують пропускну здатність, але не мають IO%.
sourcejedi

2

Насправді, запити вводу-виводу / мережі дуже повільні порівняно з операційними процесорами. Це означає, що поки ваша мережна карта отримує дані або ваш диск записує ці дані, ваш процесор нічого не робить (для цього процесу все одно).

Якщо ваш жорсткий диск швидший, ніж ваше мережеве з'єднання (це, мабуть, правда), він не запише більше, ніж отримано.

Нарешті, відсоток мережі відповідає максимально можливому використанню мережевої карти , а не з'єднанню. Отже, у вас може бути мережевий адаптер потужністю 1 Гбіт / с, ви навряд чи матимете Інтернет-з'єднання, яке б досягало цієї пропускної здатності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.