Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了缓存 – Linux是否使用x86 CPU的PCID功能进行TLB?如果没有,为什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我写了一个内核模块来检查CR4.PCIDE,它没有设置.为什么 Linux不使用这样的功能来降低由于TLB无效和缓存污染导致的性能下降? 注意:我不是Linux开发人员 对于英特尔的“进程上下文标识符”,限制为4096个ID.这意味着当有超过4096个进程需要管理它们(例如,可能会做一个“最近最少使用”的事情,以便如果当前没有ID的进程需要执行,那么该ID将从一些其他过程和重用). 另一件事就是多
我写了一个内核模块来检查CR4.PCIDE,它没有设置.为什么 Linux不使用这样的功能来降低由于TLB无效和缓存污染导致的性能下降?

解决方法

注意:我不是Linux开发人员

对于英特尔的“进程上下文标识符”,限制为4096个ID.这意味着当有超过4096个进程需要管理它们(例如,可能会做一个“最近最少使用”的事情,以便如果当前没有ID的进程需要执行,那么该ID将从一些其他过程和重用).

另一件事就是多cpu系统上的“TLB击落”.这些可能有点贵,所以人们做点技巧来避免它们.例如,如果一个进程只有一个线程,那么它只能在一个cpu上运行,并且您知道不需要向其他cpu发送IPI(中断它们并要求他们执行“TLB shotdown”).一旦你开始使用PCID,你就不能确定其他cpu还没有TLB条目,也不能做这些技巧来避免“TLB击倒”.这也意味着(理论上说,对于PCID支持不佳),您从PCID获得的性能可能会低于由于不必要的TLB拍摄和ID管理开销而损失的性能,导致净损失.

大多数我所说的是,添加对PCID的支持有点复杂(这不是你可以在CR4中设置一个标志,而是忘记它).你必须做一些研究(实验,原型,基准测试)来确定最有效的实现方法.对于一个大/复杂/旧的内核(如LinuX),它会变得更加复杂,因为你必须小心,不要意外地打扰别的东西.另一件事就是这个功能是比较新的(如果我记得正确的话,它只存在几年),并且很多cpu不支持(比如任何一个老一点,还有AMD的任何东西).

基本上,我认为它归结为“时间与效益”(或者,在有限数量cpu上没有足够的时间进行小的性能改进).

大佬总结

以上是大佬教程为你收集整理的缓存 – Linux是否使用x86 CPU的PCID功能进行TLB?如果没有,为什么?全部内容,希望文章能够帮你解决缓存 – Linux是否使用x86 CPU的PCID功能进行TLB?如果没有,为什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。