CPU 性能優(yōu)化手段 - 緩存
為了避免 CPU 訪問主內(nèi)存的時間開銷膘掰,處理器會利用高速緩存來提高性能垮刹。
CPU 緩存模型:
多級緩存
L1 Cache (一級緩存) CPU第一級高速緩存,分為數(shù)據(jù)緩存和指令緩存坐榆,一般服務(wù)器 CPU 的緩存容量通常在32-4096KB
L2 Cache (二級緩存)為了突破一級緩存的容量限制涤垫,提高CPU的性能,CPU外部放置的高速存儲器厂抖。
L3 Cache (三級緩存)同理二級緩存,提高緩存的容量限制克懊,一般多核共享 L3 緩存忱辅,
CPU 優(yōu)先一級緩存查找數(shù)據(jù),逐級查找谭溉,最后到外置硬盤墙懂。
緩存協(xié)議
緩存協(xié)議為了處理多核 CPU 緩存數(shù)據(jù)一致性問題,在多核處理器中夜只,CPU 對緩存中的數(shù)據(jù)進(jìn)行修改垒在,需要通知其他 CPU蒜魄,同理扔亥,CPU 不但要處理緩存的讀寫,也要監(jiān)聽和通知替他CPU谈为,保證數(shù)據(jù)一致性旅挤。
MESI協(xié)議定義了四種緩存狀態(tài):
修改態(tài) (Modified)緩存內(nèi)容與主內(nèi)存不同,為此Cache專有
專有態(tài) (Exclutive)緩存內(nèi)容與主內(nèi)存相同伞鲫,并且僅出現(xiàn)在此 Cache 中
共享態(tài) (Shared) 緩存內(nèi)容與主內(nèi)存相同粘茄,同時出現(xiàn)在其他 Cache 中
無效態(tài) (Invalid)Cache 中內(nèi)存無效,需要從主內(nèi)存獲取
問題
CPU 緩存不是實時同步秕脓,因此在統(tǒng)一時刻柒瓣,各 CPU 看到的同一內(nèi)存地址的緩存數(shù)據(jù)可能出現(xiàn)不一致情況。
CPU 性能優(yōu)化手段 - 指令重排
CPU 處理寫緩存時可能出現(xiàn)緩存區(qū)塊被其他 CPU 占用吠架,為了提高性能芙贫,可能將后面的讀緩存優(yōu)先執(zhí)行。當(dāng)然傍药,指令重排不能影響程序的運(yùn)行結(jié)果磺平,不能對有數(shù)據(jù)依賴關(guān)系的只能進(jìn)行重排魂仍。
問題
在多 CPU 中 指令邏輯無法分辨因果關(guān)聯(lián),出現(xiàn)亂序執(zhí)行拣挪,影響執(zhí)行結(jié)果擦酌。
內(nèi)存屏障
寫內(nèi)存屏障 (Store Memory Barrier)指定命令強(qiáng)制寫入祝內(nèi)存,CPU 就不會因為考慮性能而對指令重排菠劝。能讓寫入緩存中的最新數(shù)據(jù)寫入主內(nèi)存赊舶,讓其他線程可見。
讀內(nèi)存屏障 (Read Memory Barrier)指定命令強(qiáng)制讀取主內(nèi)存闸英,讓緩存與主內(nèi)存一致锯岖,避免緩存不一致問題。能讓高速緩存中的數(shù)據(jù)失效甫何,強(qiáng)制從新獲取主內(nèi)存數(shù)據(jù)出吹。