Як інтерпретується "середнє навантаження" у "верхньому" виході? Це однаково для всіх дистрибутивів?


12

Мені хотілося б знати, чи можна виводити Linux на базі Red-Hat по-різному інтерпретувати Linux на базі Debian.

Щоб зробити питання ще більш конкретним, про що я пішов, це розуміння того, як "середнє завантаження" з першого рядка topкоманди в системі Red-Hat інтерпретується і як це перевірити офіційною документацією ro-кодом.

[Є багато способів наблизитись до цієї теми, усі з яких є прийнятними відповідями на питання]

Одним із потенційних підходів було б знайти місце, де ця інформація офіційно задокументована.
Ще одна, полягає в тому, щоб знайти версію коду, topпобудовану з конкретного дистрибутива та версії, над якою я працюю.

Командний вихід, який я отримую, це:

    top - 13:08:34 up  1:19,  2 users,  load average: 0.02, 0.00, 0.00
    Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 96.8%id,  2.7%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3922520k total,   788956k used,  3133564k free,   120720k buffers
    Swap:  2097148k total,        0k used,  2097148k free,   344216k cached


У цьому випадку як я можу інтерпретувати середнє значення навантаження ?
Мені вдалося виявити, що середнє завантаження становить приблизно в останню хвилину, з одного джерела документації, і що його слід інтерпретувати після множення на 100, з іншого джерела документації.
Отже, питання таке: завантажено
це 0,02% або 2%?
Джерела документації та версії:

1) Перші зірки с

    TOP(1)                        Linux User’s Manual                       TOP(1)

    NAME
           top - display Linux tasks

Джерело: man topу моєму дистрибутиві RedHat
Ubuntu також є версія із "завданнями", яка не пояснює середню завантаженість у:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html

2) Другий починається з

    TOP(1)                          User Commands                         TOP(1)

   NAME         top

   top - display Linux processes

Джерело:
http://man7.org/linux/man-pages/man1/top.1.htm

3) Цей починається з:

   TOP(1)

   NAME

   top - display and update information about the top cpu processes

Джерело: http://www.unixtop.org/man.shtml перший один, можна побачити в або і він не має жодних - яких пояснень формату виведення (ні про середньому навантаження , в якій я зацікавлений в) . Другий один, не є короткий опис, вказуючи на те , що середнє навантаження пов'язана з останньою 1 хвилини, але нічого про інтерпретацію його вартості!

man topRHELonline ubuntu documentation


Цитую прямо з другого джерела:

2а. Середні значення UPTIME і LOAD
Ця частина складається з одного рядка, що містить:
ім’я програми чи вікна, залежно від режиму відображення
поточного часу та тривалості часу з моменту останнього завантаження
загальна кількість
завантажених системою користувачів за останні 1, 5 та 15 хвилин

Отже, якщо це пояснення справді правильне, достатньо лише зрозуміти, що середнє навантаження становить приблизно за останню 1 хвилину.
Але це не пояснює формат номера.

У третьому поясненні сказано, що:

Вказуючи числа для середніх навантажень, їх слід помножити на 100.

Це пояснення говорить про те, що 0,02 означає 2%, а не 0,02%. Але це правильно? Крім того, чи правильно це для всіх дистрибутивів Linux та потенційно різних реалізацій top?
Щоб знайти відповідь на це питання, я спробував пройти код, шукаючи його в Інтернеті. Але я знайшов принаймні дві різні версії, topпов’язані з RHEL! builtin-top.cі перероблений top.c. Обидва захищені авторським правом Red-Hat, як зазначено в повідомленні на початку коду, і тому видається логічним, що RHEL використовує один із них.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c

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

З інформації, наданої у відповідях нижче, крім особистого пошуку, я виявив, що:

1 - Те, topщо я використовую, міститься в пакеті propps-3.2.8. Що можна перевірити за допомогою top -v.
2 - У версії, procps-3.2.8яку я завантажив з офіційного веб-сайту, здається, що інструмент uptimeотримує свою інформацію безпосередньо з procfsфайлу /proc/loadavg(не використовуючи функцію linux getloadavg()).
3 - Тепер для topкоманди вона також не використовує функцію getloadavg(). Мені вдалося переконатися, що topце дійсно ті самі речі, що іuptimeінструмент для відображення середніх показників навантаження. Він фактично викликає функцію uptimeінструмента, який отримує свою інформацію з procfsфайлу /proc/loadavg.

Отже, все вказує на /proc/loadavgфайл! Таким чином, щоб скласти точне розуміння load averageпродукованого top, потрібно прочитати код ядра, щоб побачити, як loadavgзаписаний файл .
Існує також відмінна стаття, зазначена в одній з відповідей, яка надає термінам миряни пояснення трьох значень loadavg.
Тож, незважаючи на те, що всі відповіді були однаково корисними та корисними, я маю позначити ту, що вказала на статтю http://www.linuxjournal.com//article/9001 як "відповідь" на моє запитання. Дякую всім за ваш внесок!

Додатково з питання Розуміння верхньої та середньої завантаженості я знайшов посилання на вихідний код ядра, який вказує на місце, де loadavgобчислюється. Як здається, є величезний коментар, що пояснює, як він працює, також ця частина коду є C!
Посилання на код - http://lxr.free-electrons.com/source/kernel/sched/loadavg.c.
Знову я не намагаюся брати участь у будь-якій формі плагіату, я просто додаю це для повноти. Отже, я повторюю, що посилання на код ядра було знайдено з однієї з відповідей у ​​розділі Розуміння верхньої та середньої завантаженості ...


