2011-01-24 9 views
8
  1. E 'sicuro usare lseek(fd,0) e poi read(fd,buf) per /proc/stat file invece di riaprire per ottenere contenuti aggiornati di questo file la prossima volta?
  2. E cosa fa realmente la chiamata mmap() dopo l'apertura di questo file (vedi sotto)?

Il problema che sto riscontrando è che le prime segnalazioni indicano un utilizzo della CPU troppo basso (10% vs 100% per gli interrupt software). Lo strace indica che top non riapre questo file, ma invece inizia a leggere e lo legge ancora una volta. E in qualche modo il contenuto che viene letto da questo file la volta successiva non corrisponde a quello che otterrei quando eseguo il gatto per il file /proc/stat da solo.è sicuro da usare lseek() durante la lettura da Proc-FS file seconda volta

Anche se corro in cima e cat /proc/stat in un ciclo allo stesso tempo, in alto inizia a segnalare l'utilizzo della CPU corretto.

Un'altra differenza che ho notato è che il primo utilizza la chiamata mmap() subito dopo l'apertura del file /proc/stat, mentre lo cat non lo fa. Non sono sicuro se questo potrebbe anche essere messa in relazione con il mio problema (perché filesdes=-1 qui):

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000 

Sto usando edizione Ubuntu 10.04.1 Desktop immagine 2.6.32-27-server con. La CPU è Intel Q6600.

risposta

4

È molto interessante quello che chiedi ... Inizio a controllare nella mia macchina ma non vedo differenze tra cat/proc/stat ed eseguo il comando in alto. Ad ogni modo, sono al lavoro e non sono totalmente 'libero' di fare test.

Il modo in cui si descrive "aggiornare" il file aperto per leggere i nuovi dati è corretto ... in caso di una chiamata [f | l] seek() alla fine e quindi all'inizio del file verrà aggiornato l'EOF e i nuovi dati saranno letti.

Non penso che la chiamata mmap() causerà il problema che hai menzionato, potrebbe rendere la lettura più veloce, ma nient'altro (non sono sicuro al 100%).

Ti suggerisco di creare una piccola app in C che apri/proc/stat, legga, cerchi e rileggi per vedere come è aggiornata, anche se hai qualche stress test da fare potrebbe essere utile.

Ora, rispondere alle vostre reali domande:

  1. Sì, per quanto ne so è sicuro, perché vi sarà 'in attesa' per i nuovi dati sul file e dovrebbe essere migliore di aprire e chiudere il file per tutto il tempo .

  2. Esso mappa di un file allo spazio di indirizzi del processo, ecco alcuni esempi info e:

http://www.gnu.org/s/libc/manual/html_node/Memory_002dmapped-I_002fO.html http://www.linuxquestions.org/questions/programming-9/mmap-tutorial -cc-511265/

+0

Questo è vero per lseek. Sembra che htop sia implementato per riaprire/proc/stat file ogni volta prima di leggerlo, ma nel frattempo htop segnala anche l'utilizzo della cpu non valido. Quindi possiamo probabilmente escludere lseek(). –

Problemi correlati