gpt4 book ai didi

嵌入式 Linux 中的缓存和非缓存内存访问

转载 作者:太空狗 更新时间:2023-10-29 11:14:37 29 4
gpt4 key购买 nike

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

1) 高速缓存读/写时序2) uncache 内存读/写时序

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 只从缓存区域分配内存。我想要对未缓存内存区域进行类似的测试。

最佳答案

首先 = 您的测试测量内存带宽 - 如果您想要延迟,您需要使访问依赖(例如遍历链表)。

其次 - 您没有初始化复制的数据,因此您会在时间循环中遇到页面错误。此处描述的相同问题 - cpu cacheline and prefetch policy

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

关于嵌入式 Linux 中的缓存和非缓存内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20635204/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com