Estoy tratando de averiguar por qué una modificación de la C programa se ejecuta más rápido que su no modificada de la parte contraria (yo soy la adición de muy pocas líneas de código para realizar algún trabajo adicional). En este contexto, sospecho que «caché efectos» a ser la principal explicación (caché de instrucciones). Por lo tanto, llegar a la perf (https://perf.wiki.kernel.org/index.php/Main_Page) herramienta de creación de perfiles, pero por desgracia yo no soy capaz de entender el significado de sus resultados con respecto a errores de caché.

Varios eventos acerca de la caché de siempre:

  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]

Donde puedo encontrar explicación acerca de estos campos ? caché-se pierde evento es siempre menor que la de otros eventos. Lo que hace este evento medida ?

Cómo interpretar la 26,760 L1-icache-carga-se pierde para ls vs el 5,708 caché-se pierde 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
InformationsquelleAutor Manuel Selva | 2012-09-26

3 Comentarios

  1. 21

    Que parecen pensar que el cache-misses evento es la suma de todos los otros tipos de errores de caché (L1-dcache-load-misses, y así sucesivamente). Que en realidad no es cierto.

    la cache-misses evento representa el número de acceso a memoria que no podía ser atendido por cualquier de la caché.

    He de reconocer que la perf la documentación no es el mejor en todo.

    Sin embargo, uno puede aprender bastante acerca de la lectura (suponiendo que usted ya tiene un buen conocimiento de cómo una CPU y un rendimiento de la unidad de supervisión del trabajo, esto es, evidentemente, un equipo de la arquitectura, por supuesto) el doc de la perf_event_open() función:

    http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html

    Por ejemplo, mediante la lectura se puede ver que el cache-misses evento mostró por perf lista corresponde a PERF_COUNT_HW_CACHE_MISSES

  2. 26

    Algunas respuestas:

    • L1 es el Nivel 1 de la caché, el más pequeño y más rápido. LLC por otro lado, se refiere al último nivel de la caché de jerarquía, lo que denota la más grande pero más lento de caché.
    • i vs d distingue caché de instrucciones de la memoria caché de datos. Sólo L1 se divide de esta forma, otras cachés son compartidos entre los datos y las instrucciones.
    • TLB se refiere a la búfer de traducción de direcciones, un caché se utiliza cuando la asignación de direcciones virtuales a físicas.
    • Diferentes TLB contadores dependiendo de si el nombre de la dirección se refiere a una instrucción o algunos datos.
    • Para todos los datos de acceso, diferentes contadores se mantienen dependiendo de si la ubicación en memoria fue leído, escrito, o prefetched (es decir, recuperado para la lectura en algún momento posterior).
    • El número de errores indica la frecuencia con que un determinado elemento de datos se accede pero no presentes en la caché.
    • Gracias por la respuesta. Usted está utilizando esta herramienta ? ¿Cómo se puede explicar la caché-se pierde evento que se refiere como un Evento de Hardware y no de Hardware Caché de Eventos. A pesar de que era la suma de los demás, pero no en todos.
    • Y por otra parte ¿cuál es la diferencia entre «cargas» y «prefetches» ?
    • Yo no estoy usando perf a mí, así que tengo poca experiencia real. En particular, estoy seguro de lo que las cache-misses evento describe, en realidad, en comparación con todo el hardware de eventos de la memoria caché. No estoy totalmente seguro acerca de prefetches bien: hay una forma de activar prefetches en el nivel de aplicación, así como automática prefetches de acceso a los datos predichos por el hardware. Uno o ambos de estos podría ser lo que la prefetch contadores de verdad describir. perf documentación menciona especificaciones del fabricante para obtener más detalles, pero todavía no he encontrado las secciones pertinentes.
    • una «carga» es cuando el programa se ejecuta una instrucción de carga para recuperar la memoria. Un «prefetch» es cuando el procesador se estima que se van a cargar la memoria en el futuro cercano, y se obtiene antes de tiempo. De esta forma cuando el programa hace uso de la memoria que ya estará en la memoria caché.
  3. 0

    Debido a la observación de la reputación de restricción, no puedo responder en el comentario de Mvg.
    De acuerdo a la perf tutorial, evento de hardware se refiere a aquellos eventos que pueden asignarse directamente a PMU evnet. Pero el hardware de eventos de la memoria caché se refiere a algunos eventos de hardware monikers proporcionada por el perf, que puede ser asignada a los eventos reales proporcionados por la CPU.

Dejar respuesta

Please enter your comment!
Please enter your name here