Почему apt-get НЕ использует 100% (процессор ИЛИ диск или сеть)?

21

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

Редактировать: я просто измеряю примерно через мониторы cpu / disk / net на моей панели и приложение System Monitor Ubuntu MATE.

Пожалуйста, объясните, почему я не прав. :-)

Обновление: я понимаю, что apt-getнеобходимо получить его обновления (и может быть ограничено пропускной способностью восходящего канала / провайдера). Но как только он «распаковывается» и т. Д., Загрузка ЦП должна, по крайней мере, возрасти (если не макс.). На моей довольно приличной домашней рабочей станции, которая использует SSD для основного диска и ramdisk для / tmp, это не так.

Или, может быть, мне нужно присмотреться.

KlaymenDK
источник
Как вы измеряете нагрузку на диск и сеть?
JigglyNaga
1
Тем не менее, дисковый ввод-вывод похож на сетевой ввод-вывод. Он по-прежнему будет блокировать приложение, не позволяя ему использовать процессор. Увы, apt-getне особенно хорошо это оптимизировать. Я полагаю, что он может быть установлен во время загрузки, чтобы к моменту окончания загрузки большая часть полезной нагрузки уже была установлена, но, к сожалению, это не так. В любом случае, автономные установки в основном просто извлекают данные на диск. Эти операции по своей природе связаны с вводом-выводом, и больше ничего не остается, кроме как ждать, пока диск закончит чтение или запись.
PSkocik
How did you get the 30% CPU load number?
A.L
1
@PSkocik "Я полагаю, он может быть установлен во время загрузки" apt-get просто загружает, dpkg устанавливает. И dpkg умнее, чем apt-get, в том порядке, в котором должна быть установлена ​​группа пакетов, которые могут не совпадать с тем, что apt-get загружает их.
Брайам
Обратите внимание, что приложение, которое на 100% привязано к процессору на половину такта, а затем на 100% привязано к вводу-выводу для другой половины, не будет отображаться ни с привязкой к процессору, ни с вводом-выводом.
MSalters

Ответы:

28

Приложения будут только максимально использовать процессор, если приложение привязано к процессору . Приложение привязано к процессору, если оно может быстро получить все свои данные, а процессор ожидает их обработки.

apt-getс другой стороны, является IO-связанным . Это означает, что он может обрабатывать свои данные довольно быстро, но загрузка данных (с диска или из сети) требует времени, в течение которого процессор может выполнять другие действия или работать без дела, если это не нужно другим процессам.

Как правило, все запросы ввода-вывода (дисковые, сетевые) выполняются медленно, и всякий раз, когда поток приложения создает его, ядро ​​удаляет его из процессора до тех пор, пока данные не будут загружены в ядро ​​(= эти запросы ввода-вывода называются блокирующими запросами ).

PSkocik
источник
6
С aptкомандами это усугубляется тем фактом, что многие файлы открываются в режиме синхронизации или частыми явными сбросами данных на диск, чтобы гарантировать, что данные на диске остаются в согласованном состоянии, поскольку в противном случае сбой системы может иметь серьезные последствия. Выполнение aptкоманд с eatmydataпомощью часто может значительно повысить производительность за счет снижения надежности (не говоря уже о том, что службы, запущенные как часть установки пакетов, будут наследовать настройки eatmydata)
Стефан Шазелас
Lol в этой последней точке :). У кого-нибудь есть номера для eatmydata с момента коммита 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-картой, а не с высокопроизводительным твердотельным накопителем) я считаю «драматично» немного преуменьшением. Производительность dpkg на флеш-носителях действительно отстой.
Жиль "ТАК - перестать быть злым"
1
Если он связан с дисковым вводом-выводом, то почему он не использует 100% пропускную способность диска?
user253751
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 / nCores), всегда должен вызывать дальнейшее изучение. Это может быть проверено - и действительно исключено - с помощью монитора, способного отображать использование на ядро, где 0 <=% <= 100 * nCores
underscore_d
Разве это не /dev/zero > /dev/nullлучший пример, так как случайный случай истощит пул энтропии?
Филипп Хаглунд
@FilipHaglund cat /dev/zero > /dev/nullдает тот же результат, я не знал это устройство, спасибо. urandom будет истощать пул энтропии Я не знаю пул энтропии, как это может быть проблемой?
AL
1
Когда программы используют криптографию, им нужны действительно случайные данные для создания безопасных ключей шифрования. Компьютер генерирует энтропию, наблюдая, как мышь движется среди прочего. Есть аппаратные генераторы случайных чисел, но большинство компьютеров не имеют их. Если энтропия полностью израсходована, код, который нуждается в безопасной энтропии, должен ждать, пока не будет сгенерировано больше. Urandom будет использовать действительно случайные биты, если таковые имеются, или иначе вернет менее безопасные случайные биты.
Филипп Хаглунд
Когда программы используют криптографию Даже если я думаю, что никто не будет выполнять тест производительности процессора при генерации случайного ключа, я обновил свой ответ в качестве меры предосторожности.
AL
2

Я думаю, что вы на самом деле не измеряете IO%. Я не видел виджет Linux IO%. (Я очень завидую диспетчеру задач Windows 10 :). Проверьте с помощью iotopкоманды, и вы увидите 100% IO.

topдолжен показывать 100% через user+system + iowait, для значений 100% деленное на ваш число ядер , как описано AL Я не говорю , topэто 100% полезен, но это может быть очень полезным инструментом все вокруг , чтобы узнать.

Пропускная способность будет ниже максимальной, потому что вы распаковываете много маленьких файлов, или «случайный ввод-вывод». Также есть некоторые сбросы синхронизации диска / кэша, хотя с 2010 года в Linux их было только несколько для каждого установленного пакета. ( Раньше по одному на файл ).

sourcejedi
источник
Используйте iotop --only, --onlyопция показывает только процессы или потоки, которые фактически выполняют ввод / вывод .
AL
4
iostat, dstat, atop ... покажет использование диска на диске без необходимости привилегий. Вам нужны привилегии для использования каждой задачи
Стефан Шазелас
@ StéphaneChazelas абсолютно правильно. Суть, которую я пытался сделать (редактирование ниндзя), заключается в том, что в OP упоминается пара инструментов с графическим интерфейсом. И определенные инструменты с графическим интерфейсом, которые я видел, такие как Gnome System Monitor, показывают пропускную способность, но не IO%.
sourcejedi
2

На самом деле, запросы ввода / вывода очень медленные по сравнению с процессором. Это означает, что в то время как ваша сетевая карта извлекает данные или ваш диск записывает эти данные, ваш ЦП абсолютно ничего не делает (для этого процесса в любом случае).

Если ваш жесткий диск работает быстрее, чем ваше сетевое соединение (что, вероятно, верно), он не будет писать больше, чем получил.

Наконец, процентное соотношение сети соответствует максимально возможному использованию сетевой карты , а не подключению. Таким образом, у вас может быть сетевой адаптер 1 Гбит / с, у вас вряд ли будет подключение к Интернету, которое достигает этой пропускной способности.

Аймерик Р.
источник