3. CCIX協(xié)議層(續(xù))
3.3 一致性協(xié)議
3.3.1 緩存狀態(tài)
CCIX協(xié)議規(guī)定的緩存狀態(tài)如下:
I(Invalid):緩存行無(wú)效,即緩存行不存在于緩存中。
UC(Unique Clean):緩存行的狀態(tài)是唯一且“干凈”,即緩存行只存在當(dāng)前緩存中,且緩存行沒(méi)有被修改過(guò)。擁有該緩存行的處理器可以在不通知其它緩存的情況下修改此緩存行。當(dāng)前緩存接收到監(jiān)聽(tīng)消息時(shí),如果DataRet(Data Return to Source)字段被置為1,可以(但不要求)返回該條緩存行數(shù)據(jù);如果DataRet字段被置為0,不可以返回該條緩存行數(shù)據(jù)。
UCE(Unique Clean Empty):緩存行只在當(dāng)前緩存中存在,緩存行處于唯一狀態(tài),但所有數(shù)據(jù)字節(jié)均無(wú)效。擁有該緩存行的處理器可以在不通知其它緩存的情況下修改緩存行。當(dāng)前緩存接收到請(qǐng)求數(shù)據(jù)的監(jiān)聽(tīng)消息時(shí),不可以返回該條緩存行(因?yàn)樗袛?shù)據(jù)無(wú)效)。
UD(Unique Dirty):緩存行的狀態(tài)是唯一但為“臟“,即緩存行只在當(dāng)前緩存中存在,但是緩存行數(shù)據(jù)被修改過(guò),且沒(méi)有更新到內(nèi)存。當(dāng)該緩存行被逐出(eviction)時(shí),必須寫(xiě)回下一級(jí)緩存或內(nèi)存。擁有該緩存行的處理器以在不通知其它緩存的情況下修改緩存行數(shù)據(jù)。當(dāng)前緩存接收到請(qǐng)求數(shù)據(jù)的監(jiān)聽(tīng)消息時(shí),必須返回該緩存行數(shù)據(jù)。
UDP(Unique Dirty Partial):緩存行的狀態(tài)是唯一但是部分為“臟“,即緩存行只在當(dāng)前緩存中存在,緩存行是唯一的,但是緩存行的僅有一部分?jǐn)?shù)據(jù)有效且“臟”。當(dāng)該緩存行被逐出(eviction)時(shí),必須將其與下一級(jí)緩存或內(nèi)存中的數(shù)據(jù)合并,以形成完整的有效緩存行。擁有該緩存行的處理器以在不通知其它緩存的情況下修改緩存行數(shù)據(jù)。當(dāng)前緩存接收到請(qǐng)求數(shù)據(jù)的監(jiān)聽(tīng)時(shí),必須返回該緩存行數(shù)據(jù)。僅當(dāng)接口支持部分緩存狀態(tài)(Partial Cache States)時(shí),才支持此緩存行狀態(tài)。
SC(Shared Clean):緩存行的狀態(tài)是不唯一且“干凈”,即在其它緩存中可能有該緩存行的副本,且緩存行數(shù)據(jù)可能被修改過(guò),但是在當(dāng)前緩存中是“干凈“的。當(dāng)該緩存行在當(dāng)前緩存中被逐出(eviction)時(shí),當(dāng)前緩存不需要將此緩存行數(shù)據(jù)寫(xiě)回內(nèi)存。當(dāng)前緩存只有在無(wú)效(invalidate)此緩存行其它緩存中的副本,并取得此緩存行的唯一所有權(quán)后,才能修改此緩存行數(shù)據(jù)。當(dāng)前緩存接收到請(qǐng)求數(shù)據(jù)的監(jiān)聽(tīng)時(shí),不可以返回緩存行數(shù)據(jù)。
SD(Shared Dirty):緩存行的狀態(tài)是不唯一且“臟”。其它緩存中可能有該緩存行的副本,緩存行數(shù)據(jù)被修改過(guò)。當(dāng)該緩存行被逐出(eviction)時(shí),必須寫(xiě)回下一級(jí)緩存或內(nèi)存。當(dāng)前緩存只有在無(wú)效(invalidate)此緩存行其它緩存中的副本,并取得此緩存行的唯一所有權(quán)后,才能修改此緩存行數(shù)據(jù)。當(dāng)前緩存接收到請(qǐng)求數(shù)據(jù)的監(jiān)聽(tīng)時(shí),必須返回緩存行數(shù)據(jù)。
3.3.2 請(qǐng)求類(lèi)型(Request Type)
CCIX協(xié)議中的請(qǐng)求分為以下四類(lèi):
讀請(qǐng)求:需要返回一個(gè)數(shù)據(jù)響應(yīng)給請(qǐng)求者(requester)
寫(xiě)請(qǐng)求:請(qǐng)求者發(fā)出數(shù)據(jù)
無(wú)數(shù)據(jù)請(qǐng)求:不需要返回一個(gè)數(shù)據(jù)響應(yīng)給請(qǐng)求者
原子請(qǐng)求:請(qǐng)求者發(fā)出數(shù)據(jù),請(qǐng)求不可分割
1. 讀事務(wù)(Read Transactions):
ReadNoSnp:對(duì)不可監(jiān)聽(tīng)的(non-snoopable)地址區(qū)域的讀取請(qǐng)求。數(shù)據(jù)包含在完成響應(yīng)中;數(shù)據(jù)大小取決于請(qǐng)求中的數(shù)據(jù)尺寸屬性(size attribute)值,最大是一條緩存行大小;接收到的數(shù)據(jù)不會(huì)被請(qǐng)求者緩存。
ReadOnce:對(duì)可監(jiān)聽(tīng)的(snoopable)地址區(qū)域的讀取請(qǐng)求,以獲取一致性數(shù)據(jù)快照。數(shù)據(jù)大小是一條緩存行;接收到的數(shù)據(jù)不會(huì)被請(qǐng)求者緩存。
ReadOnceCleanInvalid:對(duì)可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求,以獲取一致性數(shù)據(jù)快照。數(shù)據(jù)大小是一條緩存行;建議但不強(qiáng)制,緩存副本被置無(wú)效(invalidate);如果被置無(wú)效的緩存?zhèn)浞菔恰芭K”的,必須把此緩存行寫(xiě)回到內(nèi)存;接收到的數(shù)據(jù)不會(huì)被請(qǐng)求者緩存。
ReadOnceMakeInvlid:對(duì)可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求,以獲取一致性數(shù)據(jù)快照。數(shù)據(jù)大小是一條緩存行;建議但不強(qiáng)制,所有緩存副本被置無(wú)效(invalidate);如果被置無(wú)效的緩存?zhèn)浞菔恰芭K”的,無(wú)需把此緩存行寫(xiě)回到內(nèi)存;接收到的數(shù)據(jù)不會(huì)被請(qǐng)求者緩存。使用ReadOnceMakeInvalid事務(wù)可能會(huì)導(dǎo)致“臟”緩存行丟失,因此ReadOnceMakeInvalid的使用必須嚴(yán)格限制在已知允許丟失“臟”緩存行的情況下。
ReadUnique:對(duì)可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求,以對(duì)緩存行進(jìn)行存儲(chǔ)。數(shù)據(jù)大小是一條緩存行;請(qǐng)求者將接收UC或UD狀態(tài)的數(shù)據(jù)。
ReadClean:對(duì)可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求。數(shù)據(jù)大小是一條緩存行;數(shù)據(jù)必須以“干凈”的狀態(tài)(UC或SC)提供給請(qǐng)求者。
ReadNotSharedDirty:對(duì)可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求。數(shù)據(jù)大小是一條緩存行;數(shù)據(jù)必須以UC或UD或SC狀態(tài)(不能是SD)提供給請(qǐng)求者。
ReadShared:對(duì)可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求。數(shù)據(jù)大小是一條緩存行;請(qǐng)求者將接收UC或UD或SC或SD狀態(tài)的數(shù)據(jù)。
2. 無(wú)數(shù)據(jù)事務(wù)(Dataless Transactions): 顧名思義,這類(lèi)事務(wù)不需要傳輸數(shù)據(jù)。
CleanUnique:請(qǐng)求可監(jiān)聽(tīng)的地址區(qū)域?qū)顟B(tài)更改為Unique,以對(duì)緩存行執(zhí)行存儲(chǔ)。典型用法是當(dāng)請(qǐng)求者擁有緩存行的共享副本,并希望獲得存儲(chǔ)到緩存行的權(quán)限時(shí)可以用此事務(wù)。數(shù)據(jù)不包括在完成響應(yīng)中;任何“臟”副本都必須寫(xiě)回下一級(jí)緩存或內(nèi)存。
MakeUnique:請(qǐng)求可監(jiān)聽(tīng)的地址區(qū)域以獲得緩存行的所有權(quán),不需要數(shù)據(jù)響應(yīng)。只有當(dāng)請(qǐng)求者保證將對(duì)緩存行的所有字節(jié)進(jìn)行存儲(chǔ)時(shí),才會(huì)使用此請(qǐng)求。任何“臟”副本都必須失效,而無(wú)需寫(xiě)回下一級(jí)緩存或內(nèi)存。
Evict:用于指示緩存代理不再緩存“干凈”的緩存行。此事務(wù)不發(fā)送數(shù)據(jù);緩存行不得保留在緩存中。
緩存維護(hù)操作(Cache Maintenance Operation,CMO)有助于軟件緩存管理。該協(xié)議包括以下支持CMO的無(wú)數(shù)據(jù)事務(wù):
CleanShared:對(duì)CleanShared請(qǐng)求的完成響應(yīng)可以確保所有緩存副本都更改為非“臟”狀態(tài),并且任何“臟”副本都會(huì)寫(xiě)回內(nèi)存。完成響應(yīng)中不用包含數(shù)據(jù)。
CleanSharedPersist:對(duì)CleanSharedPersist請(qǐng)求的完成響應(yīng)可以確保所有緩存副本都更改為非“臟”狀態(tài),并且任何“臟”緩存副本都會(huì)寫(xiě)回PoP(Point of Persistence)。PoP是內(nèi)存系統(tǒng)中的一個(gè)點(diǎn),當(dāng)系統(tǒng)電源斷開(kāi)時(shí),會(huì)保持對(duì)內(nèi)存的寫(xiě)入,當(dāng)電源恢復(fù)時(shí),會(huì)可靠的恢復(fù)對(duì)內(nèi)存的寫(xiě)入。完成響應(yīng)中不用包含數(shù)據(jù)。
CleanInvalid:對(duì)CleanInvalid的完成響應(yīng)可以確保所有緩存的副本都無(wú)效,并且任何“臟”副本都會(huì)寫(xiě)入內(nèi)存。完成響應(yīng)中不用包含數(shù)據(jù)。
MakeInvalid:對(duì)MakeInvalid的完成響應(yīng)可以確保所有緩存的副本都無(wú)效,并且必須丟棄任何“臟”副本。完成響應(yīng)中不用包含數(shù)據(jù)。
SnpMe Variants:CleanShared、CleanSharedPersist、CleanInvalid和MakeInvalid事務(wù)都有一個(gè)SnpMe變體,后綴為[SnpMe]。SnpMe是請(qǐng)求者向主代理發(fā)出的指示,表明請(qǐng)求者尚未檢查其緩存中是否存在該行的副本,請(qǐng)求者指示主代理在必要時(shí)向請(qǐng)求者發(fā)出監(jiān)聽(tīng)。
3. 寫(xiě)事務(wù)(Write Transactions):
寫(xiě)事務(wù)將數(shù)據(jù)從請(qǐng)求者移動(dòng)到下一級(jí)緩存、內(nèi)存或外圍設(shè)備。根據(jù)事務(wù)類(lèi)型,傳輸?shù)臄?shù)據(jù)可以是一致的,也可以是非一致的。每個(gè)部分緩存行寫(xiě)入事務(wù)必須明確數(shù)據(jù)中的字節(jié)。事務(wù)名稱(chēng)中的Full或Ptl后綴指明了是整條緩存行還是部分緩存行。
WriteNoSnpPtl:寫(xiě)部分緩存行到不可監(jiān)聽(tīng)(non-snoopable)的地址區(qū)域。數(shù)據(jù)最大是一條緩存行;必須明確寫(xiě)入的字節(jié)和不寫(xiě)入的字節(jié)。
WriteNoSnpFull:寫(xiě)完整緩存行到不可監(jiān)聽(tīng)的地址區(qū)域。數(shù)據(jù)大小是一條緩存行;不需要指明寫(xiě)入的字節(jié),因?yàn)槟J(rèn)寫(xiě)入全部字節(jié)。
WriteUniquePtl:寫(xiě)部分緩存行到可監(jiān)聽(tīng)(snoopable)的地址區(qū)域。當(dāng)緩存行在請(qǐng)求方無(wú)效(invalid)時(shí),將數(shù)據(jù)的緩存行寫(xiě)入下一級(jí)緩存或內(nèi)存。
WriteUniqueFull:寫(xiě)完整緩存行到可監(jiān)聽(tīng)的地址區(qū)域。當(dāng)緩存行在請(qǐng)求方無(wú)效(invalid)時(shí),將數(shù)據(jù)的緩存行寫(xiě)入下一級(jí)緩存或內(nèi)存。
CopyBack Transaction:回寫(xiě)事務(wù)是寫(xiě)事務(wù)的一個(gè)子類(lèi)?;貙?xiě)事務(wù)將一致的數(shù)據(jù)從緩存移動(dòng)到下一級(jí)緩存或內(nèi)存?;貙?xiě)交易不需要snoop系統(tǒng)中的其它代理。
WriteBackPtl:將“臟”的部分緩存行寫(xiě)回下一級(jí)緩存或內(nèi)存。僅當(dāng)支持部分緩存狀態(tài)時(shí),才支持此事務(wù)。
WriteBackFull:將“臟”的完整緩存行寫(xiě)回下一級(jí)緩存或內(nèi)存。WriteBackFull又可以分為兩種,WriteBackFullUD和WriteBackFullSD。
WriteCleanFull:將“臟”的完整緩存行寫(xiě)回下一級(jí)緩存或內(nèi)存,并在緩存中保留干凈的副本。
WriteEvictFull:將唯一的“干凈”數(shù)據(jù)寫(xiě)回下一級(jí)緩存。
4. 原子事務(wù):
所謂的原子事務(wù),指的是此事務(wù)就像原子一樣是不可分割的,要么所有操作全部完成,要么全部不執(zhí)行,不存在執(zhí)行部分操作的情況。在單處理器系統(tǒng)中,能夠在單條指令中完成的操作都可以認(rèn)為是“原子操作“,因?yàn)橹袛嘀荒馨l(fā)生于指令之間 。但是,在對(duì)稱(chēng)多處理器結(jié)構(gòu)中就不同了,由于系統(tǒng)中有多個(gè)處理器在獨(dú)立地運(yùn)行,即使能在單條指令中完成的操作也有可能受到干擾。比如,一個(gè)典型的"讀-改-寫(xiě)"過(guò)程,會(huì)涉及兩次內(nèi)存訪問(wèn),先把數(shù)據(jù)讀出,然后修改,最后寫(xiě)回。如果沒(méi)有特殊限定,那么在這兩次內(nèi)存訪問(wèn)之間,有可能其它的處理器核發(fā)起內(nèi)存訪問(wèn) 原子事務(wù)允許請(qǐng)求者向互連發(fā)送帶有內(nèi)存地址的事務(wù),以及要在該內(nèi)存位置上執(zhí)行的操作。這種事務(wù)類(lèi)型可以使操作更接近數(shù)據(jù)所在的位置。這樣,對(duì)于以原子方式執(zhí)行操作和以性能高效的方式更新內(nèi)存位置非常有用。
AtomicStore:發(fā)送帶有地址和要執(zhí)行的原子操作的單個(gè)數(shù)據(jù)值。請(qǐng)求中包含數(shù)據(jù);發(fā)出數(shù)據(jù)大小為1、2、4或8字節(jié);目標(biāo)對(duì)原子事務(wù)中提供的數(shù)據(jù)值指定的地址位置執(zhí)行所需的操作;支持的操作數(shù)為8;目標(biāo)返回一個(gè)沒(méi)有數(shù)據(jù)的完成響應(yīng)。
AtomicLoad:發(fā)送帶有地址和要執(zhí)行的原子操作的單個(gè)數(shù)據(jù)值。請(qǐng)求中包含數(shù)據(jù);發(fā)出數(shù)據(jù)大小為1、2、4或8字節(jié);目標(biāo)對(duì)原子事務(wù)中提供的數(shù)據(jù)值指定的地址位置執(zhí)行所需的操作;支持的操作數(shù)為8;完成響應(yīng)中返回的數(shù)據(jù)大小要與請(qǐng)求中的數(shù)據(jù)大小一致。
AtomicSwap:發(fā)送數(shù)據(jù)值,交換值和執(zhí)行地址。請(qǐng)求中包含數(shù)據(jù);發(fā)出數(shù)據(jù)大小為1、2、4或8字節(jié);目標(biāo)對(duì)原子事務(wù)中提供的數(shù)據(jù)值指定的地址位置執(zhí)行所需的操作;支持的操作數(shù)為1;完成響應(yīng)中返回的數(shù)據(jù)大小要與請(qǐng)求中的數(shù)據(jù)大小一致。
AtomicCompare:發(fā)送兩個(gè)數(shù)據(jù)值(比較值和交換值)執(zhí)行地址。請(qǐng)求中包含數(shù)據(jù);發(fā)出數(shù)據(jù)大小為2、4、8、16或32字節(jié);目標(biāo)將地址位置的值與比較值進(jìn)行比較,如果值匹配,目標(biāo)會(huì)將交換值寫(xiě)入尋址位置,如果值不匹配,則目標(biāo)不會(huì)將交換值寫(xiě)入尋址位置。目標(biāo)返回地址位置的原始值,完成響應(yīng)的數(shù)據(jù)大小是請(qǐng)求中數(shù)據(jù)大小的一半。支持的操作數(shù)為1。
SnpMe Variants:上訴原子事務(wù)都有一個(gè)SnpMe變體,以后綴名[SnpMe]區(qū)分。
下面是不同請(qǐng)求的操作碼(opcode):
對(duì)于AtomicLoad和AtomicStore,ReqOp[2:0]的編碼含義為:
ReqOp[3]指示大小端。
3.3.3 請(qǐng)求響應(yīng)
所有事務(wù)都需要有一個(gè)完成響應(yīng)。它通常是結(jié)束請(qǐng)求事務(wù)所發(fā)送的最后一條消息。請(qǐng)求完成響應(yīng)分為以下幾類(lèi):
讀完成:讀完成響應(yīng)包括數(shù)據(jù)響應(yīng);讀完成響應(yīng)還包括一個(gè)緩存狀態(tài),指示行緩存行的狀態(tài);讀完成中不使用字節(jié)使能功能。
無(wú)數(shù)據(jù)完成:無(wú)數(shù)據(jù)完成響應(yīng)不包括數(shù)據(jù)響應(yīng);無(wú)數(shù)據(jù)完成響應(yīng)也不包括緩存狀態(tài),緩存行的狀態(tài)由請(qǐng)求者決定。
寫(xiě)完成:寫(xiě)完成響應(yīng)不包括數(shù)據(jù)響應(yīng);寫(xiě)完成響應(yīng)也不包括緩存狀態(tài)。
以下是內(nèi)存請(qǐng)求的響應(yīng)操作碼編碼:
3.3.4 監(jiān)聽(tīng)請(qǐng)求
主代理會(huì)生成一個(gè)監(jiān)聽(tīng)請(qǐng)求,以控制緩存代理(被監(jiān)聽(tīng)者,也稱(chēng)為Snoopee)處的緩存行狀態(tài)。監(jiān)聽(tīng)請(qǐng)求有:
SnpToAny:用于獲取緩存行副本,無(wú)需更改狀態(tài);在被監(jiān)聽(tīng)端,不需要更改緩存行狀態(tài)。
SnpToC:用于確保緩存行不處于“臟”狀態(tài),通常用于執(zhí)行緩存清理操作;在被監(jiān)聽(tīng)端,緩存行不可以是“臟”;緩存行(如果有效)預(yù)計(jì)將更改為“干凈”狀態(tài),即UC或SC;緩存行可以(但不要求)轉(zhuǎn)移為無(wú)效狀態(tài)。
SnpToS:用于確保緩存行不處于唯一(unique)狀態(tài)??梢源_保在被監(jiān)聽(tīng)端,在不通知系統(tǒng)中的其它代理的情況下,緩存行不會(huì)被更改。當(dāng)主代理允許一個(gè)“臟”緩存行副本在被監(jiān)聽(tīng)端是SD狀態(tài),通常使用SnpToS,而不是SnpToSC。在被監(jiān)聽(tīng)端,緩存行不可以是唯一狀態(tài);緩存行(如果有效)預(yù)計(jì)將更改為共享狀態(tài),即SC或SD;緩存行可以(但不要求)轉(zhuǎn)移為無(wú)效狀態(tài)。
SnpToSC:用于確保緩存行不處于唯一或“臟”狀態(tài)。當(dāng)主代理不允許一個(gè)“臟”緩存行副本在被監(jiān)聽(tīng)端,通常使用SnpToSC,而不是SnpToS。在被監(jiān)聽(tīng)端,緩存行不可以是唯一或“臟”狀態(tài);緩存行(如果有效)預(yù)計(jì)將更改為SC狀態(tài);緩存行可以(但不要求)轉(zhuǎn)移為無(wú)效狀態(tài)。
SnpToI:用于將緩存行轉(zhuǎn)移到無(wú)效狀態(tài)。通常用于當(dāng)另一個(gè)代理請(qǐng)求對(duì)緩存行執(zhí)行存儲(chǔ)時(shí)。
SnpMakeI:用于將緩存行轉(zhuǎn)移到無(wú)效狀態(tài),而不會(huì)從被監(jiān)聽(tīng)返回任何數(shù)據(jù),即使緩存行處于“臟”狀態(tài)。通常用于另一個(gè)代理請(qǐng)求對(duì)整個(gè)緩存行執(zhí)行存儲(chǔ)時(shí)。
SnpChain:將當(dāng)前監(jiān)聽(tīng)連接到同一數(shù)據(jù)包中較早的監(jiān)聽(tīng)之后。
以下是每種監(jiān)聽(tīng)請(qǐng)求的初始和最終狀態(tài):
SnpOp編碼:
請(qǐng)求類(lèi)型和相對(duì)應(yīng)的監(jiān)聽(tīng)請(qǐng)求如下表。其中,E表示期望的監(jiān)聽(tīng)請(qǐng)求;E1表示當(dāng)被監(jiān)聽(tīng)端允許切換到SD(SharedDirty)狀態(tài)時(shí)的期望監(jiān)聽(tīng)請(qǐng)求;E2表示當(dāng)被監(jiān)聽(tīng)端不允許切換到SD狀態(tài)時(shí)的期望監(jiān)聽(tīng)請(qǐng)求;P表示允許的監(jiān)聽(tīng)請(qǐng)求。
3.3.5 監(jiān)聽(tīng)響應(yīng)
監(jiān)聽(tīng)響應(yīng)可以帶數(shù)據(jù),也可以不帶。 監(jiān)聽(tīng)響應(yīng)中的最終緩存狀態(tài)必須精確。被監(jiān)聽(tīng)者可以在發(fā)出監(jiān)聽(tīng)響應(yīng)后進(jìn)行任何合法的靜默緩存狀態(tài)轉(zhuǎn)換(Silent Cache State Transition)。 SnpRespOp編碼:
3.3.6 MiscOp編碼
下表列出了其它的雜項(xiàng)消息類(lèi)型,包括兩類(lèi):Credited和Uncredited。所謂的雜項(xiàng)消息就是指這些消息既不屬于請(qǐng)求類(lèi)型和請(qǐng)求響應(yīng),也不屬于監(jiān)聽(tīng)請(qǐng)求和監(jiān)聽(tīng)響應(yīng)。 NOP,CreditGrant,CreditReturn和ProtErrReport使用雜項(xiàng)信息通道。Generic消息可以使用Uncredited或Credited的雜項(xiàng)消息,其有效負(fù)載為2到32字節(jié),其內(nèi)容由具體實(shí)現(xiàn)所定義。
3.3.7 協(xié)議錯(cuò)誤報(bào)告
CCIX組件(如請(qǐng)求代理、主代理、從代理、CCIX端口或CCIX鏈路)使用ProtErrReport(PER)消息向錯(cuò)誤代理(EA)報(bào)告錯(cuò)誤。該消息使用編碼0011的MiscOp[3:0],有效負(fù)載為32字節(jié)。有關(guān)CCIX協(xié)議錯(cuò)誤報(bào)告(PER)的詳細(xì)信息,后面介紹。
3.3.8 請(qǐng)求緩存狀態(tài)轉(zhuǎn)移
請(qǐng)求者緩存處(讀請(qǐng)求)的緩存狀態(tài)轉(zhuǎn)換:
上表第一列是發(fā)出的讀請(qǐng)求類(lèi)型,第二列是可以啟動(dòng)請(qǐng)求的緩存行的所有允許狀態(tài),第三列是事務(wù)完成后緩存行的允許狀態(tài),第四列是允許的響應(yīng)??梢越Y(jié)合讀請(qǐng)求類(lèi)型那個(gè)章節(jié)看這個(gè)表。以ReadNoSnp為例,ReadNoSnp是對(duì)不可監(jiān)聽(tīng)的地址區(qū)域的讀取請(qǐng)求,且接收到的數(shù)據(jù)不會(huì)在請(qǐng)求端緩存。因此緩存行初始和最終狀態(tài)都是Invalid。 無(wú)數(shù)據(jù)請(qǐng)求的緩存狀態(tài)轉(zhuǎn)換:
寫(xiě)請(qǐng)求的緩存狀態(tài)轉(zhuǎn)換:
原子請(qǐng)求的緩存狀態(tài)轉(zhuǎn)換:
3.3.9 被監(jiān)聽(tīng)(Snoopee)端狀態(tài)轉(zhuǎn)移
被監(jiān)聽(tīng)者在接收到監(jiān)聽(tīng)請(qǐng)求后,必須根據(jù)監(jiān)聽(tīng)類(lèi)型的要求轉(zhuǎn)換緩存行的狀態(tài)。下表是有關(guān)每種監(jiān)聽(tīng)類(lèi)型的初始和最終狀態(tài)的信息,以及相應(yīng)的監(jiān)聽(tīng)響應(yīng)??梢越Y(jié)合監(jiān)聽(tīng)請(qǐng)求那個(gè)章節(jié)看這張表。
3.3.10 靜默緩存狀態(tài)轉(zhuǎn)移
靜默緩存狀態(tài)轉(zhuǎn)換(Silent Cache State Transition)定義為緩存因內(nèi)部事件而改變狀態(tài),而不通知系統(tǒng)其它部分。下表是合法的靜默緩存狀態(tài)轉(zhuǎn)換。在某些情況下,可以(但不必需)發(fā)出一個(gè)事務(wù)來(lái)指示轉(zhuǎn)換已經(jīng)發(fā)生。如果發(fā)出這樣的事務(wù),則緩存狀態(tài)轉(zhuǎn)換對(duì)互連網(wǎng)絡(luò)可見(jiàn),因此也就不被歸類(lèi)為靜默轉(zhuǎn)換。
3.3.11 控制Evict和WriteEvictFull的使用
需要一種機(jī)制來(lái)控制請(qǐng)求代理和主代理之間的Evict(Dataless事務(wù))和WriteEvictFull(寫(xiě)事務(wù))的使用。 每個(gè)請(qǐng)求代理都有兩個(gè)控制比特位,即RAEvictHintCntl和RAWriteEvictFullHintCntl,用于確定請(qǐng)求代理在Evict和WriteEvictFull事務(wù)方面的行為。 RAEvictHintCntl(默認(rèn)值為0):
=0,出于最佳系統(tǒng)性能考慮,不建議從RA發(fā)送Evict事務(wù)。
=1,出于最佳系統(tǒng)性能考慮,建議從RA發(fā)送Evict事務(wù)。
RAWriteEvictFullHintCntl(默認(rèn)值為0):
=0,出于最佳系統(tǒng)性能考慮,不建議從RA發(fā)送WriteEvictFull事務(wù)。
=1,出于最佳系統(tǒng)性能考慮,建議從RA發(fā)送WriteEvictFull事務(wù)。
每個(gè)主代理也有兩個(gè)比特位,HAEvictHintCap和HAWriteEvictFullHintCap,用于指示有關(guān)使用Evict和WriteEvitFull事務(wù)的首選行為。 HAEvictHintCap:
=0,出于最佳系統(tǒng)性能考慮,不建議向HA發(fā)送Evict事務(wù)。
=1,出于最佳系統(tǒng)性能考慮,建議向HA發(fā)送Evict事務(wù)。
HAWriteEvictFullHintCap:
=0,出于最佳系統(tǒng)性能考慮,不建議向HA發(fā)送WriteEvictFull事務(wù)。
=1,出于最佳系統(tǒng)性能考慮,建議向HA發(fā)送WriteEvictFull事務(wù)。
3.3.12 同時(shí)超發(fā)請(qǐng)求
不支持同一請(qǐng)求代理對(duì)同一地址位置的請(qǐng)求超發(fā)(outstanding),除非它們僅包括ReadNoSnp、WriteNoSnp、ReadOnce或WriteUnique的任何組合。 不支持同時(shí)向同一請(qǐng)求代理發(fā)送到同一地址位置的多個(gè)Snoop事務(wù)。
3.3.13 對(duì)監(jiān)聽(tīng)冒險(xiǎn)的請(qǐng)求
當(dāng)一個(gè)CopyBack請(qǐng)求發(fā)現(xiàn)對(duì)相同緩存行地址有未完成的監(jiān)聽(tīng),或者反過(guò)來(lái),一個(gè)監(jiān)聽(tīng)發(fā)現(xiàn)對(duì)相同緩存行地址有未完成的CopyBack,則會(huì)發(fā)生請(qǐng)求競(jìng)爭(zhēng)。注意,如果監(jiān)聽(tīng)目標(biāo)代理ID和請(qǐng)求源代理ID不相同,則不視為請(qǐng)求競(jìng)爭(zhēng)。
上圖中,Chip 1中的HA向Chip 0中的RA發(fā)起了一個(gè)監(jiān)聽(tīng);同一時(shí)刻Chip 0的RA向Chip 1的HA發(fā)起了一個(gè)請(qǐng)求(對(duì)同一地址)。圖中的帶數(shù)據(jù)的請(qǐng)求,可以是CopyBack:WriteBackFullUD、WriteBackFullSD、WriteCleanFullSD或WriteEvickFull。在存在多個(gè)CCIX-R、CCIX-H端口的多跳(Muliti-hop)路由中,要求該路徑中的每個(gè)端口必須包含競(jìng)爭(zhēng)檢測(cè)邏輯,以檢測(cè)請(qǐng)求對(duì)監(jiān)聽(tīng)的競(jìng)爭(zhēng)。 【待續(xù)】
審核編輯 :李倩
-
處理器
+關(guān)注
關(guān)注
68文章
19329瀏覽量
230132 -
緩存
+關(guān)注
關(guān)注
1文章
240瀏覽量
26699
原文標(biāo)題:技術(shù)分享 | CCIX(四)
文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論