效能優化之cache

2021-08-07 05:52:56 字數 1345 閱讀 3115

隨著cpu的頻率不斷提公升,而記憶體的訪問速度卻沒有質的突破,為了彌補訪問記憶體的速度慢,充分發揮cpu的計算資源,提高cpu整體吞吐量,在cpu與記憶體之間引入了一級cache。隨著熱點資料體積越來越大,一級cache l1已經不滿足發展的要求,引入了二級cache l2,**cache l3cpu cache在儲存器層次結構中的示意如下圖:

計算機早已進入多核時代,軟體也越來越多的支援多核執行。乙個處理器對應乙個物理插槽,多處理器間通過qpi匯流排相連。乙個處理器包含多個核,乙個處理器間的多核共享l3 cache。乙個核包含暫存器、l1 cache、l2 cache,下圖是intel sandy bridge cpu架構,乙個典型的numa多處理器結構:

多核之間為保持資料的一致性,提出了mesi協議。

單核cache中每個cache line有2個標誌:dirty和valid標誌,它們很好的描述了cache和memory(記憶體)之間的資料關係(資料是否有效,資料是否被修改),而在多核處理器中,多個核會共享一些資料,mesi協議就包含了描述共享的狀態。

在mesi協議中,每個cache line有4個狀態,可用2個bit表示,它們分別是: 

狀態描述

m(modified)

這行資料有效,資料被修改了,和記憶體中的資料不一致,資料只存在於本cache中。

e(exclusive)

這行資料有效,資料和記憶體中的資料一致,資料只存在於本cache中。

s(shared)

這行資料有效,資料和記憶體中的資料一致,資料存在於很多cache中。

i(invalid)

這行資料無效。

mesi狀態

m(modified)和e(exclusive)狀態的cache line,資料是獨有的,不同點在於m狀態的資料是dirty的(和記憶體的不一致),e狀態的資料是clean的(和記憶體的一致)。

s(shared)狀態的cache line,資料和其他core的cache共享。只有clean的資料才能被多個cache共享。

i(invalid)表示這個cache line無效。

e狀態示例如下:

e狀態只有core 0訪問變數x,它的cache line狀態為e(exclusive)。

s狀態示例如下:

s狀態3個core都訪問變數x,它們對應的cache line為s(shared)狀態。

m狀態和i狀態示例如下:

m狀態和i狀態

core 0修改了x的值之後,這個cache line變成了m(modified)狀態,其他core對應的cache line變成了i(invalid)狀態。

Arm核920T效能優化之Cache

文件整理自arm system developer s guide 程式在執行過程中會頻繁的執行小範圍的迴圈 而這些迴圈又會對資料儲存器的區域性區域反覆訪問。cache同時使用了時間和空間的區域性性原理。如果對儲存器的訪問受時間影響,在時間上有連續性,則這種時間上密集的訪問被稱為時間區域性性訪問 如...

效能優化之PHP優化

1.使用apache下的ab工具進行效能測試 測試 ab n100 c100 請求100次,併發量是100 關注兩個量 requests per second 每秒請求數 和time per request 平均響應時間 2.盡量使用php內建變數,常量,函式,原因 php 需要經過zend引擎獨行...

python 之效能優化

類似 os.linesep 這樣的名字需要直譯器做兩次查詢 1 查詢os 以確認它是乙個模組,2 在這個模組中查詢 linesep 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...