Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3.3. Profiling dello spazio di stack e heap con Massif

Massif misura lo spazio heap usato da un programma specifico; sia lo spazio utilizzabile che qualsiasi spazio aggiuntivo assegnato per processi di allineamento e contabilità. Il suo utilizzo aiuta a ridurre la quantità di memoria usata dal programma, al tempo stesso aumenta la velocità e riduce la possibilità di esaurire lo spazio di swap della macchina sulla quale viene eseguito. Massif fornisce altresi anche le informazioni sulle sezioni del programma responsabili all'assegnazione della memoria heap. I programmi eseguiti con Massif vengono eseguiti circa venti volte più lentamente rispetto alla loro velocità normale di esecuzione.
Per analizzare l'uso di heap da parte di un programma specificare massif come strumento di Valgrind da usare:
# valgrind --tool=massif program
I dati sul profiling raccolti da Massif vengono scritti su un file che per impostazione predefinita viene chiamato massif.out.pid, dove pid è l'ID del processo del programma specificato.
Questi dati possono essere rappresentati in modo grafico con il comando ms_print:
# ms_print massif.out.pid
Così facendo verrà generato un grafico sul consumo della memoria relativa all'esecuzione del programma, e riportate le informazioni dettagliate sui siti responsabili per l'assegnazione in vari punti nel programma, incluso il punto massimo dell'assegnazione della memoria.
Massif fornisce un certo numero di opzioni della linea di comando utilizzabili. Alcune opzioni disponibili sono:
--heap
Specifica se eseguire il profiling di heap. Il valore predefinito è yes. Il profiling di heap può essere disabilitato impostando questa opzione su no.
--heap-admin
Specifica il numero di byte per blocco da usare per la gestione quando il profiling di heap è abilitato. Il valore predefinito è 8 byte per blocco.
--stacks
Specifica se eseguire il profiling dello stack. Il valore predefinito è no (disabilitato). Per abilitare il profiling dello stack impostare questa opzione su yes, ma attenzione poichè così facendo verrà sensibilmente rallentata l'esecuzione di Massif. Da notare altresì che Massif assume che la dimensione dello stack sia zero all'avvio, in modo da indicare meglio la dimensione della porzione di stack rispetto al quale il programma sul quale viene eseguito il profiling ha un controllo.
--time-unit
Specifica l'unità di tempo usata per il profiling. Sono disponibili tre valori validi per questa opzione: istruzioni eseguite (i), il valore predefinito, che risulta utile in numerosi casi; real time (ms, in millisecondi), utile in determinate istanze; e byte allocati/deallocati sull'heap/o stack (B), utile per programmi eseguiti brevemente e per l'esecuzione di test, poichè questo processo risulta essere quello più facilmente riproducibile su diverse macchine. Questa opzione è utile per un grafico dell'output di Massif con ms_print.
Per un elenco di opzioni completo consultare la documentazione inclusa in /usr/share/doc/valgrind-version/valgrind_manual.pdf.