ARM Cortex-A7支持多少个事件计数器,以及如何选择/读取/写入这些计数器?ARM Cortex-A7中的事件计数器
例如,如果运行:
./perf stat -e L1-dcache-loads,branch-loads sleep 1
,它存储事件算?你可以看到,{c9,c13,0}表示周期计数寄存器,{c9,c13,2}表示事件计数寄存器,所以执行完perf命令后,哪个寄存器的值会改变c9或c13?
如果你看到下面这段代码:
static inline int armv7_pmnc_select_counter(int idx)
{
u32 counter = ARMV7_IDX_TO_COUNTER(idx);
asm volatile("mcr p15, 0, %0, c9, c12, 5" : : "r" (counter));
return idx;
}
static inline void armv7pmu_write_counter(struct perf_event *event, u32 value)
{
struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
struct hw_perf_event *hwc = &event->hw;
int idx = hwc->idx;
if (!armv7_pmnc_counter_valid(cpu_pmu, idx))
pr_err("CPU%u writing wrong counter %d\n",smp_processor_id(), idx);
else if (idx == ARMV7_IDX_CYCLE_COUNTER)
asm volatile("mcr p15, 0, %0, c9, c13, 0" : : "r" (value));
else if (armv7_pmnc_select_counter(idx) == idx)
asm volatile("mcr p15, 0, %0, c9, c13, 2" : : "r" (value));
}
对于每个事件计数器,该armv7pmu_write_counter
函数设置不同的idx
值与armv7_pmnc_select_counter
但更新value
,它调用相同mcr
指令,怎么样?
你知道,同样的手册还具有[一所有关于章节的PMU(http://infocenter.arm.com/help/topic/ com.arm.doc.ddi0464f/BIIIFHEG.html),对吗? – Notlikethat