Що конкретно є настінний час, користувальницький процесор-час та системний процесор-час у 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.