измерение нагрузки на процессор с помощью hyperthreading в linux

как я могу получить истинное использование многоядерного процессора с поддержкой hyperthreading?

например, рассмотрим 2-ядерный процессор, выражающий 4 виртуальных ядра.

однопоточная рабочая нагрузка теперь будет отображаться как 100% в top, Так как одно ядро виртуальных ядер используется полностью. Процессор и top работайте так, как ожидалось, как если бы было 4 настоящих ядра.

С двумя потоками, однако, вещи получают arkward: если все работает хорошо, они сбалансированы до двух реальных ядер, так что мы получили 200% использования: два раза 100% и два бездействующих виртуальных ядер, и используют все доступные мощности процессора. Мне кажется, все в порядке.

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

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

интересно, как hyperthreading балансирует два виртуальных на реальном ядре. Если два потока занимают разное количество циклов, будут ли виртуальные ядра "адаптироваться" таким образом, что оба показывают 100% нагрузку, даже если реальная нагрузка отличается?

6
задан dronus
14.02.2023 3:58 Количество просмотров материала 3635
Распечатать страницу

3 ответа

использование ядра сильно отличается от нагрузки на систему. Использование ядра только показывает, сколько ядро что-то вычисляет или ждет инструкций. Он может быть 100%, что correspons в любой момент времени процессор calculationg коснуться.

Но нагрузка-это другое дело, нагрузка обычно измеряется, чтобы определить, должен ли какой-либо процесс ждать какого-либо ресурса или нет. Если процессы не ждут каких-либо ресурсов, вы увидите очень мощные системы. Но иногда вы увидите медленные системы, но низкая загрузка процессора. Это обычно означает, что некоторые процессы ожидают ресурс и не освобождают процессор. В этом виде сценария вы не увидите высокой загрузки ЦП, но система может быть значительно выше его мощности. В linux средняя загрузка системы-это вычисляемое значение для измерения общей производительности системы. Значение средней нагрузки следует сравнивать с вычислительными ресурсами параллельных ячеек, ядрами, которые должны быть специализированными. Так что если система с 4 физическими ядрами имеет нагрузку в среднем 4 и более мы можем с уверенностью сказать, что некоторые процессы будут ждать ресурс. Это не важно, если загрузка ЦП составляет 100 или 10 процентов. Средняя нагрузка может достигать 200 или 300, в этом случае система практически не реагирует. В нормальном рабочем состоянии средняя нагрузка на сервер не должна превышать количество ядер в течение длительного времени. Короткие шипы, на мой взгляд, не важны. 3 числа, которые вы увидите в w выход нагрузки av. на 1/3/15 минут.

3
отвечен Hkntn 2023-02-15 11:46

Мартин Тегтмайер из Oracle написал интересный пост об этом в прошлом году: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

краткий ответ; технология HyperThreading можно сойти с возможностью купить доклад в целом процессора-применение / ЦП-досужие проценты.

в худшем случае 2-ядерный 4-ядерный виртуальный процессор, работающий на 2 потоках при 100% загрузке на ядро, может почти насытить процессор. (В зависимости от использования порта выполнения могут выполняться только потоки, использующие совершенно разные вычислительные ресурсы ЦП, не влияя на производительность текущего потока.) Однако, сверху по-прежнему 50% простоя в этом случае.

3
отвечен TinkerTank 2023-02-15 14:03

на мой взгляд ни один из вышеприведенных ответов не является удовлетворительным.

Я думаю, что статья, на которую я ссылаюсь по следующей ссылке, хорошо ориентирована на ответ на этот вопрос: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

цитата:

идея HT заключается в том, чтобы разрешить запуск другого потока приложений когда запущенные приложения в палатках; из-за филиал misprediction, пузыри в трубопровод, etc. Чтобы сделать это возможным, должно быть другой порт или как регистр. Этот регистр становится видимым для ОС если ХТ включен. Тем не менее, ОС (и на всем пути вверх по пищевой цепи к тому, что perf инструменты, которые вы используете) теперь думает дважды процессор емкость доступна, т. е., C. P. U. 100% на каждом как порт.

но под капотом есть еще только one единица исполнения: одно физическое ядро, с которого вы начали до включения HT. Тот разница в том, что он делится между 2 а порты. Как одиночный сердечник получает переключенным между 2 портами очень сложный, но наиболее понятный с точки зрения опрошенных очередей. Я перейдите на этот уровень детализации в моих классах GCaP.

измерения испытания лучш-случая я имею, показывают что каждый порт HT не может стать более 75% занят, в среднем, или 150% от общего числа ожидается, что 200% емкости в зависимости от операционной системы. "Недостающие" 50% мощность, то, о чем я говорил ранее, является иллюзией. Корпорация Intel утверждали, что нечто в диапазоне от 120% до 130% можно ожидать для общего применения.

на самом деле, я уверен, что операционная система может достигать 100% на каждом виртуальном ядре, без сомнения. Я только что сделал:

mvn clean install -DskipTests -T 5

и я могу заверить вас, что мои 8 виртуальных ядер, и 4 физических ядра все пошли на 100% загрузки процессора. И у меня определенно нет 8 ядер на моем машина.

короче говоря, вы можете предположить следующее, Если общая нагрузка на процессор превысит 100%, и, скорее всего, довольно точно, используя ровно 100% физического ядра. Это menas, если у вас есть физическое ядро 1, разделенное на процессор операционной системы 1 и процессор 2. И на CPU 1 у вас есть общее использование 50% и на CPU 2 у вас есть общее использование 50%, скорее всего, в реальной жизни вы ставите давление общего использования 100% на этот процессор. Вы превысили его из.

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

спасибо

0
отвечен 99Sono 2023-02-15 16:20

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх