На мой взгляд, ни один из приведенных выше ответов не является удовлетворительным.
Я думаю, что статья, на которую я ссылаюсь по следующей ссылке, хорошо предназначена для ответа на этот вопрос:
http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html
QUOTE:
Идея, лежащая в основе HT, состоит в том, чтобы позволить другому потоку приложения работать, когда текущее приложение останавливается; из-за неправильного прогнозирования веток, пузырей в конвейере и т. д. Чтобы это стало возможным, должен быть другой порт или регистр AS. Этот регистр становится видимым для ОС, когда HT включен. Тем не менее, ОС (и весь путь к пищевой цепочке, независимо от того, какие инструменты для перфорирования вы используете) теперь думает, что в два раза больше ресурсов процессора, то есть 100% ЦП на каждом порту AS.
Но под капотом все еще есть только один исполнительный блок: одно физическое ядро, с которым вы работали до включения HT. Разница в том, что он каким-то образом распределяется между двумя портами AS. То, как одно ядро переключается между двумя портами, очень сложно, но наиболее легко понять с точки зрения опрашиваемых очередей. Я вхожу в этот уровень детализации в моих классах GCaP.
Тестовые измерения в лучшем случае, которые я имею, показывают, что каждый порт HT не может быть занят более чем на 75%, в среднем, или на 150% от общей ожидаемой емкости 200% в зависимости от ОС. «Недостающая» пропускная способность в 50%, о которой я говорил ранее, является иллюзией. Intel утверждает, что для общих приложений можно ожидать что-то в диапазоне от 120% до 130%.
На самом деле, я уверен, что операционная система может достигать 100% на каждом виртуальном ядре, без сомнения об этом. Я только что сделал:
mvn clean install -DskipTests -T 5
И я могу заверить вас, что мои 8 виртуальных ядер и 4 физических ядра полностью загружены процессором. И у меня точно нет 8 ядер на моей машине.
Короче говоря, вы можете предположить следующее, если общая загрузка ЦП превышает 100%, как вы, и, скорее всего, довольно точно, используя ровно 100% физического ядра. Это меню, если у вас есть физическое ЯДРО 1, разделенное на ЦП 1 операционной системы и ЦП 2. А на ЦП 1 вы используете 50%, а на ЦП 2 - 50%, скорее всего, в реальной жизни вы оказывая давление на общее использование 100% на этом процессоре. Вы максимизировали это.
Но, конечно, операционная система в своих инструментах мониторинга системы не имеет ни малейшего представления, что она продает вам иллюзию. С точки зрения операционной системы и того, как она управляет ресурсами, она будет просто полагать, что каждый из этих двух виртуальных ядер по-прежнему простаивает на 50%, поэтому, если нужно будет запустить больше задач, он попытается распределить их равномерно по этим двум ядрам. , Таким образом, когда вы используете загрузку ЦП более чем на 100%, в течение периода использования ЦП всегда есть работа в очереди, которая должна выполняться в тот период времени, в котором никогда не было изменений для получения временной шкалы на ЦП. В конце концов он получит это, но всегда есть некоторые потоки, которые на самом деле даже не работают, даже если они запланированы для запуска.
Спасибо