亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

誰執行TLB擊落?

誰執行TLB擊落?

小唯快跑啊 2021-04-03 18:19:40
我讀了這樣一個問題,描述了什么是TLB擊落。我試圖了解這是內核執行還是處理器執行的操作,還是兩者都執行?我的問題是:上下文切換時會發生TLB擊落嗎?我假設不會,因為需要能夠在多處理器CPU上同時執行多個進程。這個假設正確嗎?到底什么時候發生TLB擊落?誰執行實際的TLB擊落?是內核(如果是,在哪里可以找到執行刷新的代碼?)還是CPU(如果是,則觸發操作的原因)還是兩者(內核執行導致中斷的指令,依次導致CPU執行TLB擊落)
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

到底什么時候發生TLB擊落?


當操作系統或系統管理程序請求它時,就會發生這種情況。


在ISA級別,某些操作可以執行TLB擊落,從而使一個或多個本地或遠程TLB緩存中的一個或多個TLB條目無效(其他邏輯具有TLB并共享相同物理內存地址空間的同一CPU和所有其他類型的處理器的內核)。


還要注意,即使沒有任何退出的指令訪問任何頁面結構條目,也可以對其進行緩存。這可能是由于推測執行或MMU預取而發生的。因此,通常,任何條目都可以隨時緩存或無效。當然,給出了特定的保證,以便可以管理MMU高速緩存并使其與內存中的分頁結構保持一致。


誰執行實際的TLB擊落?是內核(如果是,在哪里可以找到執行刷新的代碼?)還是CPU(如果是,則觸發操作的原因)還是兩者(內核執行導致中斷的指令,依次導致CPU執行TLB擊落)


如前所述,CPU本身可以隨時使任何條目無效。此外,當前特權級別(CPL)= 0的軟件可以執行與TLB管理有關的任何操作。


Linux內核中的TLB無效介紹

Linux內核定義了與體系結構有關的TLB無效功能(/arch/x86/mm/tlb.c)和與體系結構有關的功能(/arch/x86/include/asm/tlbflush.h)。這是因為不同的體系結構為管理TLB提供了截然不同的機制。


enum tlb_flush_reason {


? ? // The memory descriptor structure mm of the current process is about to change.

? ? // This occurs when switching between threads of different processes.

? ? // Note that when mm changes, the ASID changes as well (CR3[11:0]).

? ? // I'd rather not discuss when context switches occur because it's a whole different topic.

? ? // TLB shootdown only occurs for the current logical core.

? ? // The kernel sometimes can optimize away TLB flushes on a process-context switch.

? ? TLB_FLUSH_ON_TASK_SWITCH,


? ? // Another logical core has sent a request to the current logical core

? ? // to perform a TLB shootdown on its TLB caches.

? ? // This occurs due to a KVM hypercall. See TLB_REMOTE_SEND_IPI.

? ? TLB_REMOTE_SHOOTDOWN,


? ? // Occurs when one or more pages have been recently unmapped.

? ? // Affects only the local TLBs.

? ? TLB_LOCAL_SHOOTDOWN,


? ? // This occurs when making changes to the paging structures.

? ? // Affects only the local TLBs.

? ? TLB_LOCAL_MM_SHOOTDOWN,


? ? // Occurs when the current logical core uses a KVM hypercall to request

? ? // from other logical cores to perform TLB shootdowns on their respective TLBs.

? ? TLB_REMOTE_SEND_IPI,


? ? // This equals to the number of reasons. Currently not used.

? ? NR_TLB_FLUSH_REASONS,

};

在其他情況下,內核會刷新TLB。很難列出完整的清單,而且我認為沒有人列出這樣的清單。


Linux內核實現了惰性TLB刷新技術。基本思想是,當修改進程的分頁結構時,內核會嘗試將TLB擊落延遲到該進程中的線程將被調度為在使用模式下執行的時間。


當前,Linux內核在需要時使用以下四種方法之一來刷新與當前邏輯內核關聯的TLB:


將CR3的當前值寫入CR3。盡管這不會更改CR3中的值,但它指示邏輯內核刷新所有具有與CR3中的PCID相同的PCID的非全局TLB條目。

禁用CR4.PGE,然后將CR4的當前值寫入CR4,然后重新啟用CR4.PGE。這具有刷新所有PCID和全局條目的所有TLB條目的效果。如果支持INVPCID,則不使用此方法。

使用INVPCID指令類型0使給定PCID和虛擬地址的TLB條目無效。

使用INVPCID指令類型2使所有TLB條目(包括全局變量和所有PCID)無效。

當前未使用其他類型的INVPCID。


相關:術語tlb downdown和tlb flush是否指的是同一件事。


除了軟件啟動的TLB條目無效之外,英特爾手冊第3卷第4.10.2.2節針對P6微體系結構和最新的微體系結構:


處理器不需要實現任何TLB。確實實現TLB的處理器可以隨時使任何TLB條目無效。軟件不應依賴于TLB的存在或TLB條目的保留。


據我所知,AMD手冊中沒有這樣的陳述。但是也無法保證TLB的整體保留率,因此我們可以得出與AMD處理器相同的結論。


查看完整回答
反對 回復 2021-04-16
  • 2 回答
  • 0 關注
  • 298 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號