Правильний спосіб інтерпретації завантаження системи на 4-ядерний 8-потоковий процесор


13

Як ми всі знаємо, навантаження на 1,00 процесор означає, що навантаження на 100% . Аналогічно, навантаження на чотирьохядерний ядро 4,00 складе 100% .

Як слід інтерпретувати навантаження на 4-ядерний 8-потоковий процесор? Коли я можу досягти максимальної потужності процесора? О 4.00 чи 8.00 ?

Відповіді:


17

Не точно, але в основному на 1.00*n_cpu.

Навантаження означає наступне: якщо в системі з одним процесором є кілька процесів, вони працюють, здавалося б, паралельно. Але це неправда. Що практично відбувається: ядро ​​дає 1/100-ту секунду процесу, а потім перериває його запуск з перериванням. І дає наступну 1/100 секунду іншому процесу.

Практично питання "який процес повинен отримати наш наступний інтервал 1/100 секунди?", Буде вирішуватися складною евристикою. Вона названа в якості завдання планування .

Звичайно, процеси, які блокуються, наприклад, вони чекають своїх даних, що читають з диска, звільнені від цього планування завдань.

Яке навантаження говорить: скільки процесів наразі чекає свого наступного 1/100 секунди. Звичайно, це середнє значення. Це тому, що ви можете бачити декілька чисел у cat /proc/loadavg.

Ситуація в системі з декількома процесорами дещо складніша. Існує декілька процесорів, часові рамки яких можна надати декільком процесам. Це робить план планування трохи - але не надто складним. Але ситуація така ж.

Ядро розумне, воно намагається ділитися системними ресурсами для досягнення оптимальної ефективності, і воно знаходиться поруч з цим (є незначні речі з оптимізації, наприклад, краще, якщо процес буде запускатися якомога довше за той самий час процесор через міркування кешування, але вони там не мають значення). Це тому, що якщо ми маємо навантаження 8, це означає: насправді є 8 процесів, які чекають наступного часу. Якщо у нас є 8 cpus, ми можемо дати цим часовим фрагментам cpus один на один, і таким чином наша система буде оптимально використана.

Якщо ви бачите a top, ви можете бачити, що кількість фактично запущених процесів напрочуд низька: це процеси, позначені Rтам. Навіть у не дуже хардкор-системі це часто нижче 5. Це частково тому, що процеси, які чекають своїх даних з дисків або з мережі, також призупинені (позначені Sзверху). Навантаження показує лише використання процесора.

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


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


Багатоядерні процесори - це практично декілька процесорів на одній і тій же кремнієвій мікросхемі. Різниці немає.

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

Але з нашої нинішньої точки зору - що визначає завантаження системи - це теж не має значення.


4

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

Тож ваше максимальне навантаження десь невідомо між приблизно 4 та 6

(звичайно, це може піднятися вище при перевантаженні, оскільки воно насправді рахує запущені процеси, особливо коли вони чекають IO)


4

Середнє навантаження не означає, що ви думаєте, що це означає. Йдеться не про миттєве використання процесора, а про те, скільки процесів очікують на запуск. Зазвичай це через багато речей, які хочуть процесора, але не завжди. Поширений винуватець - процес, який очікує на IO - диск або мережу.

Спробуйте запустити ps -e vта шукати прапори стану процесу.

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

Це на сторінці ps, тому ви знайдете більше деталей там - Rі Dпроцеси, мабуть, представляють особливий інтерес.

Ви можете отримати середні "шипи" навантаження з усіляких причин, тому вони насправді не є хорошим показником нічого, крім "це ця система зайнята-ish". Заграбування у відображенні середнього навантаження серед ядер CPU не принесе вам користі.


3

У системі Linux для обчислення навантаження зараховуються не лише процеси в черзі, що виконується, але й ті, що перебувають у станах безперебійного сну, wikipedia , що спричиняє навантаження, коли у вас багато процесів, які чекають на диску.


Я цього не знав, маю це на увазі!
Bartek Szablowski

2

Я робив кілька експериментів над нашою 24-ядерною системою Xeon (2 гнізда х 12 ядер). Максимальне навантаження в цьому випадку становить 48,0 завдяки тому, як Linux налаштовує гіперточення.

Однак ви не отримаєте еквівалент 48 ядер пропускної здатності. Я помітив, що ви отримуєте близько 90% пропускної здатності в перших 24 логічних процесорах, тобто якщо навантаження працює до 24,0. Тоді ви отримуєте додаткову пропускну здатність приблизно 10% для решти 24 логічних процесорів (навантаження працює до 48,0). Інший спосіб думати про це полягає в тому, що якщо ви запустите 48 ниток на 24 ядрах, ви отримаєте приріст приблизно 10-20%, якщо ви включите гіперпереборку проти ні. Це не 100% приріст, як це означало б маркетингові хлопці.

Наприклад, одним із способів тестування цього спостереження є процес, який запускає 48 потоків (скажімо, використовуючи TBB або модель ручної нитки), а потім запустити

time numactl --physcpubind=0-23  ./myprocess

а потім біжи

time numactl --physcpubind=0-47  ./myprocess

Останній повинен працювати приблизно на 10-20% менше часу. Якщо ваш процес сильно заблокований введення / виведення, результат може бути іншим.

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

Навантаження в обох випадках має бути зареєстрована як 48.0 ... що, як ви бачите, є дуже оманливим.

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