Linux за българи: Форуми

Нетехнически теми => Идеи и мнения => Темата е започната от: Naka в Oct 16, 2011, 12:49



Титла: time - какво означават real,user и sys ?
Публикувано от: Naka в Oct 16, 2011, 12:49
Пускам един дълъг, мултитаскинг скрипт и искам да измеря за колко време ще се изпълни.

Код:
time script.pl

и получавам това:
Код:
real 206m 15sec
user 309m
sys 17m

Кое какво означава и как да ги тълкувам? Винаги съм си мислил, че истинското време за което програмата ще се изпълни е 'real'(винаги първото число), но тук 'real' е много по-малко от 'user' ???

Има ли някаква корелация между real,user,sys. Например да се каже че винаги real=user+sys
да не би за мултитаскинг програма нещата да са различни?




Титла: Re: time - какво означават real,user и sys ?
Публикувано от: gat3way в Oct 16, 2011, 13:15
Цитат
Например да се каже че винаги real=user+sys

Не, не можеш да кажеш такова нещо. Може да бъде и далеч повече и далеч по-малко. User и sys показват времето, в което програмата ти е била в running state и се е изпълнявала върху някой процесор/ядро (демек не е чакала в runqueue). Много елементарен и груб пример е да пробваш time sleep 1. Real time ще ти е около секунда, user и sys вероятно ще клонят към нула.

Алтернативно, многонишково приложение, което е CPU-интензивно и се изпълнява върху многоядрена система, ще даде по-висок user+sys спрямо "real".


Титла: Re: time - какво означават real,user и sys ?
Публикувано от: Naka в Oct 17, 2011, 15:52
Да разбирам, ли че при една мулти-процесорна програма 'user' е сборът от времената на всички процеси, които програмата пуска и затова в моят случай получавам 'real'<'user',

т.е. ако имаме идеално приложение - което да може да са паралелезира на 100%, като пренебрегнем и другите програми - т.е. нищо да не и пречи (а и syscalls==0)

ще имаме нещо такова
при 1 процесор:
Код:
real 100m
user 100m
sys 0m

при 2 процесора:
Код:
real 50m
user 100m   (50m+50m)
sys 0m

Ако това е долу-горе така може ли user/real да е показател колко печелим от мулти-thread-а?



Титла: Re: time - какво означават real,user и sys ?
Публикувано от: gat3way в Oct 17, 2011, 16:32
Това би било валидно само и единствено ако нишките през цялото време са били в running state и операционната система приоритетно ги е изпълнявала. Ако създадеш няколко нишки (но не повече от броя на ядрата), които въртят един безкраен цикъл и системата не е натоварена с други неща, ще получиш ситуация близка до твоята, не точно 100/100/0, но близо.


Това не е добър индикатор колко печелиш от паралелизацията. Не е казано че приложението е CPU-bound, може нишките да четат от сокети или файлове (блокираща операция, при която task-а минава в sleeping state и доброволно "сдава" процесора). Примерно ако четеш от голям файл, няма почти никаква файда от вдигането на няколко нишки, които четат парчета от файла (по-вероятно е дори да съсипеш бързодействието, заради повечето seek операции по диска).

И като цяло, не е добра метрика това. Ако много добре знаеш как работи приложението - може и да бъде донякъде индикативно.