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 suno
. --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 suyes
, 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 conms_print
.
Per un elenco di opzioni completo consultare la documentazione inclusa in
/usr/share/doc/valgrind-version/valgrind_manual.pdf
.