天天看點

《現代體系結構上的UNIX系統:核心程式員的對稱多處理和緩存技術(修訂版)》——2.6 全相聯高速緩存

本節書摘來自異步社群《現代體系結構上的unix系統:核心程式員的對稱多處理和緩存技術(修訂版)》一書中的第2章,第2.6節,作者:【美】curt schimmel著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

在高速緩存内,組的大小可以增加到使組内的行數等于高速緩存内的全部行數。此時的高速緩存就稱為全相聯高速緩存(fully associative cache)。在全相聯高速緩存中隻有一組,它包含高速緩存中所有的行。不需要散列計算或者索引機制,因為隻有一組要檢查。采用任何n路組相聯高速緩存時,都是并行搜尋組内所有的高速緩存行。顧名思義,全相聯高速緩存在每次查找的時候都要在全部高速緩存内進行搜尋。

之是以需要全相聯高速緩存,是因為它能夠把高速緩存颠簸(thrashing)的現象減到最少,原因是在高速緩存中的任何位置都可以儲存資料的任何部分。于是,從理論上來說,如果一個程式具有局部引用性的地方小于或者等于高速緩存的大小,那麼它就會獲得100%的命中率,并從高速緩存得到最大可能的性能提升。

全相聯高速緩存建構起來要比同等大小、但每組行數較少的高速緩存成本高,因為必須并行搜尋高速緩存中的所有行。這就是全相聯高速緩存很少用于指令和資料的主要原因。在使用它們的時候,通常是小規模、有特殊用途且有高度時間局部性的高速緩存,比如轉換後備緩沖器(translation lookaside buffer,tlb)。tlb高速緩存最近在mmu内使用過虛拟位址到實體位址的轉換。小規模、全相聯的tlb比較實用,因為大多數程式都展現出了局部引用特性,這意味着工作集的轉換會被多次使用。此外,因為每一次轉換都映射了完整的一頁資料,是以隻需幾個轉換就能提供良好的性能。例如,ti microsparc使用一個有32項的全相聯tlb,而supersparc有64項。motorola 88200和所有mips處理器上的tlb也都是全相聯高速緩存。

繼續閱讀