x86 - TLB invlpg指令延迟较长

标签 x86 virtual-memory tlb

所以我正在研究这个执行一些页表操作的内核模块,我注意到刷新 TLB 条目很慢。你问多慢?每次调用 invlpg 的时间超过 100 ns!即 280 个周期或更多。我愿意接受这一点......但是对于硬件支持的分页和地址转换来说,这似乎违反直觉。有人知道为什么这么糟糕吗?

我正在 4 核 2.8 Ghz Intel core i5 上运行

最佳答案

我的猜测是,像这样的特权指令很少占任何实际工作负载的总 CPU 时间的重要部分,因此不值得花费大量芯片来提高它们的速度。

使它们成为非序列化意味着无序微指令调度逻辑必须跟踪页表修改作为每个内存微指令的依赖项之一。这会对功耗产生负面影响,因为重排序缓冲区已经需要跟踪大量内容,并且每个周期支持 4 个输入和更多输出。

虚拟化的广泛使用导致了最近设计中这些指令的性能改进,因为 virt 开销是某些工作负载中的一个问题。我想 invlpg 的情况并非如此。

关于x86 - TLB invlpg指令延迟较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077883/

相关文章:

windows - 如何在汇编程序中更改屏幕背景

您可以将非 ascii 字符传递给 argv 吗?

Linux 汇编问题

caching - 在处理器 x86/x86_64 中使用物理或虚拟寻址来缓存 L1、L2 和 L3?

c++ - 如何在 64 位 C++ 代码中使用暂停汇编指令?

linux - 为什么Linux有4层 "page tables"以及它到底是如何工作的

linux - 在 Linux 机器上的大量磁盘 I/O 期间文件写入停滞

performance - 建议Prolog处理器利用大页面

linux - 内核端页面缓存 virt <-> phys 映射如何与 TLB 交互?

virtual-machine - 影子页表(用于 VMM)究竟是做什么的?