memory usage ενός script/commad?

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Oct 3 15:39:50 EEST 2006


On 2006-10-03 13:15, Argiris Mokios <amok at auth.gr> wrote:
>Giorgos Keramidas wrote:
>> On 2006-10-02 16:07, Argiris Mokios <amok at auth.gr> wrote:
>>   
>>> Καλησπέρα,
>>>
>>> προσπαθώ να μετρήσω μερικά στατιστικά στοιχεία για κάποια
>>> scripts/commads που
>>> εκτελώ με την time, αλλά δεν μου δίνει στοιχεία σχετικά με την χρήση μνήμης.
>>>
>>> /usr/bin/time -f"\t Average total memory use: %Kkbytes\n" script
>>>
>>> Average total memory usage: 0kbytes
>>>  
>>> Έχει κανείς να προτείνει κάποια εναλλακτική μέθοδο;
>>>     
>>
>> Μπορείς να γράψεις ένα δικό σου εργαλείο, που κάνει fork() κι εκτελεί το
>> πρόγραμμα που θέλεις.  Ύστερα, όταν το child process τερματίσει
>> κανονικά, μια κλήση στην getrusage() επιστρέφει πολλά ωραία στατιστικά:
>>
>> % GETRUSAGE(2)              FreeBSD System Calls Manual             GETRUSAGE(2)
>> % .
>
> Σε ευχαριστώ για την βοήθεια. Έκανα μια προσπάθεια αλλά τα αποτελέσματα
> που παίρνω είναι της μορφής:
> 
>             ru_utime:0/376023   user time used (secs/usecs)
>             ru_stime:0/4000     system time used (secs/usecs)
>            ru_maxrss:0          maximum resident set size
>             ru_ixrss:0          integral shared memory size
>             ru_idrss:0          integral unshared data size
>             ru_isrss:0          integral unshared data stack size
>            ru_minflt:581        page reclaims
>            ru_majflt:2          page faults
>             ru_nswap:0          swaps
>           ru_inblock:0          block input operations
>           ru_oublock:0          block output operations
>            ru_msgsnd:0          messages sent
>            ru_msgrcv:0          messages received
>          ru_nsignals:0          signals received
>             ru_nvcsw:10         voluntary context switches
>            ru_nivcsw:126        involuntary context switches
> 
> Δεν ξέρω αν κάνω κάτι λάθος(βλέπε attachment) ή ισχύει αυτό που βρήκα:
> 
> The above struct was taken from 4.3BSD Reno. Not all fields are
> meaningful under Linux. In linux 2.4 only the fields ru_utime, ru_stime,
> ru_minflt, and ru_majflt are maintained. Since Linux 2.6, ru_nvcsw and
> ru_nivcsw are also maintained.
> 
> Έχω ξενερώσει απίστευτα!!! Δηλαδή αν δεν μπορώ να κάνω κάτι τέτοιο σε
> περιβάλλον linux, που στο διάολο(βλέπε FreeBSD) θα το κάνω.

Κρίμα και χάρηκα :(

Μάλλον δεν επιστρέφει όλες τις πληροφορίες η getrusage() σε Linux.

Το attached πρόγραμμα είναι μια τροποποιημένη μορφή του ίδιου fork-based
προγράμματος, η οποία δεν διαβάζει σε loop εντολές, αλλά χρησιμοποιεί το
argv[1 ... argc-1] ως argv[] της execvp().

Τα αποτελέσματα που παίρνω σε FreeBSD είναι:

| giorgos at gothmog:/home/giorgos/tmp/mokios$ ./mokios ls
| Makefile        mokios          mokios.c        mokios.o
| pid 21623
|   user time used (utime) = 0.000000
|   system time used (stime) = 0.003923
|   max resident set size (maxrss) = 648
|   integral shared text memory size (ixrss) = 24
|   integral unshared data size (idrss) = 4
|   integral unshared stack size (isrss) = 128
|   page reclaims (minflt) = 109
|   page faults (majflt) = 0
|   swaps (nswap) = 0
|   block input operations (inblock) = 0
|   block output operations (oublock) = 0
|   messages sent (msgsnd) = 0
|   messages received (msgrcv) = 0
|   signals received (nsignals) = 0
|   voluntary context switches (nvcsw) = 1
|   involuntary context switches (nivcsw) = 0
| giorgos at gothmog:/home/giorgos/tmp/mokios$ ./mokios gcc mokios.c
| pid 21638
|   user time used (utime) = 0.033936
|   system time used (stime) = 0.027149
|   max resident set size (maxrss) = 5140
|   integral shared text memory size (ixrss) = 18568
|   integral unshared data size (idrss) = 34628
|   integral unshared stack size (isrss) = 1152
|   page reclaims (minflt) = 1026
|   page faults (majflt) = 0
|   swaps (nswap) = 0
|   block input operations (inblock) = 0
|   block output operations (oublock) = 2
|   messages sent (msgsnd) = 0
|   messages received (msgrcv) = 0
|   signals received (nsignals) = 0
|   voluntary context switches (nvcsw) = 9
|   involuntary context switches (nivcsw) = 5
| giorgos at gothmog:/home/giorgos/tmp/mokios$ ./mokios ls -l a.out
| -rwxrwxr-x  1 giorgos  giorgos  9666 Oct  3 15:33 a.out
| pid 21643
|   user time used (utime) = 0.000000
|   system time used (stime) = 0.006276
|   max resident set size (maxrss) = 264
|   integral shared text memory size (ixrss) = 24
|   integral unshared data size (idrss) = 4
|   integral unshared stack size (isrss) = 128
|   page reclaims (minflt) = 139
|   page faults (majflt) = 0
|   swaps (nswap) = 0
|   block input operations (inblock) = 0
|   block output operations (oublock) = 0
|   messages sent (msgsnd) = 0
|   messages received (msgrcv) = 0
|   signals received (nsignals) = 0
|   voluntary context switches (nvcsw) = 1
|   involuntary context switches (nivcsw) = 1
| giorgos at gothmog:/home/giorgos/tmp/mokios$

Στο BSD τα πεδία maxrss, ixrss, idrss, isrss, nvcsw και nivcsw φαίνεται
να παίζουν σωστά.

ΥΓ. Αν και μάλλον δεν έχει ιδιαίτερη σημασία, στο ίδιο tarball υπάρχουν
και τα metadata ενός Mercurial repository, οπότε μπορείς να δεις πως
έκανα ότι αλλαγές έκανα.




More information about the Linux-greek-users mailing list