Що конкретно є настінний час, користувальницький процесор-час та системний процесор-час у UNIX?


144

Я можу здогадатися, ґрунтуючись на іменах, але що конкретно - це настінний час, користувальницький-процесорний час та системний-процесорний час у UNIX?

Чи час-користувач-процесор - кількість часу, витраченого на виконання коду користувача, в той час як час ядра-процесор - кількість часу, проведеного в ядрі, через необхідність привілейованих операцій (наприклад, IO на диск)?

У яку одиницю часу відбувається це вимірювання.

І чи справді час настінного годин - це кількість секунд, які процес витратив на процесор, чи це назва просто оманливе?


Відповіді:


143

Час настінного годинника - це час, який годинник на стіні (або секундомір в руці) міряв би таким, що минув між початком процесу і «зараз».

Час користувальницького процесора та час системного процесора майже як ви сказали - кількість часу, витраченого на код користувача та кількість часу, витраченого на код ядра.

Одиницями є секунди (і підсекунди, які можуть бути мікросекундами або наносекундами).

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


16
Так це означає, що час настінного годинника завжди буде більшим, ніж час процесора?
— Печер'є

36
@Pacerier: так, на одноядерній машині так, але багатоядерні машини та багатопотокові програми можуть використовувати більше 1 CPU секунди за пройдену секунду.
— Джонатан Леффлер

@JonathanLeffler дякую за відповідь, я хотів отримати кількість наносекунд, що минуло, але обчислення часу процесора за формулою CPUtime = #clock_cycles / clock_rateне може бути таким же, як обчислення минулого часу. Чи знаєте ви, чи можу я отримати час із процесора?
— Bionix1441

2
@ Bionix1441: Ви не можете отримати минулий час із часу процесора з кількох причин. По-перше, процес може бути непрацюючим, не витрачаючи часу процесора, протягом довільних періодів (наприклад, демон-процес, який очікує, що клієнт підключиться до нього по мережі), тому він може нічого не робити протягом доби за минулий час . По-друге, якщо він працює, він може мати декілька потоків, і якщо у нього, скажімо, 4 потоки, а в системі є 4 або більше ядра, це може зірвати 4 CPU секунди витрачених зусиль за секунду минулого часу. Вони показують, що не існує простої (або навіть складної) формули, яку ви могли б використовувати.
— Джонатан Леффлер

1
@Catbuilts: Ви знаєте, що ядро ​​Unix працює окремо від програм користувача. Коли ваша програма робить системний виклик (наприклад, read()або getpid()), ядро ​​виконує код від імені вашої програми. Ядро також обробляє переважне багатозадачне завдання, щоб інші програми прийшли в свою чергу, і виконує загальну роботу з ведення господарства, щоб безперебійно працювати систему. Цей код виконується у «коді ядра» (також у «режимі ядра»). Це відрізняється від написаного вами коду та бібліотек користувачів (включаючи системну бібліотеку C), які ви запускаєте.
— Джонатан Леффлер

36

Час настінного годинника: час минає відповідно до внутрішнього годинника комп'ютера, який повинен відповідати часу у зовнішньому світі. Це не має нічого спільного з використанням процесора; дано для довідки.

Час користувальницького процесора та системний час: саме те, що ви думаєте. Системні виклики, які включають в себе I / O виклики , такі , як read, writeі т.д. виконуються стрибки в коді ядра і виконання цього.

Якщо час настінного годинника <час процесора, ви виконуєте програму паралельно. Якщо час настінного годинника> час процесора, вас чекає диск, мережа чи інші пристрої.

Всі вимірюються в секундах, за СІ .


7

Час настінного годинника - це саме те, що йдеться, час, що минув, виміряний годинником на вашій стіні (або наручним годинником)

Час користувальницького процесора - це час, витрачений на "землю користувача", тобто час, витрачений на процеси без ядра

Час системного процесора - це час, витрачений в ядрі, зазвичай час, витрачений на обслуговування системних викликів.


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

справжні або настінні годинники

реальні 7м2.444с

У системі з 24-ядерним процесором цей cmd / процес зайняв 7+ хвилин. Це, використовуючи найбільш можливий паралелізм з усіма даними ядрами.

користувач

користувач 76m14.607s

Cmd / процес використовував таку кількість процесорного часу. Іншими словами, на машині з одноядерним процесором реальний і користувач буде майже рівним, тому для виконання однієї команди буде потрібно ~ 76 хвилин.

сис

sys 2m29.432s

Це час, який займає ядро ​​для виконання всіх операцій базового / системного рівня для запуску цього cmd, включаючи перемикання контексту, розподіл ресурсів тощо.

Примітка. Приклад передбачає, що ваша команда використовує паралелізм / потоки.

Сторінка детальної людини: https://linux.die.net/man/1/time


З огляду на час, який ви розміщували, чи не приблизно половина зробленого паралелізму? (я просто роблю, (user + sys) / realщоб це представляти.
— dtc,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.