Що вам говорять версії? ( top -v)
Фіксиман

вгору: версія версії 3.2.8
Ангелос Асоніт

Відповіді:


19

Навантаження процесора - це довжина черги виконання, тобто довжина черги процесів, які очікують запуску.

uptimeКоманда може бути використана , щоб побачити середню довжину черги виконання за останню хвилину, останні п'ять хвилин і останні 15 хвилин, так само , як то , що зазвичай відображаються top.

Високе значення навантаження означає, що черга виконання є довгою. Низьке значення означає, що воно коротке. Отже, якщо середньоминутне завантаження становить 0,05, це означає, що в середньому протягом цієї хвилини в черзі запуску було очікувати 0,05 процесів. Це не відсоток. Це AFAIK однаково для всіх Unices (хоча деякі Unices можуть не рахувати процесів, які чекають вводу-виводу, що, на мою думку, робить Linux; OpenBSD, певний час, також підраховував нитки ядра, так що навантаження завжди було 1 або більше).

topУтиліта Linux отримує значення навантаження з ядра, яке записує їх /proc/loadavg. Дивлячись на джерела для procps-3.2.8, ми бачимо, що:

  1. Для відображення середніх показників навантаження sprint_uptime()викликається функція top.c.
  2. Ця функція живе в proc/whattime.cі виклики loadavg()в proc/sysinfo.c.
  3. Ця функція просто відкривається LOADAVG_FILEдля зчитування середніх показників навантаження.
  4. LOADAVG_FILEвизначається раніше як "/proc/loadavg".

Дуже дякую за вашу відповідь, чи це офіційно десь задокументовано?
Анжелос Асоніт

1
@AgelosAssonitis Ця стаття LinuxJournal з 2006 року може бути цікавою. Він вказує на пару вихідних файлів у дереві джерела ядра Linux, які ви можете подивитися. Я не користувач Linux, тому не можу сказати, чи є ці файли ще в останньому втіленні ядра: linuxjournal.com/article/9001
Kusalananda

Цікава стаття справді! Я просто заглядаю в пакет propps, щоб побачити, чи дійсно команда верхнього значення бере своє значення з файлу / proc / loadavg і чи це те саме, що є результатом функції getloadavg ().
Angelos Asonitis

@AgelosAssonitis Визначальним місцем для документації середніх показників завантаження є ваше дерево джерела ядра. POSIX не визначає, що таке завантаження процесора, і ніде не згадує слова "середнє завантаження". topІ uptimeкомунальні послуги не є POSIX утиліт і getloadavg()функцій бібліотеки також не визначене в стандарті POSIX (він має BSD походження , хоча).
Кусалаланда

Отже, з того, що я збираю, немає офіційної документації для розуміння формування цих значень, крім самого джерела ядра, чи правильно? Перш ніж потрапити туди, мені все ж потрібно прив’язати значення, представлене topдо файлу procfs loadavg ...
Angelos Asonitis

7

Середнє значення навантаження, як правило, обчислюється ядром. Такі додатки, як topі uptimeможуть використовувати getloadavg(3)дзвінок бібліотеки, щоб отримати доступ до цього (він повинен бути переносним для різних версій Unix). У Linux це зазвичай призводить до читання з /proc/loadavg. У FreeBSD - це системний виклик.

Наприклад:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
  double ld[3];

  int i=getloadavg(ld,3);
  printf("Load %.2f %.2f %.2f\n",ld[0],ld[1],ld[2]);
}

uptimeі topобидва здійснюють подібні дзвінки, щоб отримати свої дані.

Тепер середні значення навантаження на 1/5/15 хвилини - це кількість процесів у черзі виконання. Різні операційні системи можуть обчислювати це по-різному; Найбільша різниця, як правило, полягає в тому, чи вважаються процеси, які очікують на введення / виведення (наприклад, заблоковані на диску), які можна виконати чи ні. У Linux вони є.

Таким чином, середнє значення навантаження в 3,4 означає, що в черзі запуску у вікні вибірки (в середньому 1,5, 15 хвилин) було 3,4 процесу.

Однак високе середнє завантаження не обов'язково означає перевантажений сервер. Якщо у вас 16 ядер, то середнє навантаження може бути 16 без напруги. Ви також можете мати багато fork()викликів додатків, що може призвести до створення / знищення великої кількості процесів, що призводить до високого середнього навантаження, але без значного впливу на продуктивність сервера. Його слід використовувати лише як керівництво разом з іншими показниками, такими як% CPU зайнятий.


4

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

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

Спробуйте перевірити наступні дві підручні сторінки: getloadavg(3)і uptimeдля отримання додаткової інформації.

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


1
Гаразд, але чи ми абсолютно впевнені, що середнє навантаження, описане в getloadavg()описі функції, є тим самим середнім навантаженням, яке topпоказує команда в rhel? Я запитую це, тому що я здійснив пошук повного тексту в нецільовому вмісті пакета procps-3.2.8 (що вказується командою top -v), і немає жодної згадки про функцію getloadavg ()! Тож, можливо, топ обчислює середню навантаження по-іншому ....
Анжелос Асоніт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.