cachingvs uncacheembedded式Linux内存访问

我有一个运行embedded式Linux的embedded式目标,我想计算以下时间:

1)高速缓冲存储器读/写定时2)高速caching存储器读/写定时

Linux中是否有标准testing来计算上述时间?

我写了我自己的testing:

void *mem_src = (void*)malloc(MEM_SIZE); void *mem_dest = (void*)malloc(MEM_SIZE); clock_gettime(CLOCK_THREAD_CPUTIME_ID, &pre); memcpy(mem_dest, mem_src, MEM_SIZE); clock_gettime(CLOCK_THREAD_CPUTIME_ID, &post); printf("time %ld\n", (SEC_TO_NSEC(post.tv_sec) + post.tv_nsec) - (SEC_TO_NSEC(pre.tv_sec) + pre.tv_nsec)); 

但是问题是这个testing只能计算caching内存访问的时间,因为用户空间中的malloc只从caching区域分配内存。 我想为uncache内存区域进行类似的testing。

首先=你的测试措施内存带宽 – 如果你想延迟你需要使访问依赖(例如遍历链表)。

其次 – 您不会初始化您复制的数据,因此您会在时间循环内发生页面错误。 同样的问题在这里描述 – cpu cacheline和预取策略

对于不可缓存的请求 – 最简单的选择是检查编译器是否识别流式存储/加载,它们的行为应该与不可缓存行为非常相似(除非您有兴趣测量MMIO或类似的特殊情况)