我有一个运行嵌入式Linux的嵌入式目标,我想计算以下时间:
1)高速缓冲存储器读/写定时 2)解除内存读/写时序
Linux中是否有任何标准测试来计算上述时间?
我写了自己的测试:
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));
但问题是此测试只能计算缓存内存访问的时间,因为用户空间中的malloc仅从缓存区域分配内存。 我想要对uncache内存区域进行类似的测试。
答案 0 :(得分:2)
首先=您的测试测量内存带宽 - 如果您需要延迟,则需要使访问依赖(例如,遍历链接列表)。
第二 - 您没有初始化复制的数据,因此您将在时间循环内获得页面错误。这里描述了同样的问题 - cpu cacheline and prefetch policy
对于不可缓存的请求 - 最简单的选择是检查编译器是否识别流媒体存储/加载,它们的行为与非缓存类似(除非您对测量MMIO或类似的特殊情况感兴趣)