C 有没有办法禁用特定块内存的mmu?

C 有没有办法禁用特定块内存的mmu?,c,linux,C,Linux,如果我们可以在不使用mmu的情况下访问某些块内存,而使用mmu访问其他内存,则可以获得良好的性能增益。我读过intelx86_64手册,却发现这项任务似乎不可能完成……或者我们可以在访问特定内存时解散mmu来工作 有人能告诉我答案吗?谢谢 简短回答:不,你不能 详细回答:您可以编写一个内核模块,将CPU切换到32位模式(如果处于64位模式)并禁用分页,同时保持保护模式。在此期间,您将只能运行纯计算,也就是说,不可能有任何输入/输出(包括联网)。(假设您希望能够将操作系统内核和其他正在运行的应用程

如果我们可以在不使用mmu的情况下访问某些块内存,而使用mmu访问其他内存,则可以获得良好的性能增益。我读过intelx86_64手册,却发现这项任务似乎不可能完成……或者我们可以在访问特定内存时解散mmu来工作


有人能告诉我答案吗?谢谢

简短回答:不,你不能


详细回答:您可以编写一个内核模块,将CPU切换到32位模式(如果处于64位模式)并禁用分页,同时保持保护模式。在此期间,您将只能运行纯计算,也就是说,不可能有任何输入/输出(包括联网)。(假设您希望能够将操作系统内核和其他正在运行的应用程序恢复到其原始状态,如果您希望能够保存计算结果,这基本上是必须的。)

简短回答:不,您不能



详细回答:您可以编写一个内核模块,将CPU切换到32位模式(如果处于64位模式)并禁用分页,同时保持保护模式。在此期间,您将只能运行纯计算,也就是说,不可能有任何输入/输出(包括联网)。(假设您希望能够将操作系统内核和其他正在运行的应用程序恢复到其原始状态,如果您希望能够保存计算结果,这基本上是必须的。)

什么让你认为禁用MMU会给你带来性能提升?请相信我:当你玩弄MMU时,你是在自找麻烦。@qbert220:TLB未命中的代价相当高。也就是说,更好的方法是使用大页面支持,而不是禁用分页。您是打算在没有操作系统的情况下使用大页面支持,还是打算使用?-1来寻找可怕的黑客进行过早优化。我很确定,与TLB未命中相比,性能问题的来源要大得多。是什么让你认为禁用MMU会提高性能?请相信我:当你玩弄MMU时,你是在自找无尽的麻烦。@qbert220:TLB未命中的成本相当高。也就是说,更好的方法是使用大页面支持,而不是禁用分页。您是打算在没有操作系统的情况下使用大页面支持,还是打算使用?-1来寻找可怕的黑客进行过早优化。我敢肯定,与TLB未命中相比,您有更大的性能问题来源。回答不错。而且没有TLB失误,因此没有处罚?实际上可能更简单!在多核系统上,你可以1)让内核分配连续的物理内存(可能是通过压缩),2)“窃取”操作系统的一个内核(如果操作系统支持热插拔,应该不会太难)并禁用它的分页,3)开始在该内核上运行代码。哈哈,我喜欢这些奇怪的用例。也许没有人做这些事情,但很高兴知道这是可能的。如果你呆在它的一级缓存中,你可以在这个内核上获得非常非常好的实时性能。事实上,我偶然看到一篇来自英特尔或微软的研究文章(不完全记得了),他们在一些性能测试中确实做到了这一点。它是在Windows NT上运行的。@Prof.Falken:如果您禁用了分页,那么请执行您的操作,然后再次启用分页;那么,您已经完全破坏了所有TLB,并且您可能会或可能不会(在分页关闭时)获得的性能增益与在重新打开分页后立即出现的“一切都是TLB未命中”的性能噩梦相比可能算不了什么。回答不错。而且没有TLB失误,因此没有处罚?实际上可能更简单!在多核系统上,你可以1)让内核分配连续的物理内存(可能是通过压缩),2)“窃取”操作系统的一个内核(如果操作系统支持热插拔,应该不会太难)并禁用它的分页,3)开始在该内核上运行代码。哈哈,我喜欢这些奇怪的用例。也许没有人做这些事情,但很高兴知道这是可能的。如果你呆在它的一级缓存中,你可以在这个内核上获得非常非常好的实时性能。事实上,我偶然看到一篇来自英特尔或微软的研究文章(不完全记得了),他们在一些性能测试中确实做到了这一点。它是在Windows NT上运行的。@Prof.Falken:如果您禁用了分页,那么请执行您的操作,然后再次启用分页;那么,您已经完全破坏了所有TLB,并且您可能会或可能不会(在分页关闭时)获得的性能增益与重新打开分页后立即出现的“一切都是TLB未命中”的性能噩梦相比可能是微不足道的。