Estoy intentando averiguar por qué un programa C modificado se ejecuta más rápido que su contraparte no modificada (estoy agregando muy pocas líneas de código para realizar algún trabajo adicional). En este contexto, sospecho que "efectos de caché" es la explicación principal (caché de instrucciones). De este modo llego a la herramienta de perfilado perf
(https://perf.wiki.kernel.org/index.php/Main_Page) pero por desgracia no soy capaz de entender el significado de sus resultados con respecto a los errores de caché. Se proporcionan¿Qué significan los eventos de perf cache?
Varios eventos sobre caché:
cache-references [Hardware event]
cache-misses [Hardware event]
L1-dcache-loads [Hardware cache event]
L1-dcache-load-misses [Hardware cache event]
L1-dcache-stores [Hardware cache event]
L1-dcache-store-misses [Hardware cache event]
L1-dcache-prefetches [Hardware cache event]
L1-dcache-prefetch-misses [Hardware cache event]
L1-icache-loads [Hardware cache event]
L1-icache-load-misses [Hardware cache event]
L1-icache-prefetches [Hardware cache event]
L1-icache-prefetch-misses [Hardware cache event]
LLC-loads [Hardware cache event]
LLC-load-misses [Hardware cache event]
LLC-stores [Hardware cache event]
LLC-store-misses [Hardware cache event]
LLC-prefetches [Hardware cache event]
LLC-prefetch-misses [Hardware cache event]
dTLB-loads [Hardware cache event]
dTLB-load-misses [Hardware cache event]
dTLB-stores [Hardware cache event]
dTLB-store-misses [Hardware cache event]
dTLB-prefetches [Hardware cache event]
dTLB-prefetch-misses [Hardware cache event]
iTLB-loads [Hardware cache event]
iTLB-load-misses [Hardware cache event]
branch-loads [Hardware cache event]
branch-load-misses [Hardware cache event]
node-loads [Hardware cache event]
node-load-misses [Hardware cache event]
node-stores [Hardware cache event]
node-store-misses [Hardware cache event]
node-prefetches [Hardware cache event]
node-prefetch-misses [Hardware cache event]
¿Dónde puedo encontrar una explicación acerca de estos campos? el evento cache-missing es siempre más pequeño que otros eventos. ¿Qué mide este evento?
cómo interpretar los 26.760 L1-iCache-carga-accidentes para ls vs los 5.708 cache-accidentes en el siguiente ejemplo?
perf stat -e L1-icache-load-misses ls
caches caches~ out
Performance counter stats for 'ls':
26,760 L1-icache-load-misses
0.002816690 seconds time elapsed
perf stat -e cache-misses ls
caches caches~ out
Performance counter stats for 'ls':
5,708 cache-misses
0.002822122 seconds time elapsed
Gracias por la respuesta. ¿Estás usando esta herramienta?¿Cómo se explica el evento cache-misses denominado evento de hardware y no evento de caché de hardware? Pensé que era la suma de los demás, pero no del todo. –
Y, además, ¿cuál es la diferencia entre "cargas" y "prefetches"? –
@ManuelSelva: No estoy usando 'perf', así que tengo poca experiencia real. En particular, no estoy seguro de qué es lo que describe el evento 'cache-misses' en comparación con todos los eventos de caché de hardware. Tampoco estoy del todo seguro acerca de las captaciones anticipadas: hay una manera de desencadenar las captaciones previas en el nivel de la aplicación, así como las captaciones previas automáticas de acceso a datos predichos por el hardware. Cualquiera de estos o ambos pueden ser lo que describen los contadores de captación previa. La documentación 'perf' menciona las especificaciones del fabricante para más detalles, pero aún no he encontrado las secciones relevantes. – MvG