第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

誰執(zhí)行TLB擊落?

誰執(zhí)行TLB擊落?

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

2 回答

?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗 獲得超4個贊

到底什么時候發(fā)生TLB擊落?


當(dāng)操作系統(tǒng)或系統(tǒng)管理程序請求它時,就會發(fā)生這種情況。


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


還要注意,即使沒有任何退出的指令訪問任何頁面結(jié)構(gòu)條目,也可以對其進(jìn)行緩存。這可能是由于推測執(zhí)行或MMU預(yù)取而發(fā)生的。因此,通常,任何條目都可以隨時緩存或無效。當(dāng)然,給出了特定的保證,以便可以管理MMU高速緩存并使其與內(nèi)存中的分頁結(jié)構(gòu)保持一致。


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


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


Linux內(nèi)核中的TLB無效介紹

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


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,

};

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


Linux內(nèi)核實現(xiàn)了惰性TLB刷新技術(shù)?;舅枷胧?,當(dāng)修改進(jìn)程的分頁結(jié)構(gòu)時,內(nèi)核會嘗試將TLB擊落延遲到該進(jìn)程中的線程將被調(diào)度為在使用模式下執(zhí)行的時間。


當(dāng)前,Linux內(nèi)核在需要時使用以下四種方法之一來刷新與當(dāng)前邏輯內(nèi)核關(guān)聯(lián)的TLB:


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

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

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

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

當(dāng)前未使用其他類型的INVPCID。


相關(guān):術(shù)語tlb downdown和tlb flush是否指的是同一件事。


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


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


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


查看完整回答
反對 回復(fù) 2021-04-16
  • 2 回答
  • 0 關(guān)注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號