linux-kernel - 当 mmap() 时避免转换后备缓冲区 (TLB) 污染

标签 linux-kernel x86 intel micro-optimization tlb

当我们要写入一个数据项时,首先将包含数据的块带入缓存,然后将数据项写入缓存。这可能会导致缓存污染。为了避免这种情况,英特尔没有引入临时指令。

如果我要使用 mmap() 将数据写入文件并且永远不会再次读取,是否可以避免为此创建 TLB 条目?是否有任何类似于非临时指令的指令可用?

最佳答案

CPU 需要 TLB 条目来从虚拟地址映射到物理地址,因此无法通过 mmap() 避免它们。或任何类似的 API。

即使可以避免将映射存储在 TLB 中,但每次访问映射内存都需要从页表中重新加载相应的条目,因此性能会差很多。
非临时访问仅对存储有意义,但读取页表条目。

关于linux-kernel - 当 mmap() 时避免转换后备缓冲区 (TLB) 污染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38689075/

相关文章:

visual-studio-2010 - 无法使用英特尔 Cilk 编译代码

c++ - 如何找到未初始化的堆栈变量

c - 为什么使用 loff_t *offp 而不是直接使用 filp->f_pos 的原因

c - 为什么我得到 "error: too few arguments to function ‘sock->ops->accept’"

assembly - 为什么x86 movsd导致三重故障异常?

x86 - 什么是有效地址?

c++ - 击败编译器

c - 内核源码 3.10.0-229.11.1.el7.x86_64 编译失败

c - 如何在程序中包含内核头文件

string - dw 和 dd 与字符串的 db 指令有何不同?