вимірювання завантаження процесора з гіперточенням на Linux


12

Як я можу отримати справжнє використання процесора з підтримкою багатоядерного гіперточення?

Наприклад, давайте розглянемо двоядерний процесор, що виражає 4 віртуальних ядра.

Зараз навантаження з однією різьбою виявиться на 100% top, оскільки повністю використовується одне ядро ​​віртуальних ядер. Процесор і topробота, як очікувалося, як би там було 4 справжніх ядра.

Однак з двома потоками все стає невдалим: якщо все працює добре, вони врівноважуються двома реальними ядрами, тому ми отримуємо 200% використання: два рази 100% і два непрацюючі віртуальні ядра та використовуємо всю наявну потужність процесора . Мені здається нормально.

Однак, якщо два потоки працюватимуть на одному реальному ядрі, вони виявляться як два рази в 100%, що робить 200% використання віртуального ядра. Але з реальної сторони це буде одне ядро, яке розділяє свою потужність на два потоки, які потім використовують лише половину загальної потужності процесора.

Таким чином, показані цифри використання topне можуть бути використані для вимірювання загальної завантаженості процесора.

Мені також цікаво, як гіперточення балансує два віртуальних на реальному ядрі. Якщо два потоки займають різну кількість циклів, чи "віртуальні ядра" адаптуються "так, що обидва показують 100% навантаження, навіть якщо реальна навантаження відрізняється?


1
Ви розумієте, що операторська система не усвідомлює різниці між віртуальним ядром гіперточення та фізичним ядром?
Рамхаунд

Здається, так, але це не обов’язково? Реальне порівняння з віртуальним відображенням ядра - це проста на одну-дві карти. Проблема полягає в тому, як виміряти навантаження на віртуальне ядро, яке фактично змінює його доступну продуктивність, запланувавши його з іншим на реальному ядрі. Але всі дані доступні. Я думаю, питання лише в тому, де інструменти, які отримують належний результат від них?
дрон

1
Мені просто подобається мати міру навантаження, де 100% означатиме, що використовується кожен цикл кожного реального ядра.
дрон

1
Простіше кажучи: як сказати в даний момент, чи мій процесор буде здатний робити подальшу роботу, не уповільнюючи поточну роботу?
дрон

1
@Ramhound, тож якщо у мене є фізичний 4-ядерний процесор з 8 логічними ядрами, а моє навантаження в середньому становить 4,00, чи я на 100% використання чи на 50%?
Buttle Butkus

Відповіді:


5

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

Коротка відповідь; Hyperthreading насправді псує з можливістю вершини повідомляти про загальний відсоток використання процесора / процесорного простою.

У гіршому випадку, 2-ядерний 4-віртуальний ядерний процесор, що працює 2 потоку при 100% -утилізації на ядро, міг майже наситити процесор. (Залежно від використання порту виконання; лише потоки, які використовують зовсім інші обчислювальні ресурси на процесорі, все ще можуть працювати, не впливаючи на продуктивність поточного потоку.) Однак, в цьому випадку топ все ще повідомить про 50% простою.


1
Поточне робоче посилання: blogs.oracle.com/partnertech/…
Ján Lalinský

4

Використання основних процесів сильно відрізняється від навантаження на систему. Використання ядра лише показує, скільки ядро ​​щось обчислює, або чекає інструкцій. Це може бути 100%, що відповідає будь-якому моменту, коли процесор щось обчислює.

Але навантаження - це різна річ, навантаження, як правило, вимірюється, щоб визначити, чи потрібно якийсь процес чекати якогось ресурсу чи ні. Якщо процеси не чекають ніяких ресурсів, ви побачите дуже ефективну систему. Але іноді ви побачите повільні системи, але низький рівень використання процесора. Це загалом означає, що деякі процеси чекають ресурсу і не випускають процесор. У такому сценарії ви не побачите високого рівня використання процесора, але система може бути значно перевищити свою потужність.

В системі Linux Середнє навантаження - це розраховане значення для вимірювання загальної продуктивності системи. Значення середнього навантаження слід порівнювати з паралельними обчислювальними ресурсами, ядра мають бути конкретними. Отже, якщо система з 4 фізичними ядрами має середню завантаженість 4 і більше, ми можемо сміливо сказати, що деякі процеси будуть чекати ресурсу.

Не важливо, чи використання процесора становить 100 або 10 відсотків. Середня навантаження може досягати 200 або 300, в цих випадках система буде ледь чутлива.

У нормальних робочих умовах середнє навантаження сервера не повинно перевищувати кількість ядер протягом тривалої тривалості. Короткі шипи на мою думку не важливі. 3 числа, які ви побачите на wвиході, - це завантаження av. протягом 1/5/15 хв.


0

На мою думку, жоден із наведених відповідей не є задовільним.

Я вважаю, що стаття, на яку я посилаюсь за наступним посиланням, добре орієнтована на відповідь на це питання: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

ЦІТА:

Ідея 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 фізичні ядра перейшли до 100% використання процесора. І я точно не маю 8 ядер на своїй машині.

Якщо коротко розповісти, ви можете припустити наступне, якщо загальне завантаження процесора перевищує 100%, ви максимум, і, швидше за все, досить акуратно, використовуючи точно 100% фізичного ядра. Це означає, що якщо у вас фізичний CORE 1 розділений на операційну систему CPU 1 і CPU 2. А на CPU 1 ви загальне використання 50%, а на CPU 2 ви загальне використання 50%, швидше за все, в реальному житті ви тиск загального використання 100% на цей процесор. Ви виграли це.

Але, звичайно, операційна система в своїх інструментах моніторингу системи не має поняття, що вона продає вам ілюзію. З точки зору операційної системи та того, як вона керує ресурсами, просто вірить, що кожний з цих двох віртуальних ядер все ще на 50 відсотків простоює, тому якщо для запуску буде більше завдань, він спробує розподілити їх рівномірно по цих двох ядрах . Тож, коли ви переходите на 100% використання процесора, під час періоду використання процесора завжди буде працювати в черзі за той період часу, який ніколи не змінився, щоб отримати відрізок часу на процесорі. Врешті-решт це дістанеться, але завжди є деякі потоки, які насправді навіть не запущені, хоча вони заплановані для запуску.

Дякую

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.