閱讀225 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《計算機存儲與外設》----1.2 Cache存儲器的性能

本節書摘來自華章出版社《計算機存儲與外設》一書中的第1章,第2節,作者Computer Organization and Architecture: Themes and Variations[英]艾倫·克萊門茨(Alan Clements) 著,沈 立 肖曉強 王蘇峰 譯,更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

1.2 Cache存儲器的性能

在判斷加入Cache是否劃算之前,需要知道增加Cache對計算機性能會產生多大的影響。這裏首先介紹一個簡單的模型,忽略實際Cache係統的細節:每個係統的Cache都不完全一樣。特別是,該模型假定每個Cache項都為一個字寬,而實際Cache存放的是一個塊(包含若幹個字)。

Cache係統的主要參數就是命中率(hit ratio)h,它定義為所有訪問操作在Cache中命中的概率,由係統操作統計結果決定。訪問局部性的作用使得命中率通常較高,基本保持在98%左右。本章的後續部分將討論影響命中率的因素以及使h保持較高值的方法。

在計算Cache對處理器性能的影響之前,需要引入一些術語:
主存儲器訪問時間     tm
Cache訪問時間          tc
命中率                        h
失效率                        m
加速比                        S

加速比(speedup ratio)是沒有Cache時存儲係統的訪問時間與具有Cache時係統訪問時間的比值。對於N次訪存,如果沒有Cache,則總的訪問時間為Ntm。

對於N次訪存,如果有Cache,總訪問時間是N(htc+mtm)。失效率m,定義為m=1-h,因為訪問要麼命中要麼不命中。因此,具有Cache的係統的加速比為:

70d1e4baa647819fbf32013fa11e1a3a1c06ef38

該表達式假定所有操作均為訪存操作,這是不正確的,因為處理器也要完成內部操作。後麵還會談到這一點。如果不關心主存儲器和Cache的絕對速度的話,可以引入一個參數,k=tc/tm,它定義了Cache相對主存儲器的速度比例。由h和k定義的加速比為:

710ac29b7bec687b53255462cae1cb011df103b0
5152eb06e72dc99ee10b9d9fd8e92d242ca6725b

圖1-6顯示了當k=0.2時加速比S與命中率h的關係曲線。正如大家理解的那樣,當h=0時的加速比為1,因為所有訪存操作都訪問了主存儲器。當h=1時,所有訪存操作都在Cache中進行,因此加速比為1/k。

從圖1-6中得出的一個最重要的結論是,加速比對命中率敏感。隻有當h接近90%,Cache的性能影響才十分顯著。該結論與常識是一致的。如果h低於90%,訪問主存儲器的時間占較大比例,快速訪問Cache帶來的效果對係統性能的影響不大。

上述加速比S的公式適用於存儲器和Cache可並行工作的係統,因為它假定每個存儲周期開始時,同時(並行)訪問主存儲器和Cache;也就是,訪存地址同時交給Cache和主存儲器。如果命中,終止對主存儲器的訪問。如果Cache不響應,數據將從主存儲器中返回。

b4992f8b779dc1d46e4a97e615989da091eb8d5b

實際微處理器能夠獲得的加速比並不如上述公式得到的那樣樂觀。真實微處理器的操作速度由其時鍾周期、每個存儲器訪問所需時鍾周期數以及由於訪問存儲器而處於等待狀態的時間確定。加快Cache的速度並不如減少等待時間重要。即使使用十分快速的Cache,也不可能將訪存時間減少到比不包含等待狀態的一個總線周期還要短。

看看下麵這個例子。
微處理器的時鍾周期時間              10ns
每個總線周期所需最小時鍾周期數  3
存儲器訪問時間                             40ns
由於訪存帶來的等待時間         2個時鍾周期
Cache訪問時間                              10ns
由於訪問Cache帶來的等待狀態      0
這些數據表明,存儲器訪問需要(3個時鍾周期+ 2個等待狀態)×10ns=50ns,訪問Cache需要3×10ns=30ns。該計算過程並不包含主存儲器和Cache的實際訪問時間。加速比為:

96be0eead1f53a6cf0c6e0659d94ae646ac0afb3

假設平均命中率為95%,根據上式計算的加速比是1.61(即161%)。該結果比直接拿Cache和主存儲器的訪存時間來計算得到的結果(即2.46)要小。
以上公式省略了不需訪問存儲器的內部操作的影響。下麵看看德克薩斯儀器公司操作說明書中給出的既考慮非存儲器訪問操作又考慮訪問Cache和主存儲器中的數據時,微處理器的平均周期時間tact。

92d07e6e7cb67ed776ed34eab4201e1210be69b5
式中: Fint為處理內部操作指令所占比例(以70%為例); Fmem為訪存操作指令所占比例(以30%為例); tcyc為處理器的時鍾周期時間(以10ns為例); twait為由於Cache失效導致的等待時間(以50ns為例); tCache為Cache訪問時間(以5ns為例); h為命中率(以0.9為例)。 把給出的實際參數的例子代入公式計算,可得:
efa888b81710604033bad83e5cefcae1786b9a9c

即使是這個結果也沒有給出全部事實,因為實際係統不會一次僅在Cache和主存儲器間移動一個字的數據。Cache基本存儲單元的容量不隻是一個字,而是一塊(line),它通常包括4~64個字節。當發生失效時,從存儲器中會傳輸一塊數據到Cache。因此,失效開銷不僅僅是調入一個數據,而是包括一塊數據。

此時,也許可以對前麵提到的存儲牆進行討論。假設某係統以周期為單位的指令平均執行時間Timeavc為:

bfc1683c630ebfc31eddd889b330ebd9a6247873

式中,CPUuse表示非訪存指令所占比例(以80%為例);tCPU表示這類指令執行需要的時鍾周期數(假定為1);Memoryuse表示訪存指令所占比例;tmemory表示這類指令執行需要的時鍾周期數(假定為10)。如果命中率h為0.95,則:
Timeave = 0.80·1 + 0.20·0.95·1 + 0.20·(1-0.95)·10 = 0.80 + 0.19 + 0.10 = 1.09個周期

經過一段時間,處理器的速度提高10倍,Cache的速度提高5倍,DRAM的速度提高2倍。CPU、Cache與DRAM的訪問時間之比不再是1∶1:10,而是1∶2∶50。此時,
Timeave = 0.80·1 + 0.20·0.95·2 + 0.20·(1-0.95)·50 = 0.80 + 0.38 + 0.50 = 1.68個周期

假設第二種情況下,時鍾周期時間是第一種情況的1/10,加速比為10.9/1.68=6.488。這表明時鍾和CPU的速度快了10倍,而吞吐量隻增加了6倍。

如果考慮Cache的寫失效,可以重新審視Cache的性能。

8a41df475a88a4413aa403d87296474436ed6e32
f7e189df0be4dcb74b159613ae2af7396abbc9d3
637d495185ba1d2881bc11f564b22959a24d17de

最後更新:2017-05-24 18:31:11

  上一篇:go  阿裏雲數加(大數據)公開數據集(公測ing)
  下一篇:go  吳軍:你做的那些壞事,大數據全知道