tag mp3tag kid3 editar easytag linux caching optimization profiling perf

linux - mp3tag - ¿Por qué no perf informa errores de caché?



mp3tag ubuntu (3)

En el último código fuente , el evento predeterminado no incluye cache-misses cache-references nuevo:

struct perf_event_attr default_attrs[] = { { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_TASK_CLOCK }, { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CONTEXT_SWITCHES }, { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CPU_MIGRATIONS }, { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_PAGE_FAULTS }, { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_CPU_CYCLES }, { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_STALLED_CYCLES_FRONTEND }, { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_STALLED_CYCLES_BACKEND }, { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_INSTRUCTIONS }, { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_INSTRUCTIONS }, { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_MISSES }, };

Así que el hombre y la mayoría de la web están desactualizados como hasta ahora.

De acuerdo con los tutoriales de perf , se supone que perf stat informa errores de caché utilizando contadores de hardware. Sin embargo, en mi sistema (Arch Linux actualizado), no:

[joel@panda goog]$ perf stat ./hash Performance counter stats for ''./hash'': 869.447863 task-clock # 0.997 CPUs utilized 92 context-switches # 0.106 K/sec 4 cpu-migrations # 0.005 K/sec 1,041 page-faults # 0.001 M/sec 2,628,646,296 cycles # 3.023 GHz 819,269,992 stalled-cycles-frontend # 31.17% frontend cycles idle 132,355,435 stalled-cycles-backend # 5.04% backend cycles idle 4,515,152,198 instructions # 1.72 insns per cycle # 0.18 stalled cycles per insn 1,060,739,808 branches # 1220.015 M/sec 2,653,157 branch-misses # 0.25% of all branches 0.871766141 seconds time elapsed

¿Qué me estoy perdiendo? Ya busqué en la página de manual y en la web, pero no encontré nada obvio.

Edición: mi CPU es una Intel i5 2300K, si eso importa.


En mi sistema, un Intel Xeon X5570 @ 2.93 GHz , pude obtener una perf stat de perf stat para reportar las referencias de caché y errores al solicitar esos eventos explícitamente como este

perf stat -B -e cache-references,cache-misses,cycles,instructions,branches,faults,migrations sleep 5 Performance counter stats for ''sleep 5'': 10573 cache-references 1949 cache-misses # 18.434 % of all cache refs 1077328 cycles # 0.000 GHz 715248 instructions # 0.66 insns per cycle 151188 branches 154 faults 0 migrations 5.002776842 seconds time elapsed

El conjunto predeterminado de eventos no incluye eventos de caché, que coinciden con sus resultados, no sé por qué

perf stat -B sleep 5 Performance counter stats for ''sleep 5'': 0.344308 task-clock # 0.000 CPUs utilized 1 context-switches # 0.003 M/sec 0 CPU-migrations # 0.000 M/sec 154 page-faults # 0.447 M/sec 977183 cycles # 2.838 GHz 586878 stalled-cycles-frontend # 60.06% frontend cycles idle 430497 stalled-cycles-backend # 44.05% backend cycles idle 720815 instructions # 0.74 insns per cycle # 0.81 stalled cycles per insn 152217 branches # 442.095 M/sec 7646 branch-misses # 5.02% of all branches 5.002763199 seconds time elapsed


He pasado algunos minutos tratando de entender perf . Descubrí los fallos de caché al grabar primero y luego informar los datos (ambas herramientas de perf ).

Para ver una lista de eventos:

perf list

Por ejemplo, para revisar el último nivel de carga de memoria caché, querrá usar el evento LLC-loads-misses como este

perf record -e LLC-loads-misses ./your_program

luego informa los resultados

perf report -v