如果我們可以在不使用mmu的情況下訪問某些塊存儲器,而使用mmu訪問其他存儲器時,可以獲得良好的性能增益。我已經閱讀了intelx86_64手冊,只是發現這個任務似乎是不可能的......或者也許我們可以在訪問特定內存時使mmu工作?是否有一種方法可以禁用特定塊存儲器的mmu?
有人能告訴我答案嗎?謝謝!
如果我們可以在不使用mmu的情況下訪問某些塊存儲器,而使用mmu訪問其他存儲器時,可以獲得良好的性能增益。我已經閱讀了intelx86_64手冊,只是發現這個任務似乎是不可能的......或者也許我們可以在訪問特定內存時使mmu工作?是否有一種方法可以禁用特定塊存儲器的mmu?
有人能告訴我答案嗎?謝謝!
簡答:不,你不能。
長的答案:您可以編寫一個內核模塊,將CPU切換到32位模式(如果在64位模式下)並禁用分頁,同時保持保護模式。在此期間,您只能運行純粹的計算,即不可能有輸入/輸出(包括網絡)。 (假定您希望能夠將操作系統內核和其他正在運行的應用程序恢復到原始狀態,如果您希望能夠保存計算結果,這本質上是必需的。)
好的答案。而且沒有TLB缺失,因此沒有處罰? – 2011-03-21 10:47:41
它可能更簡單!在一個多核系統上,你可以1)讓內核分配連續的物理內存(可能通過壓縮),2)從操作系統「竊取」一個內核(如果操作系統支持熱插拔,應該不會太難),並禁用分頁,3)開始運行該核心上的代碼。 – zvrba 2011-03-21 17:44:36
哈哈,我喜歡這些奇怪的用例。可能沒有人做這些事情,但很高興知道這可能是可能的。如果您留在L1緩存中,您可以在該內核上獲得真正非常好的實時性能。 – 2011-03-22 07:45:30
是什麼讓您覺得禁用MMU會給你一個性能增益? – qbert220 2011-03-21 10:31:42
請相信我:當你與MMU混爲一談時,你正在尋求無盡的麻煩。 – 2011-03-21 10:34:59
@ qbert220:TLB失誤相當昂貴。也就是說,更好的方法是使用大頁面支持,而不是禁用分頁。 – zvrba 2011-03-21 10:46:09