我們知道緩存使用虛擬地址。那麼,當涉及多個進程時,特別是共享高速緩存(如共享L2高速緩存),甚至是本地L1高速緩存,進程切換時(如同時(超)多線程),這可以如何工作?兩個不同的進程在同一個物理內核上運行。當涉及不同進程的線程時,超線程是否有用,或者只有在涉及同一進程的線程時才能提升性能?緩存是否可以保留多個進程的數據?
回答
沒有一個主要的x86 CPU微架構使用虛擬緩存。它們都使用虛擬索引/物理標記(VIPT)L1高速緩存。 VIPT是一種性能破解,允許從TLB查找中並行提取一個集合中的標籤。
用作索引的地址位在物理地址和虛擬地址中是相同的。 (即它們是4k頁面內偏移的一部分,所以它們不需要由TLB翻譯)。這意味着它的行爲與phys/phys(PIPT)緩存完全相同,避免了虛擬尋址的所有問題。
這可以通過保持緩存小並且有足夠的方式來實現。英特爾的L1高速緩存是32kiB,8路相關性,64B線。這佔所有的頁內地址位。 (請參閱其他資源的圖表和更詳細的解釋。)
超線程工作正常,單獨進程,因爲x86 CPU避免高速緩存別名(同義/同音異名問題)。他們像物理地址緩存一樣工作。儘管如此,兩個不共享任何內存的內存密集型進程在超線程運行時可能會比慢運行速度慢。如果這是一個選項,高速緩存的競爭性共享可能比在另一個完成之後運行一個進程更糟糕。
對於超線程資源以外的其他資源瓶頸的進程,HT肯定有幫助。例如與分支mispredicts。由於對無法預知的大型工作集的訪問導致緩存未命中,這種情況在沒有超線程的情況下仍會經常丟失。使用的virt /緩存的virt
的CPU做需要它們無效的上下文切換,或者有額外的標籤來跟蹤它的PID他們的。這就像現在的緩存支持虛擬化一樣:它們使用虛擬機ID進行標記,因此他們知道虛擬機的物理地址。 virt/virt L1意味着你不需要一個快速的TLB:它只需要在L1未命中時使用,因此L1緩存也可以緩存轉換。
一些設計必須使用phys/phys L1,但我不知道任何具體的例子。 virt/phys技巧在高性能CPU中很常見,因爲有足夠的方法使L1成爲可能的L1無論如何只是一個好主意。
請注意,只有L1曾使用virt地址。 Big L2 and L3 caches are always phys/phys。
其他鏈接:
http://www.realworldtech.com/forum/?threadid=76592&curpostid=76600這整個線程進入了一堆細節和關於緩存的問題的。 David Kanter的帖子傾向於以可讀的方式解釋事情。我沒有讀完整篇文章。 RWT論壇現在可以搜索!所以如果你有更多的細節,你可能會看到多年來的論壇主題。
Paul Clayton explains why phys-idx/virt-tag (PIVT) is such a bad idea that nobody would ever build one:它有沒有任何優勢的虛擬緩存的缺點。 (Wikipedia says that MIPS r6000 is the only known implementation),並給出了極其深奧的原因:即使TLB在發射器耦合邏輯中實現的太大,因此它們實現TLB切片以僅轉換物理索引的足夠位數。鑑於此限制,PIPT和VIPT不是選擇,他們決定去,而不是VIVT PIVT。
Another very-detailed answer from Paul Clayton about caches。
- 1. 是否可以保存多個Wake Locks?
- 2. 是否可以保存/檢索webview緩存中的特定數據?
- 3. Yii - 數據庫依賴性緩存是否可以跨多個操作工作?
- 4. 是否可以保存數據庫查詢的結果以通過多個HTTPRequest進行分配?
- 5. 是否可以保留個人numpy的陣列的數據類型與級聯
- 6. 根據drupal 8中的語言,是否可以有多個緩存條目?
- 7. Microsoft.Data.Services.Client是否緩存數據?
- 8. 是否有一個數據結構可以保存.NET中的數據集?
- 9. 使用插入命令參數時,是否可以保留一些文本框以保存數據
- 10. 保留超過1個PID,所以我可以殺進程後
- 11. ASP.Net MVC - 是否可以在將數據放入緩存之前進行gzip
- 12. SNS是否保留我的數據?
- 13. 子進程是否可以修改父進程的內存?
- 14. https內容是否可以緩存在CDN數據中心?
- 15. 查詢後SSAS緩存保留多久?
- 16. 是否有可能到多個數據保存到數據庫列
- 17. 是否可以保存來自Crystal子報表的數據
- 18. SpreadsheetGear WorkbookView中可以保存的數據量是否有限制?
- 19. 是否可以保存從iPhone錄製的語音數據?
- 20. glUniform * fv是否保留了緩衝區?
- 21. 是否可以移動整個文件夾目錄,同時保留註冊數據和程序數據?
- 22. VBA是否保留過去的代碼更改緩存?
- 23. 是否可以使用omniauth-facebook rails gem保存多個用戶?
- 24. 緩存是否可以提高性能?
- 25. 是否可以緩存MTLLibrary或MTLFunction?
- 26. 是否可以訪問WebView緩存?
- 27. 是否可以緩存動態網頁?
- 28. iOS - 是否可以緩存CGContextDrawImage?
- 29. 是否可以緩存視頻? IOS - Swift
- 30. 是否可以查詢谷歌緩存
確定的x86高速緩存使用虛擬地址?[這](http://stackoverflow.com/questions/19039280/物理或虛擬尋址被使用在處理器-X86-x86-64-for-c-in-t)答案說不同的是,IMO。 – Downvoter
這是特定的體系結構如果緩存是虛擬索引/物理標記完全沒有問題。兩個不同的線程可以使用相同的虛擬地址進行查找,但只有具有匹配物理地址的進程纔會受到打擊。 – 4386427
這種高級抽象結構和低級真實機制的混合不可能產生一個有意義的問題。 – SergeyA