英特尔Nehalem微架构三级缓存原理学习
英特爾Nehalem微架構(gòu)包含式(Inclusive)三級(jí)緩存體系架構(gòu):
注釋:包含式(inclusive)緩存指的是該緩存中包含低級(jí)緩存中的內(nèi)容。包含式三級(jí)緩存即在三級(jí)緩存中有著二級(jí)緩存數(shù)據(jù)的副本。與包含式相對(duì)立的是獨(dú)立式(exclusive)
Nehalem改進(jìn)了緩存子系統(tǒng)
? ? Nehalem微架構(gòu)的緩存子系統(tǒng)相比之前的Core 2架構(gòu)有了極大的變化,最重要的變革來自全新的三級(jí)緩存和二級(jí)頁表緩存。
Nehalem緩存結(jié)構(gòu)示意圖
? ? 一級(jí)緩存方面,每個(gè)核心依然是32KB指令緩存和32KB數(shù)據(jù)緩存,數(shù)據(jù)緩存依然是8路聯(lián)合設(shè)計(jì)。Nehalem二級(jí)緩存則大幅減小,而且不再是共享式。Nehalem每個(gè)核心擁有獨(dú)立的256KB二級(jí)緩存(即雙核處理器512KB、四核處理器1MB)。Nehalem的二級(jí)緩存擁有極低的潛伏期,不過暫時(shí)尚未有具體細(xì)節(jié),據(jù)稱不會(huì)超過12時(shí)鐘周期。Nehalem的二級(jí)緩存并未像以前的處理器那樣使用包含式(inclusive)設(shè)計(jì),二級(jí)緩存不再完整存儲(chǔ)一級(jí)緩存的內(nèi)容(事實(shí)上之前的二級(jí)緩存設(shè)計(jì)亦并非強(qiáng)制要求絕對(duì)inclusive,盡管多數(shù)時(shí)候?qū)嶋H上是完整包含),不過由于它們的cache line仍然相同,所以可以在同一核心內(nèi)進(jìn)行數(shù)據(jù)交換(非全速)。
? ? 注釋:緩存中的數(shù)據(jù)會(huì)被分成小段進(jìn)行存儲(chǔ),每一段就稱為一個(gè)cache line。不同的處理器會(huì)有不同大小的cache line,例如Core 2處理器的cache line均為64Byte。只有cache line相同的緩存之間才能交換數(shù)據(jù)。
? ? Nehalem的三級(jí)緩存采用了完全包含式(Full Inclusive)設(shè)計(jì)。
????所謂完全包含式三級(jí)緩存指的是該緩存中完全存儲(chǔ)了更低級(jí)別的緩存(一級(jí)和二級(jí))中的所有內(nèi)容。這樣的設(shè)計(jì)缺點(diǎn)是三級(jí)緩存需要消耗1MB多(即一級(jí)緩存和二級(jí)緩存之和)空間用于存儲(chǔ)一級(jí)和二級(jí)緩存中的數(shù)據(jù)。不過相比之下,低級(jí)緩存與獨(dú)立式三級(jí)緩存進(jìn)行數(shù)據(jù)交換的速度要比從包含式三級(jí)緩存中直接復(fù)制內(nèi)容慢得多。
獨(dú)立式最終級(jí)緩存會(huì)造成較多的snoop traffic
????由于三級(jí)緩存是最終級(jí)緩存,因此它采用包含式或者獨(dú)立式將會(huì)影響snoop traffic(偵查緩存數(shù)據(jù)所做的性能消耗)大小。若最終級(jí)緩存采用獨(dú)立式設(shè)計(jì),當(dāng)其未命中時(shí)處理器還要逐個(gè)檢查每個(gè)核心的獨(dú)享緩存中是否有所需數(shù)據(jù)。在極端情況下,處理器可能在所有緩存中都未找到所需數(shù)據(jù),此時(shí)開始從系統(tǒng)內(nèi)存調(diào)用數(shù)據(jù),這就造成了極大的效能損害。
包含式最終級(jí)緩存將snoop traffic最小化
????Nehalem采用完全包含式三級(jí)緩存作為最終級(jí)緩存就可以最大限度減少snoop traffic。因?yàn)槿?jí)緩存中有著其他緩存的數(shù)據(jù)副本,當(dāng)三級(jí)緩存中未找到數(shù)據(jù),則所有的一級(jí)和二級(jí)緩存中必然也不會(huì)有。系統(tǒng)此時(shí)無需再逐個(gè)檢索每個(gè)核心的獨(dú)享緩存,而是直接從系統(tǒng)內(nèi)存調(diào)用數(shù)據(jù)。
Nehalem所采用的MESIF緩存一致性協(xié)議
????此外,Nehalem的三級(jí)緩存命中成功時(shí),也可以扮演snoop filter的角色。盡管三級(jí)緩存中存儲(chǔ)了一級(jí)和二級(jí)緩存的數(shù)據(jù)備份,但從共享的三級(jí)緩存中調(diào)用數(shù)據(jù)總會(huì)比從獨(dú)享的一級(jí)和二級(jí)緩存中讀取數(shù)據(jù)慢得多。因此若一級(jí)和二級(jí)緩存中存在所需數(shù)據(jù),自然要優(yōu)先從它們中讀取。Nehalem支持MESIF緩存一致協(xié)議,在Nehalem三級(jí)緩存中的每一個(gè)cache line里,有4 bit空間(恰好針對(duì)4個(gè)核心)用來做核心確認(rèn),用于指示哪一個(gè)核心的獨(dú)享緩存里可能具有該cache line的備份。如果某個(gè)核心的確認(rèn)位為0,則那個(gè)核心就不大可能具有該cache line的數(shù)據(jù)備份。若有多個(gè)核心的確認(rèn)位均為1,則不會(huì)對(duì)其進(jìn)行任何操作。當(dāng)4個(gè)核心確認(rèn)位都是0時(shí),就不需要對(duì)核心獨(dú)享緩存做任何偵聽,處理器將直接調(diào)用三級(jí)緩存的數(shù)據(jù)。在僅有1個(gè)核心確認(rèn)位是有效時(shí),處理器才會(huì)偵聽那一個(gè)核心,從中讀取數(shù)據(jù)。完全包含式緩存和核心確認(rèn)位技術(shù)的聯(lián)合使用,使得snoop traffic可以大大減少。
轉(zhuǎn)載于:https://blog.51cto.com/muyunzhe/1625259
總結(jié)
以上是生活随笔為你收集整理的英特尔Nehalem微架构三级缓存原理学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery 插件闭包
- 下一篇: 微软职位内部推荐-SDEII_ ECO