Чи є щось на зразок `time`, що також записує введення / виведення та процесор?


18

Я можу досить швидко відстежувати час роботи процесу за допомогою time:

x@y ~ $ time foo

real        0m14.299s
user        0m4.770s
sys         0m0.440s

Чи є спосіб отримати я однакові дані для використання аргументу вводу / виводу та процесора, записаного в STDOUT? Проста команда чи утиліта, як-от, timeбула б ідеальною, де я просто передаю аргумент того, що я хочу запустити:

x@y ~ $ stats foo

wallclock runtime     0m14.299s
I/O reads             290,420 KB
I/O writes            239,429 KB
peak CPU usage        18.62%
mean CPU usage        1.44%
# etc.

Відповіді:


25

Подивіться на сторінку чоловіка часу у вашій системі, у деяких реалізаціях є параметри формату, щоб включити статистику вводу / виводу, процесора та пам'яті (-f).

Наприклад, GNU time, з -vпокаже всю доступну інформацію (тут на Linux):

/usr/bin/time -v ls

Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3664
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 273
Voluntary context switches: 2
Involuntary context switches: 2
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

Увімкнено BSDs, використовуйте -lзамість цього.

Зауважте, що це фактична /usr/bin/timeпрограма, а не ключове слово, яке bashнадають деякі оболонки, до яких ви посилаєтесь time pipeline.


4
zsh«S timeключове слово також може бути налаштований (з $TIMEFMT) , щоб забезпечити з цією інформацією.
Стефан Шазелас

1
Це саме те, що я хотів. Ідеально! Також дякую редакторам цього допису, які уточнили, що вам потрібно запустити його, command time -v ...оскільки bashце викрадення time.
Джон Фемінелла

4

Команда straceможе бути корисною, ви можете обмежити трасування лише підрахунком -cабо підмножиною системних викликів,

-e trace=set
      Trace  only  the  specified set of system calls.  The -c option is
      useful for determining which  system  calls  might  be  useful  to
      trace.   For  example,  trace=open,close,read,write  means to only
      trace those four system calls.  Be careful when making  inferences
      about  the  user/kernel  boundary if only a subset of system calls
      are being monitored.  The default is trace=all.

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


straceможе істотно сповільнити роботу, тому корисно вимірювати відносний час різних системних дзвінків, але я б не використовував це як таймер загального призначення. perfнабагато швидше / менш нав'язливе, якщо ви граєте з параметрами частоти дискретизації.
Марцін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.