5.3.2. Perfilar uso de cache con Cachegrind
Cachegrand simula su interacción de programa con la jerarquía de cache de máquina y el predictor de saltos (opcionalmente). Este rastrea el uso de la instrucción simulada del primer nivel y las caches de datos para detectar interacción de código pobre con este nivel de cache; y la cache de último nivel, ya sea de segundo o tercer nivel, para rastrear el acceso a la memoria principal. Así los programas que se ejecutan con Cachegrind, se ejecutan de una forma de veinte a cien veces más lenta que cuando se ejecutan normalmente.
Para ejecutar Cachegrind, ejecute el siguiente comando, remplace programa por el programa que desea perfilar con Cachegrind:
# valgrind --tool=cachegrind programa
Cachegrind puede reunir las siguientes estadísticas para el programa completo, y para cada una de sus funciones:
- lecturas de cache de instrucciones de primer nivel (o instrucciones ejecutadas) y pérdidas de lecturas, y pérdidas de lectura de instrucción cache de último nivel;
- lecturas de cache de datos (o lecturas de memoria), pérdidas de lectura y pérdidas de lectura de datos cache de último nivel;
- escrituras de cache de datos (o escrituras de memoria), pérdidas de escritura y pérdidas de escritura de cache de último nivel.
- saltos condicionales ejecutados y predichos erróneamente; y
- saltos indirectos ejecutados y predichos erróneamente
Cachegrind imprime en la consola información de resumen sobre estas estadísticas y escribe más información de perfil en un archivo (
cachegrind.out.pid
predeterminado, donde pid es el número de proceso en el que se ejecutó Cachegrind). Este archivo puede ser procesado por la herramienta de acompañamiento cg_annotate , de esta manera:
# cg_annotate cachegrind.out.pid
Nota
cg_annotate puede emitir líneas de más de 120 caracteres, según la longitud de la ruta. Para obtener una salida más clara y fácil de leer, se recomienda que su ventana de terminal tenga al menos este ancho antes de ejecutar el comando antes mencionado.
También puede comparar los archivos de perfil creados por Cachegrind para simplificar el rendimiento del programa de tabla antes y después de un cambio. Para ello, use el comando cg_diff, remplace primero por el primer perfil de salida y segundo por el archivo de salida de siguiente perfil:
# cg_diff primero segundo
Este comando produce un archivo de salida combinado, el cual puede verse en mayor detalle con cg_annotate.
Cachegrind soporta una cantidad de opciones para enfocar su salida. Algunas de las opciones disponibles son:
--I1
- Especifica el tamaño, la capacidad de asociación y el tamaño de línea de la cache de instrucción de primer nivel, separados por comas:
--I1=tamaño,asociatividad,tamaño de línea
. --D1
- Especifica el tamaño, capacidad de asociación y tamaño de línea de cache de datos de primer nivel, separados por comas:
--D1=tamaño,asociatividad,tamaño de línea
. --LL
- Especifica el tamaño, la capacidad de asociación y el tamaño de línea de la cache de instrucción de último nivel, separados por comas:
--LL=tamaño,asociatividad,tamaño de línea
. --cache-sim
- Habilita o inhabilita la recolección de acceso de datos y conteos de pérdidas. El valor predeterminado es
yes
(habilitado).Observe que al inhabilitar ambos saltos y--branch-sim
no le dejará a Cachegrind ninguna información para recolectar. --branch-sim
- Habilita o inhabilita la instrucción de saltos y conteos predichos erróneamente. Se establece a
no
(inhabilitado) de forma predeterminada, ya que ralentiza a Cachegrind en un 25 por ciento.Observe que al inhabilitar ambos saltos y--cache-sim
dejará a Cachegrind sin ninguna información para recolectar.
Para obtener una lista completa de las opciones, consulte la documentación incluida en
/usr/share/doc/valgrind-version/valgrind_manual.pdf
.