Linux 的清 CPU cache 的函数是哪个?

查看 249|回复 20
作者:amiwrong123   
目前我正在 linux 上,写一个用户态的一个 c 程序。里面有一个逻辑是,去写了一段 RAM ,但写的动作实际上只发生在了 x86 CPU 的 cache 里面,还没有真正写到 RAM 里,然后这导致了错误发生(可以认为我需要结合 DMA 做一些操作,但 DMA 需要读到的东西还在 CPU 的 cache 里面呢)。
所以我想知道,linux 里有提供这种函数吗?(类似 arm ,都会提供这种函数的)
另外,我在网上搜,搜到的 全是 shell 里执行的命令:sync; echo 1 > /proc/sys/vm/drop_caches。这个关键词到底该怎么搜索。

Cache, 函数, Linux, dma

Yourshell   
你用 C 也可以写/proc/sys/vm/drop_caches 啊
Yourshell   
Linux 文件就是接口
geelaw   
关键词是 linux flush cpu cache
Yourshell   
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
codehz   
我觉得这里有很多概念上的问题啊。。。
/proc/sys/vm/drop_caches 这个显然和 cpu cache 没有关系
你要 bypass cpu cache 的话,直接 volatile 不就好了
amiwrong123
OP
  
@codehz
指针加 volatile 应该也可以 达到我的目的,但可能效率会变低。
所以还是想用 清 cache 的函数。
leonshaw   
XY 问题
ljn917   
感觉 memory order/fence 可以,但是需要 C11
https://en.cppreference.com/w/c/atomic/memory_order
codehz   
@amiwrong123 (小寄巧:用 *(volatile int __attribute__((force)) *)&x = 1 写入
内核也在用,不过把 __attribute__((force)) 加了个宏__force 简化)
您需要登录后才可以回帖 登录 | 立即注册

返回顶部