Почему apt-get
не используется 100% процессора, диска или сети - или даже близко к нему? Даже на медленной системе (Raspberry Pi 2+) загрузка процессора достигает максимум 30%. Я просто думаю, что либо это искусственно ограничено, либо оно должно максимизировать что-то, пока оно работает ... или оно должно быть в состоянии делать свое дело быстрее, чем оно делает.
Редактировать: я просто измеряю примерно через мониторы cpu / disk / net на моей панели и приложение System Monitor Ubuntu MATE.
Пожалуйста, объясните, почему я не прав. :-)
Обновление: я понимаю, что apt-get
необходимо получить его обновления (и может быть ограничено пропускной способностью восходящего канала / провайдера). Но как только он «распаковывается» и т. Д., Загрузка ЦП должна, по крайней мере, возрасти (если не макс.). На моей довольно приличной домашней рабочей станции, которая использует SSD для основного диска и ramdisk для / tmp, это не так.
Или, может быть, мне нужно присмотреться.
apt-get
не особенно хорошо это оптимизировать. Я полагаю, что он может быть установлен во время загрузки, чтобы к моменту окончания загрузки большая часть полезной нагрузки уже была установлена, но, к сожалению, это не так. В любом случае, автономные установки в основном просто извлекают данные на диск. Эти операции по своей природе связаны с вводом-выводом, и больше ничего не остается, кроме как ждать, пока диск закончит чтение или запись.Ответы:
Приложения будут только максимально использовать процессор, если приложение привязано к процессору . Приложение привязано к процессору, если оно может быстро получить все свои данные, а процессор ожидает их обработки.
apt-get
с другой стороны, является IO-связанным . Это означает, что он может обрабатывать свои данные довольно быстро, но загрузка данных (с диска или из сети) требует времени, в течение которого процессор может выполнять другие действия или работать без дела, если это не нужно другим процессам.Как правило, все запросы ввода-вывода (дисковые, сетевые) выполняются медленно, и всякий раз, когда поток приложения создает его, ядро удаляет его из процессора до тех пор, пока данные не будут загружены в ядро (= эти запросы ввода-вывода называются блокирующими запросами ).
источник
apt
командами это усугубляется тем фактом, что многие файлы открываются в режиме синхронизации или частыми явными сбросами данных на диск, чтобы гарантировать, что данные на диске остаются в согласованном состоянии, поскольку в противном случае сбой системы может иметь серьезные последствия. Выполнениеapt
команд сeatmydata
помощью часто может значительно повысить производительность за счет снижения надежности (не говоря уже о том, что службы, запущенные как часть установки пакетов, будут наследовать настройки eatmydata)Raspberry Pi 2+ имеет 4 ядра. Для некоторых инструментов мониторинга 100% -ное использование соответствует всем использованным ядрам при 100%. Если в процессоре с четырьмя кодами используется только одно ядро, загрузка процессора составляет 25%. Упомянутая вами 30% загрузка процессора - это примерно одно ядро, используемое при 100%, в то время как некоторые процессы работают на других ядрах:
Поскольку
apt-get
он не является многопоточным, он никогда не будет использовать более одного процессора, что составляет 25% всех ресурсов процессора.Вот пример на моей машине с 8 ядрами (4 ядра с Hyper-Threading ) под управлением Ubuntu, я запустил один поток с
cat /dev/zero > /dev/null
командой, чтобы создать бесконечный процесс, полностью использующий одно ядро.Теперь, если мы посмотрим на график
htop
, мы увидим, что средняя нагрузка (Avg
бар) равна12.7%
одному ядру, используемому при 100%, что также составляет 1/8 всех ресурсов ЦП:Также можно отметить, что команда имеет значение
100%
вCPU%
столбце, потому что оно относится к одному ядру, а не ко всем ядрам.источник
/dev/zero > /dev/null
лучший пример, так как случайный случай истощит пул энтропии?cat /dev/zero > /dev/null
дает тот же результат, я не знал это устройство, спасибо. urandom будет истощать пул энтропии Я не знаю пул энтропии, как это может быть проблемой?Я думаю, что вы на самом деле не измеряете IO%. Я не видел виджет Linux IO%. (Я очень завидую диспетчеру задач Windows 10 :). Проверьте с помощью
iotop
команды, и вы увидите 100% IO.top
должен показывать 100% черезuser
+system
+iowait
, для значений 100% деленное на ваш число ядер , как описано AL Я не говорю ,top
это 100% полезен, но это может быть очень полезным инструментом все вокруг , чтобы узнать.Пропускная способность будет ниже максимальной, потому что вы распаковываете много маленьких файлов, или «случайный ввод-вывод». Также есть некоторые сбросы синхронизации диска / кэша, хотя с 2010 года в Linux их было только несколько для каждого установленного пакета. ( Раньше по одному на файл ).
источник
iotop --only
,--only
опция показывает только процессы или потоки, которые фактически выполняют ввод / вывод .На самом деле, запросы ввода / вывода очень медленные по сравнению с процессором. Это означает, что в то время как ваша сетевая карта извлекает данные или ваш диск записывает эти данные, ваш ЦП абсолютно ничего не делает (для этого процесса в любом случае).
Если ваш жесткий диск работает быстрее, чем ваше сетевое соединение (что, вероятно, верно), он не будет писать больше, чем получил.
Наконец, процентное соотношение сети соответствует максимально возможному использованию сетевой карты , а не подключению. Таким образом, у вас может быть сетевой адаптер 1 Гбит / с, у вас вряд ли будет подключение к Интернету, которое достигает этой пропускной способности.
источник