CPU緩存和內(nèi)存屏障

CPU性能優(yōu)化手段 - 緩存

為了提高程序的運行性能, 現(xiàn)代CPU在很多方面對程序進行了優(yōu)化
例如: CPU高速緩存, 盡可能的避免處理器訪問主內(nèi)存的時間開銷, 處理器大多會利用緩存以提高性能

img

多級緩存

L1 Cache (一級緩存)是CPU第一層高速緩存, 分為數(shù)據(jù)緩存和指令緩存, 一般服務(wù)器CPU的L1緩存的容量通常在32-4096kb
L2 Cache (二級緩存) 由于L1高速緩存的容量限制, 為了再次提高CPU的運算速度, 在CPU外部放置一高速緩存存儲器, 即二級緩存
L3 Cache(三級緩存)現(xiàn)在都是內(nèi)置的, 而它的實際作用既是, L3緩存的應(yīng)用可以進一步降低內(nèi)存延遲, 同時提升大數(shù)據(jù)量計算時處理器的性能. 具有較大L3緩存的處理器更有效的文件系統(tǒng)緩存行為及較短消息和處理器隊列長度. 一般是多核共享一個L3緩存

CPU在讀取數(shù)據(jù)時, 先在L1中尋找, 再從L2中尋找, 再從L3中尋找, 然后是內(nèi)存, 最后是外存儲器

緩存同步協(xié)議

多CPU讀取同樣的數(shù)據(jù)進行緩存, 進行不同運算之后, 最終寫入主內(nèi)存以那個CPU為準(zhǔn)? 在這種高速緩存回寫的場景下, 有一個緩存一致性協(xié)議, 多數(shù)CPU廠商對它進行了實現(xiàn).
即MESI協(xié)議, 它規(guī)定每條緩存有個狀態(tài)位, 同時定義了下面四種狀態(tài):

  • 修改態(tài)(Modified) 此cache行已被修改過(臟行), 內(nèi)容已不同于主內(nèi)存, 為此cache專有
  • 專有態(tài)(Exclusive) 此cache行同于主存, 但它不出現(xiàn)于其他cache中
  • 共享態(tài)(Shared) 此cache行同于主存, 但也出現(xiàn)于其他cache中
  • 無效態(tài)(Invalid) 此cache行無效(空行)

多處理時, 單個CPU對緩存中的數(shù)據(jù)進行了改動, 需要通知給其他CPU, 也就意味著, CPU處理要控制自己的讀寫操作, 還要監(jiān)聽其他CPU發(fā)出的通知, 從而保證最終一致

CPU性能優(yōu)化手段 - 運行時指令重排

img

指令重排的場景: 當(dāng)CPU寫緩存時發(fā)現(xiàn)緩存區(qū)塊正被其它CPU占用, 為了提高CPU處理性能, 可能將后面的讀緩存命令優(yōu)先執(zhí)行.
當(dāng)然也并非隨便重排, 需要遵循as-if-serial語義
as-if-serial語義的意思指: 不管怎么重排序, 程序的執(zhí)行結(jié)果不能被改變
編譯器, runtime和處理器都必須遵守as-if-serial語義, 也就是說, 編譯器和處理器不會對存在數(shù)據(jù)依賴關(guān)系的操作做重排序

兩個問題

  1. CPU高速緩存下有一個問題:
    緩存中的數(shù)據(jù)與主內(nèi)存的數(shù)據(jù)并不是實時同步的, 各CPU間緩存的數(shù)據(jù)也不是實時同步. 在同一時間點, 各CPU所看到的同一內(nèi)存地址的數(shù)據(jù)的值可能是不一致的.

  2. CPU執(zhí)行指令重排序優(yōu)化的一個問題:
    雖然遵守了as-if-serial語義, 但僅在單CPU自己執(zhí)行的情況下能保證結(jié)果正確. 多核多線程中, 指令邏輯無法分辨因果關(guān)聯(lián), 可能出現(xiàn)亂序執(zhí)行, 導(dǎo)致程序運行結(jié)果錯誤

解決方法 - 內(nèi)存屏障

處理器提供了兩個內(nèi)存屏障指令(Memory Barrier)用于解決上述兩個問題:
寫內(nèi)存屏障(Store Memory Barrier): 在指令后插入Store Barrier, 能讓寫入緩存中的最新數(shù)據(jù)更新寫入主內(nèi)存, 讓其他線程可見
強制寫入主內(nèi)存, 這種顯示調(diào)用, CPU就不會因為性能考慮而進行指令重排

讀內(nèi)存屏障(Load Memory Barrier): 在指令前插入Load Barrier, 可以讓高速緩存中的數(shù)據(jù)失效, 強制從新從主內(nèi)存讀取數(shù)據(jù)
強制讀取主內(nèi)存內(nèi)容, 讓CPU緩存和主內(nèi)存保持一致, 避免了緩存導(dǎo)致的一致性問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冻押,一起剝皮案震驚了整個濱河市驰贷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洛巢,老刑警劉巖括袒,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稿茉,居然都是意外死亡锹锰,警方通過查閱死者的電腦和手機类垦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來城须,“玉大人蚤认,你說我怎么就攤上這事「夥ィ” “怎么了砰琢?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長良瞧。 經(jīng)常有香客問我陪汽,道長,這世上最難降的妖魔是什么褥蚯? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任挚冤,我火速辦了婚禮,結(jié)果婚禮上赞庶,老公的妹妹穿的比我還像新娘训挡。我一直安慰自己,他們只是感情好歧强,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布澜薄。 她就那樣靜靜地躺著,像睡著了一般摊册。 火紅的嫁衣襯著肌膚如雪肤京。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天茅特,我揣著相機與錄音忘分,去河邊找鬼。 笑死白修,一個胖子當(dāng)著我的面吹牛妒峦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熬荆,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舟山,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卤恳?” 一聲冷哼從身側(cè)響起累盗,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎突琳,沒想到半個月后若债,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡拆融,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年蠢琳,在試婚紗的時候發(fā)現(xiàn)自己被綠了啊终。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡傲须,死狀恐怖蓝牲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泰讽,我是刑警寧澤例衍,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站已卸,受9級特大地震影響佛玄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜累澡,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一梦抢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愧哟,春花似錦奥吩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至望几,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萤厅,已是汗流浹背橄抹。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惕味,地道東北人楼誓。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像名挥,于是被迫代替她去往敵國和親疟羹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容