最簡(jiǎn)單的高速緩存的配置俏竞,數(shù)據(jù)的讀取和存儲(chǔ)都經(jīng)過(guò)高速緩存,CPU核心與高速緩存有一條特殊的快速通道踪蹬;主存和高速緩存都連在系統(tǒng)總線上胞此,這條總線還用于其他組件的通信。
高速緩存出現(xiàn)不久跃捣,系統(tǒng)變得越來(lái)越復(fù)雜漱牵,高速緩存與主存之間的速度差異被拉大,直到加入了另一級(jí)緩存疚漆,新加入的這級(jí)緩存比第一緩存更大酣胀,而且更慢,而且經(jīng)濟(jì)上不合適娶聘,所以有了二級(jí)緩存闻镶,甚至是三級(jí)緩存。
一丸升、為什么需要CPU cache铆农?
CPU的頻率太快了,快到主存跟不上狡耻,這樣在處理器時(shí)鐘周期內(nèi)墩剖,CPU常常需要等待主存,浪費(fèi)資源夷狰,所 以cache的出現(xiàn)岭皂,是為了緩解CPU和內(nèi)存之間速度的不匹配問(wèn)題(結(jié)構(gòu):cpu->cache->memort)
二、CPU cache有什么意義沼头?
1爷绘、時(shí)間局部性:如果某個(gè)數(shù)據(jù)被訪問(wèn),那么在不久的將來(lái)他很可能被再次訪問(wèn)
2进倍、空間局部性:如果某個(gè)數(shù)據(jù)被訪問(wèn)土至,那么與他相鄰的數(shù)據(jù)很快也可能被訪問(wèn)
三、緩存一致性(MESI)
CPU中每個(gè)緩存行使用四種狀態(tài)進(jìn)行標(biāo)記
M:Modified 修改
指的是該緩存行只被緩存在該CPU緩存中猾昆,并且是被修改過(guò)的毙籽,因此他與主存的數(shù)據(jù)是不一致的,該緩存行中的數(shù)據(jù)需要在未來(lái)的某個(gè)時(shí)間點(diǎn)(允許其他CPU讀取主存相應(yīng)的內(nèi)容之前)寫回主存毡庆,然后狀態(tài)變成E(獨(dú)享)坑赡。
E :Exclusive 獨(dú)享
緩存行只被緩存在該CPU的緩存中烙如,是未被修改過(guò)的,與主存的數(shù)據(jù)是一致的毅否,可以在任何時(shí)刻當(dāng)有其他CPU讀取該內(nèi)存時(shí)亚铁,變成S(共享)狀態(tài),當(dāng)CPU修改緩存行的內(nèi)容時(shí)螟加,變成M(修改)的狀態(tài)徘溢。
S :Share 共享
意味著該緩存行可能被多個(gè)CPU進(jìn)行緩存,并且該緩存中的數(shù)據(jù)與主存數(shù)據(jù)是一致的捆探,當(dāng)有一個(gè)CPU修改該緩存行時(shí)然爆,其他CPU是可以被作廢的,變成I(無(wú)效的)黍图。
I :Invalid 無(wú)效的
對(duì)應(yīng)的四個(gè)操作
local read:讀本地緩存
local write:寫本地緩存
remote read:將內(nèi)存中的數(shù)據(jù)讀取過(guò)來(lái)
remote write:將數(shù)據(jù)寫回主存
緩存一致性
為了達(dá)到數(shù)據(jù)訪問(wèn)的一致曾雕,需要各個(gè)處理器在訪問(wèn)緩存時(shí)遵循一些協(xié)議,在讀寫時(shí)根據(jù)協(xié)議來(lái)操作助被,常見的協(xié)議有MSI剖张,MESI,MOSI等揩环。我們介紹其中最經(jīng)典的MESI協(xié)議搔弄。
在MESI協(xié)議中,每個(gè)cache line有4個(gè)狀態(tài)丰滑,可用2個(gè)bit表示顾犹,它們分別是
狀態(tài) 描述
M(Modified) 這行數(shù)據(jù)有效,數(shù)據(jù)被修改了褒墨,和內(nèi)存中的數(shù)據(jù)不一致炫刷,數(shù)據(jù)只存在于本Cache中。
E(Exclusive) 這行數(shù)據(jù)有效貌亭,數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)一致,數(shù)據(jù)只存在于本Cache中认臊。
S(Shared) 這行數(shù)據(jù)有效圃庭,數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)一致,數(shù)據(jù)存在于很多Cache中失晴。
I(Invalid) 這行數(shù)據(jù)無(wú)效
E剧腻、狀態(tài)
只有Core 0訪問(wèn)變量x,它的Cache line狀態(tài)為E(Exclusive)
S涂屁、狀態(tài)
3個(gè)Core都訪問(wèn)變量x书在,它們對(duì)應(yīng)的Cache line為S(Shared)狀態(tài)
M狀態(tài)和I狀態(tài)
Core 0修改了x的值之后,這個(gè)Cache line變成了M(Modified)狀態(tài)拆又,其他Core對(duì)應(yīng)的Cache line變成了I(Invalid)狀態(tài)