簡體   English   中英

TLB 是否包含在內?

[英]Is TLB inclusive?

現代 x86 CPU(例如 Skylake 或其他 Lakes)是否包含 TLB 層次結構?

例如, prefetchtn將數據帶入級別緩存n + 1以及 DTLB 中的相應 TLB 條目。 它也會包含在 STLB 中嗎?

AFAIK,在英特爾 SnB 系列 2 級 TLB 上是一級 iTLB 和 dTLB 的受害者緩存。 (我在最初閱讀它的地方找不到這個和 IDK 的來源。所以請謹慎對待。我原本以為這是一個眾所周知的事實,但這可能是我發明的一個誤解!)

我認為這在英特爾的優化手冊中的某處有記錄,但似乎沒有。

如果這是正確的,那么在條目從 dTLB 中逐出后一段時間后,您將獲得基本相同的好處,但不會在重復條目上浪費空間。

因此,例如,如果您將代碼和數據保存在同一頁面中,則在執行代碼時可能會出現 iTLB 未命中,然后在 STLB 中也未命中的 dTLB 未命中,如果該代碼從同一頁面加載數據,則會執行另一個頁面遍歷. (這是因為我們不將只讀數據與 x86 上的代碼保存在同一頁面中;它沒有代碼大小優勢,並且由於在兩個 TLB 中具有相同的頁面而浪費了 iTLB + dTLB 覆蓋范圍。)


但也許我錯了; Travis (@BeeOnRope) 建議使用數據預取來降低 iTLB 未命中成本; 他假設 page walker 填充了 STLB 和 dTLB 中的條目。 (在 Core 2(?) 及更高版本上,TLB-miss software-prefetch 可以觸發 walk 而不是放棄。)

我認為 L2 預取對於否則會錯過 DRAM 的代碼可能非常有效。 是的,您不會加熱 ITLB 或 L1I,但會加熱 L2 和 STLB,因此第一次執行需要十幾個周期。

這適用於九個STLB 它實際上不必是包容性的,只是不是排他性的或受害者緩存。 (例如,L2 緩存是 NINE wrt。L1i 緩存和 L1d 緩存。它們通過它獲取,但是可以從 L2 中逐出行而不強制從任一 L1 緩存中逐出。)


更多詳細信息與來源鏈接:


核心 2 不同: https://www.realworldtech.com/nehalem/8/說它有一個很小的 16 入口 L1dTLB 僅用於負載,並使用 L2 DTLB 進行存儲以及 L1dTLB 未命中負載。

Nehalem 改變了這一點(64 項 DTLB),同時將 memory 層次結構重組為仍在客戶端(非服務器)芯片上使用的內容:大型共享包容性 LLC 和 256k 私有 L2。 (當然仍然是通常的拆分 32k L1i/d) intel core i7 處理器中使用了哪種緩存映射技術?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM