我最近听说Linux在该物理地址中的相应数据被换出时简单地刷新TLB缓存,导致TLB利用率不足。我不知道是否所有操作系统都这样做。
如果这是真的,那么增加 RAM 并避免上下文切换会将缓存保留在 TLB 中吗?
答案1
看来Linux内核对TLB和TLB缓存的处理方式是一样的。在独立于体系结构的级别上,没有像刷新部分或整个 TLB 缓存 AFAIK 这样的事情。例如,虚拟机将分页,并且此操作有一些挂钩,如果需要,将触发硬件相关的代码。根据 CPU 的不同,内核可能会对每个页面输出执行多次页面刷新,或者 CPU 支持页面刷新范围,或者两者都不支持,并且内核使用最昂贵的刷新来刷新整个缓存。
关于这个主题有两篇有趣的文章:
- 页表管理(如果屏幕上出现一些奇怪的字符,请尝试强制使用 ISO-8859-1 进行页面编码)
- 内核文档 - Linux 下的缓存和 TLB 刷新
答案2
交换数据比删除 TLB 行(之后就没有任何用处)要昂贵得多。并且刷新整个 TLB 可能也便宜得多。
Linux 的大佬们绝对是性能狂人。如果他们按照您的说法进行操作,那是因为受影响的架构不允许有更好的事情(或者根本不重要)。