ARM 的时钟周期计数保存在PMCCNTR 寄存器,不像x86用户态可以直接读取,需内核态使能,一种是在内核中使能,比如init,比较简单的是在模块中使能。 本来写了两个,arm32一个,arm64一个,方便对比合在了一起。 只测试了32位cortex-a9双核, 还有 个64位a76a55。 不适用arm v6 enpmu.c #include <linux/module.h> ...
0b0 控制PMCCNTR每一个时钟周期计数一次 0b1 控制PMCCNTR每64个时钟周期计数一次 当PMCR_EL0.LC == 1时,此位无效且PMCCNTR每一个时钟周期计数一次 Arm不建议使用0b1 C, bit[2] 此位是WO/RAZ 0b0 无影响 0b1 重置PMCCNTR为0 重置PMCCNTR为0不影响对应的PMCCNTR的溢出标识位。 如果实现了FEAT_PMUv3p5,PMCR...
asm volatile("mrs %0, pmccntr_el0" : "=r"(val)); printk("pmccntr_el0: 0x%llx\n", val); return val; } static inline uint64_t read_pmccntr(void) { uint64_t val; int cpu = smp_processor_id(); asm volatile("mrs %0, pmccntr_el0" : "=r"(val)); printk("%d: pmccntr_el...
在 ARMv8 中,有性能监视器控制寄存器系列添加,其中PMCCNTR_EL0就像 x86 的 TSC执行代码一样。 读取这个PMCCNTR_EL0当前不同的值,就可以知道CPU已经有多少Cycle了。但是在ARM下读取CPU Cycle和x86帮助: x86状态码可以随便读取TSC。在ARM中,默认情况是用户状态是无法读取的,需要在用户内核状态代码使能后,用户读取...
在ARMv8架构中,我们可以通过监控硬件性能计数器来获取缓存未命中次数。具体而言,我们可以利用PMCCNTR_EL0寄存器中的计数器值来计算缓存未命中次数。 3. 代码示例 #include<stdio.h>#include<stdint.h>#definePERF_COUNT_ENABLE(1<<31)#definePMCCNTR_EL0"S3_0_C9_C13_0"voidenable_perf_counter(){uint32_tval...
读MRS/写MSR 作用 统计进程的时钟周期 只有实现了FEAT_PMUv3,此计数器才存在。并且PMCCNTR的计数还会受到时钟频率的改变的影响,例如时钟被WFI和WFE指令暂停了。 位图 读写 作用 表明...
PMCCNTR_EL0 PMCEID0_EL0 PMCEID1_EL0 PMCNTENCLR_EL0 PMCNTENSET_EL0 PMCR_EL0 PMEVCNTR<n>_EL0 PMEVTYPER<n>_EL0 PMINTENCLR_EL1 PMINTENSET_EL1 PMMIR_EL1 PMOVSCLR_EL0 PMOVSSET_EL0 PMSELR_EL0 PMSWINC_EL0 PMUSERENR_EL0 ...
PMCCFILTR_EL0PMCCNTR_EL0PMCEID0_EL0PMCEID1_EL0PMCNTENCLR_EL0PMCNTENSET_EL0PMCR_EL0PMEVCNTR_EL0PMEVTYPER_EL0PMINTENCLR_EL1PMINTENSET_EL1PMMIR_EL1PMOVSCLR_EL0PMOVSSET_EL0PMSELR_EL0PMSWINC_EL0PMUSERENR_EL0PMXEVCNTR_EL0PMXEVTYPER_EL0 ...
在armv8中,有一个PMCCNTR_EL0的寄存器,默认情况下,需要内核使能才能读取。 用户态代码: staticuint64_t Rdtsc(void) { uint64_t count_num; __asm__ __volatile_("mrs %0, pmccntr_el0":"+r"(count_num));returncount_num; } 驱动模块,在驱动中实现对寄存器的使能。不过这段代码,我尝试在init初始...
taskset -c 3 insmod pmu.ko 这段模块操作PMU内部寄存器,启用cycle counter并允许EL0级别访问。用户态应用可以直接读取pmccntr_el0获取当前周期数。然而,PMXEVCNT_EL0的值为0,这可能是因为需要特定版本的PMU支持,如FEAT_PMUv3p5,而我们的系统仅实现了v3。查看AA64DFR0_EL1[11:8],我们得知...