LINUX.ORG.RU

time: Почему изменяется время в юзерспейсе?


0

2

Добрый день.
Не могу понять, почему у неинтерактивных программ, делающих одно и то же в одном и том же окружении, различается время исполнения в юзерспейсе. Например смотрим время грепа по директории:
$ for i in {1..5} ; do /usr/bin/time -f «E:%E S:%S U:%U» grep blahblah *; done
E:0:00.21 S:0.11 U:0.08
E:0:00.19 S:0.09 U:0.08
E:0:00.16 S:0.08 U:0.07
E:0:00.15 S:0.07 U:0.06
E:0:00.16 S:0.07 U:0.06
Насколько я понимаю, вся функциональность, время исполнения которой может варьироваться в зависимости от загрузки системы и т.д., например открытие\закрытие файлов, чтение из них и вывод на экран, исполняются в ядре через сисколлы. Поэтому ядерное время может меняться. Но какие факторы влияют на время исполнения в юзерспейсе?

Ответ на: комментарий от j-a-t-a

да, своп всё сразу убьёт :) Но в данном примере своп, скорее всего, не будет использоваться потому что задача только что запущена.

Ещё в голову пришли всякие энергосберегающие технологии. Когда комп простаивает ОС(а то и сам проц, он может) выключает неиспользуемые ядра/модули/etc или понижает частоту. Вывод системы на максимальную мощность тоже требует время. Правда, конкретных данных по этому поводу я почти не встречал, а те что встречал исчислялись наносекундами...

Кроме того тормоза может создавать, например, шина данных. Она общая(NUMA не беру в расчёт) для всех ядер.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Греп был приведен для примера, на самом деле у меня другая, гораздо более крупная программа, жрущая кучу памяти. Так что тут факторы работы с памятью очень даже могут проявляться.

j-a-t-a
() автор топика

Механизм определения времени, проведенного в kernel или user, не идеально точен. Поэтому время немного может плавать в одну или другую сторону.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

а там разве не какие-нить такты считаются(на аппаратном уровне каким-нить регистром)? Как это вообще работает? Мне кажется там как раз всё точно.

true_admin ★★★★★
()
Ответ на: комментарий от nanoo_linux

кеш диска.

это тут ни при чём, сам процесс io не занимается, это всё во время ядра входит.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

>Как это вообще работает?

С частотой HZ тикает системный таймер. Если в момент тика процесс находится в юзерспейсе, то увеличивается user-время, если в сисколе, то системное время. Увеличивается на период тика 1/HZ.

ttnl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.