Linux time — Jak zmierzyć czas działania programu (real, user, sys)
Artykuł ten chciałbym poświęcić na krótki opis polecenia time, które pozwala nam sprawdzić czas działania programu. Postaram się również, przybliżyć nieco co oznacza czas real, user oraz sys, czyli jak tak naprawdę należy interpretować rezultaty tego polecenia.
Po co sprawdzać czas działania programu?
Kontrola czasu pracy pewnych procesów, może służyć różnym celom. Dajmy na to, chcemy rozwiązać jakiś problem na dwa sposoby i nie wiemy, który z nich wybrać. Można wtedy wykonać prosty test mierzący czas potrzeby na wykonanie zadania przez każdy ze sposobów i w wyniku tego wybrać podejście wydajniejsze. Podobna sytuacja może mieć miejsce podczas oceny wydajności pewnych algorytmów, czy choćby porównawczych testów sprzętowych.
Jak zmierzyć czas działania programu?
Aby zmierzyć czas działania procesu, wystarczy uruchomić go z pozycji konsoli poprzedzając jego wywołanie poleceniem time. Oto prosty przykład:$ time ls bin dev initrd.img lost+found opt sbin sys var boot etc initrd.img.old media proc selinux tmp vmlinuz cdrom home lib mnt root srv usr vmlinuz.old real 0m0.005s user 0m0.004s sys 0m0.000s
$ time ls -Fs razem 88 4 bin/ 4 home/ 4 media/ 4 sbin/ 4 usr/ 4 boot/ 0 initrd.img@ 4 mnt/ 4 selinux/ 4 var/ 4 cdrom/ 0 initrd.img.old@ 4 opt/ 4 srv/ 0 vmlinuz@ 0 dev/ 4 lib/ 0 proc/ 0 sys/ 0 vmlinuz.old@ 12 etc/ 16 lost+found/ 4 root/ 4 tmp/ real 0m0.013s user 0m0.012s sys 0m0.000s
Jak widzimy, wydaliśmy dwukrotnie polecenie ls, tylko raz z parametrami, a raz nie. Czasy pracy tych dwóch procesów różnią się od siebie.
Dobrze, ale czym jest czas real, user oraz sys?
Polecenie time zwraca nam trzy różne czasy: real, user, a także czas sys. Aby móc cokolwiek powiedzieć na temat czasu pracy programu, należy potrafić interpretować te wyniki. Otóż czasy te oznaczają:- Real — czas, jaki musieliśmy odczekać od momentu włączenia procesu, do momentu zakończenia go (/zobaczenia jego wyników).
- User — czas poświęcony na pracę procesora "wewnątrz procesu" (tzw. user-mode)
- Sys — czas poświęcony przez procesor na komunikację z jądrem systemu (praca "na zewnątrz procesu").
Jakie z tego płyną wnioski?
Jak teraz nietrudno się domyślić, suma czasów user oraz sys, da nam całkowity czas pracy procesora nad danym programem. Dlaczego więc rzeczywisty czas, jaki musieliśmy odczekać, różni się od tego, jaki potrzebował procesor? Odpowiedź jest prosta. Gdyby procesor zajmował się tylko i wyłącznie tym jednym programem to czas real = user + sys, ale tak nie jest. Procesor musiał obsłużyć wiele innych działających procesów, dlatego jego praca była kolejkowana i czas real uwzględnia również czas oczekiwania w kolejce procesów.Mając, choć powierzchowną wiedzę na temat tego, co te poszczególne czasy oznaczają, możemy w bardziej świadomy sposób podchodzić do rezultatów otrzymywanych za pomocą polecenia time.
Komentarze (2)