Назад | Перейти на главную страницу

50% нагрузка на 2 процессора такая же, как 100% нагрузка на один процессор?

Основное сомнение: у меня есть приложение, работающее на виртуальной машине с 2 виртуальными ЦП. Средняя нагрузка на оба процессора чуть меньше 50%.

Означает ли это, что моему приложению будет достаточно 1 процессора? Или больше процессоров выигрывают от параллельного выполнения потоков?

Изменить: вот реальный пример из моей системы, состоящей из 8CPU, более месяца. Данные нормализованы до 100% = 8CPU. Интересно, достаточно ли этой информации для решения моего вопроса, в основном, если система слишком велика.

Все не так просто. С одной нитью или процессом, который горит как можно больше процессора, он будет загружать максимум 50% ЦП в системе с двумя ЦП. Или в некоторых системах он будет отображаться как 100% ЦП, потому что тогда максимум составляет 200% ЦП.

Если у вас есть два потока, работающих на 50% ЦП одного ядра (чтобы они не работали максимально), может быть они будут работать примерно так же быстро на одном ядре, но тогда вы увидите 100%. (Это без учета того, что у машины есть другие дела, и что переключение контекста вызывает накладные расходы.)

Например, если у вас есть два потока, которые 50% времени находятся в спящем режиме и вычисляют данные, остальные 50% одинаковы, один процессор может чередовать спящий режим и вычисление этих двух потоков, чтобы использовать 100% ЦП.

Редактировать:

Я подумал, что покажу несколько примеров графиков, которые это иллюстрируют.

Этот сервер выполняет 16 процессов с высоким ЦП и несколько сотен процессов с низким ЦП. В марте я решил обновить его до 8 процессоров / ядер (отсюда скачок до 800%), в основном потому, что мне пришлось какое-то время запускать на нем дополнительное программное обеспечение, что вы можете видеть.

По большей части с мая по июль 4 ядра мог было достаточно. Однако я знаю, что некоторые из моих процессов (выполнение пакетной обработки) были бы отложены.

Это прилагаемый график нагрузки:

Это коррелирует, но, как вы можете видеть, это не просто процент / 100.

Вы хотите, чтобы такие графики могли принимать обоснованные решения.

Редактировать 2 о ваших графиках:

Интересный. Из чего были сделаны эти графики? Оба они представляют данные противоположным способом, к которому я привык: это кажется загрузка ЦП достигает 100% для всех ядер в системе, а не 100% для каждого ядра, как на моих графиках. Вы можете проверить это, запустив dd if=/dev/urandom of=/dev/null на несколько часов; это заставит одно ядро ​​максимально использовать, и вы увидите эффект.

Графики нагрузки показывают нагрузку на ядро. Я такого раньше не видел. uptime, htop, munin: все они показывают просто грузить.

На самом деле вы никогда не сможете понять требования, просто взглянув на использование ЦП. Современный ЦП генерирует потоки подходящим образом в соответствии с требованиями.

Больше ядра, больше преимуществ приложение может иметь для запуска потоков.