隨著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 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...