從導理解Linux內核第三版,章8.2.10,板噴漆的Linux slab分配器和高速緩存性能
我們從第2章知道,相同的硬件高速緩存行映射的許多不同的塊內存。在這個 一章中,我們也看到相同大小的對象最終被存儲在緩存中相同的偏移處。 在相同的緩存行中,具有相同偏移量的對象在相對較高的概率下最終會映射到 。因此,高速緩存硬件可能浪費存儲器週期,將來自同一高速緩存行的兩個對象 來回傳送到不同的RAM位置,而其他高速緩存行未充分利用。 板坯分配器試圖通過稱爲板坯着色的策略來減少這種令人不快的緩存行爲:不同的 稱爲顏色的任意值被分配給板坯。
(1)我無法理解的是,板着色試圖解決這個問題。當正常進程訪問數據時,如果它不在緩存中並且遇到緩存未命中,則將數據與來自進程嘗試訪問的數據的超出地址的數據一起提取到緩存中以提升性能。情況如何發生,以便相同的特定緩存行不斷交換?一個進程持續訪問兩個不同存儲區的內存區域內相同偏移量的兩個不同數據地址的概率非常低。即使發生,緩存策略通常會根據某些議程(例如LRU,隨機等)選擇要交換的行。不存在根據被訪問地址的最低有效位中的匹配來選擇排除行的策略。
(2)我無法理解板坯着色,這需要自由字節從板坯開始,與第一個對象不同的偏移不同磚的結果到底如何,解決高速緩存交換問題?
[求助]小調查後我相信我找到了我的問題的答案。回覆已發佈。
讓我看看我是否正確理解你;考慮slab0切片地址0x0,0x20,0x40等。slab1切片地址0x8,0x28,0x48等。使用您提供的簡單緩存行,沒有緩存行會浪費,因爲沒有兩個地址會給出相同的結果嗎? – user2162550
閱讀了關於緩存策略和緩存組織後,我沒有看到你的答案如何匹配緩存基礎知識。根據許多可能的策略之一(例如LRU)選擇要交換的行,而不是根據地址的最低有效位的匹配來選擇,但是我找不到任何這樣做的策略。 – user2162550
@ user2162550:查找「虛假共享」和緩存。 –