我想在用户空间进程中将一系列内存设置为不可缓存(
Linux,x86-86).
This question接近,但只提到了与物理内存一起工作的MTRR寄存器.我想使用PAT表来实现这一点,因为它们提供了更细粒度的控制,它们允许虚拟内存在逐页的基础上设置为不可缓存.
Linux文档,Documentation/x86/pat.txt,建议应该有mmap和SYNC标志,但我在实践中找不到如何做到这一点.理想情况下,我想使用诸如mprotect(地址,范围,O_UNCACHABLE)之类的调用.
解决方法
我建议编写内核模块,为用户级进程提供必要的接口.在内核模块中,您可以使用
set_memory_uc来控制页面属性.
关于模拟器:除非你在门级进行模拟,否则它应该慢一到几千倍 – 不是一百万倍.不要忘记考虑编写内核模块所花费的时间.如果您花费几周的时间来编写和调试模块,那么最好使用模拟器进行一次性实验.