PDA

Visualizza la versione completa : time: real o user?


prometeus
11-12-2005, 11:58
Sto realizzando un benchmark sugli algoritmi di compressione e mi sono sorti alcuni dubbi.
Pongo un esempio per facilitare le cose: ho un file che si chiama access2.log e ho una copia di questo dentro ad una directory di nome a


[prometeus@helvete:/mnt/test/temp]$ ls -l access2.log a
-rwxr-xr-x 1 prometeus users 22M Dec 11 10:57 access2.log

a:
total 22M
-rwxr-xr-x 1 prometeus users 22M Dec 11 10:58 access2.log

ora vediamo un paio di operazioni.



[prometeus@helvete:/mnt/test/temp]$ time bzip2 -1 -k access2.log

real 0m15.368s
user 0m12.709s
sys 0m0.136s

[prometeus@helvete:/mnt/test/temp]$ time bzip2 -1 -kc access2.log > yep2.bz2

real 0m20.508s
user 0m12.704s
sys 0m0.167s

[prometeus@helvete:/mnt/test/temp]$ time tar cf - a | bzip2 -1 -kc > yep.bz2

real 0m16.717s
user 0m12.692s
sys 0m0.253s



Come potete vedere il valore real subisce delle visibili variazione anche se le operazioni fatte sono simili (le prime due sono praticamente identiche). E' vero che non ho lanciato questi comandi in un ambiente imperurbato (avevo x aperto e magari switchavo da una finestra all'altra...e ovviamente quando farò il benchmark non sarò certo in una situazione del genere), ma noto anche che invece i valori "user" siano vicinissimi (scarti dell'ordine dello 0,1%).
A questo punto mi sorge il dubbio: quando dovrò analizzare le prestazioni di tali algoritmi dovrò prendere in considerazione il valore "user", "real" o "user + sys"?.

Dal man del binario time (non del built-in della bash)
si evince, dalla enumerazione dei possibili formati di output, ciò:



Time

%E Elapsed real time (in [hours:]minutes:seconds).

%e (Not in tcsh.) Elapsed real time (in seconds).

%S Total number of CPU-seconds that the process spent in kernel mode.

%U Total number of CPU-seconds that the process spent in user mode.

%P Percentage of the CPU that this job got, computed as (%U + %S) / %E.

A questo punto mi verrebbe da scartare il valore "real", poichè è comunque perturbabile, e prenderei in considerazione "user + sys", poichè sono valori imperurbabilti da altri fattori, dato che sono riferiti esclusivamente al tal processo.
Cosa consigliereste voi?

prometeus
13-12-2005, 15:46
up

caront
13-12-2005, 20:08
Guarda non so quale sia in realta` l'obiettivo del tuo benchmark, ma in realta` le scelte sono poche e si selezionano automaticamente in base al dove vuole arrivare il tuo studio.
Diciamo che se vuoi uno studio in valore assoluto rispetto all'algoritmo di compressione ed il suo tempo di vita in kernel + user space nonche` il tempo in cui il processo ha le risorse, la risposta te la sei data da solo. Ma se in realta` vuoi misurare l'algoritmo di compressione piu` la perdita (dovuta alle interruzioni e altre operazioni solitamente in kernel space) il real fa per te. Mi viene da fare solo una considerazione per la seconda opzione ovvero sul real. Considera che non esiste un processo non soggetto a variazioni se non il kernel stesso. La variabilita` dell'esecuzione del processo e` dovuta alla priorita` del processo e l'esecuzione dello stesso in un contesto di esecuzione che e` quello corrente. Quindi magari uno studio un tantino piu` approfondito sulla stima delle variazioni in contesti idealmente uguali non sarebbe una cattiva idea, magari riesci a generalizzare la variazione in base alla variazione del contesto di esecuzione dando la possibilita` sia di far diventare piu` interessante la ricerca per te, che per dare una alternativa e quindi rendere piu` dettagliata e completa la tua ricerca.

tutto questo IMHO ovviamente sta a te valutare gli obiettivi del benchmark

Spero che il mio consiglio sia stato utile
Ciao

Loading