Титла: time - какво означават real,user и sys ? Публикувано от: Naka в Oct 16, 2011, 12:49 Пускам един дълъг, мултитаскинг скрипт и искам да измеря за колко време ще се изпълни.
Код: time script.pl и получавам това: Код: real 206m 15sec Кое какво означава и как да ги тълкувам? Винаги съм си мислил, че истинското време за което програмата ще се изпълни е '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 при 2 процесора: Код: real 50m Ако това е долу-горе така може ли 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 операции по диска). И като цяло, не е добра метрика това. Ако много добре знаеш как работи приложението - може и да бъде донякъде индикативно. |