Ответ 1
Существует несколько команд времени (1) в типичной системе Linux; по умолчанию используется bash (1), который является несколько базовым. Существует также /usr/bin/time
, который вы можете запустить, либо вызвав его точно так, либо указав bash (1), чтобы не использовать псевдонимы и встроенные элементы, префикс его обратным слэшем таким образом: \time
. Debian имеет его в пакете "время", который установлен по умолчанию, Ubuntu, вероятно, будет идентичным, а другие дистрибутивы будут очень похожими.
Вызов его аналогично встроенной оболочке уже более подробный и информативный, хотя, возможно, более непрозрачный, если вы уже не знакомы с тем, что действительно означают числа:
$ \time df
[output elided]
0.00user 0.00system 0:00.01elapsed 66%CPU (0avgtext+0avgdata 864maxresident)k
0inputs+0outputs (0major+261minor)pagefaults 0swaps
Однако я хотел бы обратить ваше внимание на страницу руководства, в которой перечислены параметры -f
для настройки формата вывода и, в частности, формата %w
, который подсчитывает количество раз, когда процесс отказывался от своего центрального процессора timeslice для ввода-вывода:
$ \time -f 'ios=%w' du Maildir >/dev/null
ios=184
$ \time -f 'ios=%w' du Maildir >/dev/null
ios=1
Обратите внимание, что первый запуск остановлен для ввода-вывода 184 раза, но второй запуск остановлен только один раз. Первая цифра заслуживает доверия, так как в моем ~/Maildir
есть 124 каталога: чтение каталога и inode дает примерно два IOPS для каждого каталога, меньше, потому что некоторые иноды, вероятно, рядом друг с другом и читаются в одной операции, плюс еще один лишний раз для отображения в двоичных, разделяемых библиотеках du (1) и т.д.
Вторая цифра, конечно, ниже из-за дискового кэша Linux. Итак, последняя часть - очистить кеш. sync (1) - знакомая команда, которая сбрасывает грязные записи на диск, но не очищает кеш чтения. Вы можете сбросить его, записав 3 на /proc/sys/vm/drop_caches
. (Другие значения также иногда полезны, но вы хотите здесь 3). Как пользователь без полномочий root, самый простой способ сделать это:
echo 3 | sudo tee /proc/sys/vm/drop_caches
Объединяя это с /usr/bin/time
, вы должны создать скрипты, необходимые для сравнения интересующих вас команд.
В качестве второстепенного в стороне используется tee (1), потому что это не сработает:
sudo echo 3 >/proc/sys/vm/drop_caches
Причина? Хотя эхо (1) работает от имени root, перенаправление является вашей обычной учетной записью пользователя, у которой нет разрешений на запись для drop_caches
. tee (1) эффективно выполняет перенаправление как root.