本發(fā)明涉及數(shù)據(jù)中心網(wǎng)絡(luò),具體來(lái)說(shuō)涉及遠(yuǎn)程直接內(nèi)存訪問(wèn),更具體地說(shuō),涉及一種針對(duì)pfc死鎖的處理方法。
背景技術(shù):
1、因?yàn)檫h(yuǎn)程直接內(nèi)存訪問(wèn)(remote?direct?memory?access,簡(jiǎn)稱rdma)具有高吞吐量、低延遲和低cpu開(kāi)銷的特點(diǎn),其已經(jīng)成為現(xiàn)代數(shù)據(jù)中心網(wǎng)絡(luò)高速傳輸?shù)氖聦?shí)標(biāo)準(zhǔn)。rdma的一個(gè)重要版本是基于聚合以太網(wǎng)的rdma第2版(rdma?over?converged?ethernet?v2,簡(jiǎn)稱rocev2),已廣泛應(yīng)用于存儲(chǔ)、計(jì)算、分布式事務(wù)處理和大規(guī)模人工智能訓(xùn)練等領(lǐng)域。
2、然而,基于無(wú)損以太網(wǎng)的rocev2網(wǎng)絡(luò)會(huì)形成死鎖。死鎖的形成主要?dú)w因于優(yōu)先級(jí)流量控制機(jī)制(priority?flow?control,簡(jiǎn)稱pfc機(jī)制)。pfc機(jī)制的“優(yōu)先級(jí)”體現(xiàn)為:對(duì)于交換機(jī)的每一個(gè)端口,有硬件實(shí)現(xiàn)的多個(gè)隊(duì)列,這些隊(duì)列分為多個(gè)優(yōu)先級(jí),因此稱為“優(yōu)先級(jí)”流控(對(duì)于pfc交換機(jī)而言,一般為8個(gè)優(yōu)先級(jí)隊(duì)列)。pfc的“流控”體現(xiàn)為,每一個(gè)入隊(duì)列都可以單獨(dú)暫停其上游設(shè)備的對(duì)應(yīng)端口的相同優(yōu)先級(jí)的出隊(duì)列。死鎖是由于這種“下游反壓上游”的機(jī)制而導(dǎo)致的:當(dāng)一個(gè)環(huán)路內(nèi)的所有交換機(jī)的某個(gè)優(yōu)先級(jí)入隊(duì)列都恰好暫停其上游交換機(jī)繼續(xù)向其發(fā)送數(shù)據(jù)時(shí),死鎖就會(huì)產(chǎn)生。
3、例如,當(dāng)一個(gè)交換機(jī)的端口k的第n優(yōu)先級(jí)的入隊(duì)列的緩沖區(qū)(buffer)達(dá)到預(yù)設(shè)的暫停閾值(xoff)時(shí),它會(huì)向上游交換機(jī)發(fā)送暫停幀(pause,其中攜帶第n優(yōu)先級(jí)的信息),從而要求上游設(shè)備停止向端口k的第n優(yōu)先級(jí)的入隊(duì)列發(fā)送數(shù)據(jù)幀。等到該優(yōu)先級(jí)的入隊(duì)列的緩沖區(qū)的占用量下降到恢復(fù)閾值(xon)以下時(shí),數(shù)據(jù)傳輸才會(huì)恢復(fù)。然而,死鎖在環(huán)形拓?fù)浣Y(jié)構(gòu)中是容易發(fā)生的,尤其是當(dāng)所有交換機(jī)的某個(gè)優(yōu)先級(jí)隊(duì)列的緩沖區(qū)都達(dá)到暫停閾值并向其上游發(fā)送暫停幀時(shí),每個(gè)交換機(jī)都在等待其下游交換機(jī)釋放緩沖區(qū)資源,從而陷入死鎖。
4、死鎖對(duì)rdma網(wǎng)絡(luò)的影響是顯著的。一旦發(fā)生死鎖,受影響的交換機(jī)將無(wú)法在死鎖發(fā)生的優(yōu)先級(jí)隊(duì)列上繼續(xù)傳輸數(shù)據(jù)幀,導(dǎo)致網(wǎng)絡(luò)傳輸完全停滯,并且嚴(yán)重影響網(wǎng)絡(luò)的整體性能。此外,陷入死鎖的交換機(jī)可能會(huì)向其他不相關(guān)的鏈路發(fā)送暫停幀,進(jìn)一步擴(kuò)大影響范圍,導(dǎo)致整個(gè)網(wǎng)絡(luò)出現(xiàn)性能問(wèn)題。
5、未來(lái),隨著數(shù)據(jù)中心規(guī)模和復(fù)雜性的不斷增加,進(jìn)一步優(yōu)化rdma和rocev2的性能將成為一個(gè)重要的課題。如何在保證高性能的同時(shí),避免死鎖對(duì)端到端性能的影響,是roce網(wǎng)絡(luò)技術(shù)發(fā)展的重要課題。
6、如何解除pfc死鎖,當(dāng)前學(xué)術(shù)界和工業(yè)界有著不同的方案,下面針對(duì)一些現(xiàn)有方案進(jìn)行介紹:
7、(1)鏈路重置。實(shí)踐中常用的死鎖解除方案是,當(dāng)控制面通過(guò)死鎖檢測(cè)算法檢測(cè)到死鎖時(shí),就會(huì)通過(guò)重置隊(duì)列、端口或交換機(jī)節(jié)點(diǎn)的方式,把死鎖環(huán)路中對(duì)應(yīng)隊(duì)列的數(shù)據(jù)幀丟棄掉。這種方式是簡(jiǎn)單的,易于使用;但是這對(duì)于被丟棄的數(shù)據(jù)幀所對(duì)應(yīng)的流而言是非常有干擾性的,這既有破壞性,又不優(yōu)雅。
8、(2)優(yōu)先丟棄數(shù)據(jù)量較大的大象流的數(shù)據(jù)幀。最近提出的方案在可編程數(shù)據(jù)平面部署一個(gè)流大小判別的草圖數(shù)據(jù)結(jié)構(gòu)(sketch結(jié)構(gòu)),會(huì)檢測(cè)每一條流的大小并優(yōu)先丟棄大象流中的數(shù)據(jù)幀。這可以使受到丟包影響的流的數(shù)目盡可能地少,從而從統(tǒng)計(jì)學(xué)意義上減輕數(shù)據(jù)幀丟失的影響,但并不能完全消除這種影響。
9、(3)自適應(yīng)轉(zhuǎn)發(fā)路徑。該方案的主要思路是,當(dāng)檢測(cè)到出現(xiàn)死鎖時(shí),將處于死鎖隊(duì)列中的數(shù)據(jù)幀的信息通過(guò)控制模塊重新計(jì)算一個(gè)新的未發(fā)生死鎖的轉(zhuǎn)發(fā)路徑,并將這些數(shù)據(jù)幀按照新的轉(zhuǎn)發(fā)路徑轉(zhuǎn)發(fā)出去。當(dāng)其他交換機(jī)節(jié)點(diǎn)收到這些數(shù)據(jù)幀時(shí),由于之前并沒(méi)有關(guān)于這些數(shù)據(jù)幀的轉(zhuǎn)發(fā)信息,因此其他交換機(jī)也將到控制面(模塊)為該數(shù)據(jù)幀計(jì)算新的路徑,直到將該數(shù)據(jù)幀發(fā)到目的地。該方案需要逐跳在控制面計(jì)算轉(zhuǎn)發(fā)路徑,因此開(kāi)銷比較大,而且時(shí)延比較大;而且由于該方案主要運(yùn)用了軟件定義網(wǎng)絡(luò)(software?definednetwork,簡(jiǎn)稱sdn)的思路,專有性強(qiáng),主要被運(yùn)用在私有的網(wǎng)絡(luò)協(xié)議中(如infiniband網(wǎng)絡(luò))。另外,自適應(yīng)轉(zhuǎn)發(fā)路徑雖不會(huì)造成數(shù)據(jù)幀丟失,但會(huì)將數(shù)據(jù)幀轉(zhuǎn)發(fā)到其他鏈路,從而干擾其他無(wú)辜流量。
10、(4)重配置緩沖區(qū)大小。學(xué)術(shù)界也提出了緩沖區(qū)重新配置的方式來(lái)處理死鎖。其核心思路是,當(dāng)交換機(jī)控制面監(jiān)測(cè)到死鎖的發(fā)生時(shí),它會(huì)監(jiān)控共享緩沖區(qū)(shared?buffer)的空余大小,并從中尋找一塊可用的緩沖區(qū),將這個(gè)空間動(dòng)態(tài)地添加到死鎖的隊(duì)列中,隊(duì)列可用長(zhǎng)度變大,因而pfc恢復(fù)閾值也變大,因此使得隊(duì)列觸發(fā)pfc恢復(fù),死鎖因而解開(kāi)。但是,該方案仍存在以下問(wèn)題:1)動(dòng)態(tài)的緩沖區(qū)重新配置仍需要控制平面的幫助,并可能導(dǎo)致數(shù)據(jù)幀在芯片緩沖區(qū)中丟失;2)緩沖區(qū)重新配置要么需要在單個(gè)交換機(jī)上找到足夠大的緩沖區(qū)空間以恢復(fù)整個(gè)環(huán)路的流動(dòng),要么需要死鎖環(huán)路上的全部交換機(jī)都執(zhí)行此操作,否則會(huì)出現(xiàn)“雖然下游交換機(jī)觸發(fā)了pfc恢復(fù)幀給上游,但是上游發(fā)不了幾個(gè)數(shù)據(jù)幀就會(huì)被下游重新暫?!钡默F(xiàn)象,因而不會(huì)解鎖成功;3)這個(gè)方案會(huì)對(duì)與死鎖隊(duì)列共享緩沖區(qū)的其他隊(duì)列產(chǎn)生不利影響,它不僅占用了本可由其他隊(duì)列利用的緩沖區(qū)空間,而且經(jīng)常無(wú)法從共享緩沖區(qū)中分配足夠的空間,因而導(dǎo)致不能100%解鎖成功。而且,如果同一交換機(jī)節(jié)點(diǎn)上承載了多個(gè)不同的死鎖環(huán)路,每個(gè)環(huán)路都需要一塊單獨(dú)的空閑隊(duì)列,這會(huì)給交換機(jī)的緩沖區(qū)分配帶來(lái)壓力。此外,從共享緩沖區(qū)中拿走可用空間的操作會(huì)減小未使用的共享緩沖區(qū)的數(shù)量,會(huì)導(dǎo)致其他隊(duì)列更容易觸發(fā)pfc暫停。
11、總的來(lái)說(shuō),現(xiàn)有技術(shù)存在以下問(wèn)題:
12、丟包方案(鏈路重置、優(yōu)先丟棄數(shù)據(jù)量較大的大象流等)雖然簡(jiǎn)單,但是它會(huì)給數(shù)據(jù)流帶來(lái)丟包,從而影響流的性能。
13、基于自適應(yīng)路由的方案需要在每一跳重新計(jì)算路由路徑,導(dǎo)致轉(zhuǎn)發(fā)性能差。而且該方案會(huì)干擾其他流量,一般被應(yīng)用在專用網(wǎng)絡(luò)中。
14、基于重配置緩沖區(qū)大小的方案需要控制面對(duì)緩沖區(qū)的重新配置,效率較低;它會(huì)占用其他隊(duì)列可以使用的緩沖區(qū)空間,因而影響其他流量。而且,該方案會(huì)隨著緩沖區(qū)(buffer)的不同占用情況而波動(dòng),無(wú)法保證100%解除死鎖;
15、以上的現(xiàn)有技術(shù),要么丟棄死鎖環(huán)路上的部分或者全部數(shù)據(jù)幀,對(duì)原有數(shù)據(jù)流的影響較大;要么將死鎖環(huán)路上的數(shù)據(jù)幀轉(zhuǎn)發(fā)到死鎖環(huán)路外的其他交換機(jī),對(duì)無(wú)辜流量的影響較大。
16、需要說(shuō)明的是:本背景技術(shù)僅用于介紹本發(fā)明的相關(guān)信息,以便于幫助理解本發(fā)明的技術(shù)方案,但并不意味著相關(guān)信息必然是現(xiàn)有技術(shù)。相關(guān)信息與本發(fā)明方案一同提交和公開(kāi),在沒(méi)有證據(jù)表明相關(guān)信息已在本發(fā)明的申請(qǐng)日以前公開(kāi)的情況下,相關(guān)信息不應(yīng)被視為現(xiàn)有技術(shù)。
技術(shù)實(shí)現(xiàn)思路
1、因此,本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺陷,提供一種針對(duì)pfc死鎖的處理方法。
2、本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
3、根據(jù)本發(fā)明的第一方面,提供一種針對(duì)pfc死鎖的處理方法,包括:當(dāng)檢測(cè)到roce網(wǎng)絡(luò)存在基于pfc的死鎖環(huán)路時(shí),確定處于所述死鎖環(huán)路上的多個(gè)交換機(jī);為所述多個(gè)交換機(jī)構(gòu)建與所述死鎖環(huán)路相對(duì)應(yīng)的環(huán)路轉(zhuǎn)發(fā)表,該環(huán)路轉(zhuǎn)發(fā)表指示死鎖環(huán)路上的數(shù)據(jù)幀沿環(huán)路轉(zhuǎn)發(fā)的路徑;利用交換機(jī)的凈空緩沖區(qū)的可用空間和環(huán)路轉(zhuǎn)發(fā)表,讓死鎖環(huán)路上的數(shù)據(jù)幀沿環(huán)路流動(dòng),其中,當(dāng)任意數(shù)據(jù)幀沿環(huán)路流動(dòng)至一個(gè)交換機(jī)時(shí)由該交換機(jī)按原始轉(zhuǎn)發(fā)表確定是否存在將該數(shù)據(jù)幀轉(zhuǎn)發(fā)出環(huán)路的機(jī)會(huì),若是,則將該數(shù)據(jù)幀按原始轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā)出環(huán)路,若否,則將該數(shù)據(jù)幀繼續(xù)沿環(huán)路轉(zhuǎn)發(fā)。
4、可選的,所述方法還包括:在死鎖環(huán)路上的數(shù)據(jù)幀繞行環(huán)路時(shí),所述多個(gè)交換機(jī)均暫停其上游的交換機(jī)將死鎖環(huán)路以外的數(shù)據(jù)幀送到該環(huán)路內(nèi);當(dāng)死鎖環(huán)路上的數(shù)據(jù)幀沿環(huán)路流動(dòng)一圈后,確定死鎖是否解開(kāi),若是,則將環(huán)路轉(zhuǎn)發(fā)表無(wú)效以恢復(fù)常規(guī)的轉(zhuǎn)發(fā)規(guī)則,若否,則讓死鎖環(huán)路上的數(shù)據(jù)幀再次沿環(huán)路流動(dòng)或者啟用其他的死鎖解除方式。
5、可選的,所述方法還包括:當(dāng)每個(gè)交換機(jī)的數(shù)據(jù)幀開(kāi)始沿環(huán)路流動(dòng)前,先在處于隊(duì)首的數(shù)據(jù)幀前添加一個(gè)屏障數(shù)據(jù)幀;由交換機(jī)設(shè)置解鎖期間死鎖環(huán)路上的數(shù)據(jù)幀的轉(zhuǎn)發(fā)方式,其中,將屏障數(shù)據(jù)幀的轉(zhuǎn)發(fā)方式設(shè)置為沿環(huán)路轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā),將非屏障數(shù)據(jù)幀的轉(zhuǎn)發(fā)方式設(shè)置為僅能從指定的出環(huán)交換機(jī)轉(zhuǎn)發(fā)出環(huán)路,該指定的出環(huán)交換機(jī)是非屏障數(shù)據(jù)幀在沿環(huán)路流動(dòng)前離其最近的交換機(jī)且該交換機(jī)的原始轉(zhuǎn)發(fā)表中有讓該非屏障數(shù)據(jù)幀離開(kāi)死鎖環(huán)路的端口;當(dāng)交換機(jī)識(shí)別到自己發(fā)出的屏障數(shù)據(jù)幀時(shí),暫停將收到屏障數(shù)據(jù)幀及其之后的數(shù)據(jù)幀發(fā)送到環(huán)路上的下游交換機(jī)。
6、可選的,當(dāng)暫停屏障數(shù)據(jù)幀及其之后的數(shù)據(jù)幀沿環(huán)路流動(dòng)后,若確定死鎖解開(kāi),則交換機(jī)丟棄屏障數(shù)據(jù)幀;若死鎖未解開(kāi)且需讓死鎖環(huán)路上的數(shù)據(jù)幀再次沿環(huán)路流動(dòng)時(shí)沿用屏障數(shù)據(jù)幀。
7、可選的,所述方法還包括:在死鎖環(huán)路的解鎖期間,讓死鎖環(huán)路上的交換機(jī)執(zhí)行解鎖期間的緩沖區(qū)管理策略,解鎖期間的緩沖區(qū)管理策略包括:當(dāng)位于死鎖環(huán)路上的出隊(duì)列將一個(gè)數(shù)據(jù)幀按原始轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā)出環(huán)路時(shí),先從該數(shù)據(jù)幀所對(duì)應(yīng)的入隊(duì)列的共享緩沖區(qū)扣除數(shù)據(jù)幀的占用空間。
8、可選的,所述讓死鎖環(huán)路上的數(shù)據(jù)幀沿環(huán)路流動(dòng)的處理包括:由每個(gè)交換機(jī)維護(hù)多個(gè)入隊(duì)列和多個(gè)出隊(duì)列,所述死鎖環(huán)路上的交換機(jī)將死鎖環(huán)路對(duì)應(yīng)的入隊(duì)列的凈空緩沖區(qū)的可用空間作為信用值授予給上游的交換機(jī);由上游的交換機(jī)維護(hù)下游的交換機(jī)賦予的信用值,以向授予信用值的交換機(jī)對(duì)應(yīng)的入隊(duì)列限量發(fā)送數(shù)據(jù)幀,當(dāng)剩余信用值不足以發(fā)送下一個(gè)數(shù)據(jù)幀時(shí)暫停發(fā)送數(shù)據(jù)幀,其中,所述維護(hù)包括:每發(fā)送一個(gè)數(shù)據(jù)幀從信用值中扣除所發(fā)送的數(shù)據(jù)量大小,當(dāng)再次收到授予的信用值時(shí)與剩余信用值進(jìn)行累加以更新剩余信用值。
9、可選的,確定處于死鎖環(huán)路中的多個(gè)交換機(jī)的方式包括:從所述死鎖環(huán)路中選定交換機(jī)作為協(xié)調(diào)者;由所述協(xié)調(diào)者按pfc幀的方向往上游的交換機(jī)發(fā)出第一數(shù)據(jù)幀,交換機(jī)逐個(gè)向其上游的交換機(jī)發(fā)送要求添加交換機(jī)自己的全局id的自定義的第一數(shù)據(jù)幀,其中,協(xié)調(diào)者發(fā)出的第一數(shù)據(jù)幀插入有協(xié)調(diào)者自己的全局id;當(dāng)任意交換機(jī)收到第一數(shù)據(jù)幀時(shí),將自己的全局id按序插入第一數(shù)據(jù)幀中,得到更新的第一數(shù)據(jù)幀,并繼續(xù)按pfc幀的方向?qū)⒏碌牡谝粩?shù)據(jù)幀發(fā)送給其上游的交換機(jī);當(dāng)協(xié)調(diào)者從其上游的交換機(jī)收到返回的第一數(shù)據(jù)幀時(shí),其中記錄有死鎖環(huán)路中多個(gè)交換機(jī)的按序排列的全局id。
10、可選的,確定處于死鎖環(huán)路中的多個(gè)交換機(jī)的方式包括:構(gòu)建所述環(huán)路轉(zhuǎn)發(fā)表的方式包括:根據(jù)按序排列的全局id和全局id-本地端口映射表,構(gòu)建環(huán)路轉(zhuǎn)發(fā)表,環(huán)路轉(zhuǎn)發(fā)表包括交換機(jī)與環(huán)路中上游、下游的交換機(jī)相連的入端口和出端口。
11、根據(jù)本發(fā)明的第二方面,提供一種電子設(shè)備,包括:一個(gè)或多個(gè)處理器;以及存儲(chǔ)器,其中存儲(chǔ)器用于存儲(chǔ)可執(zhí)行指令;所述一個(gè)或多個(gè)處理器被配置為經(jīng)由執(zhí)行所述可執(zhí)行指令以實(shí)現(xiàn)第一方面所述方法的步驟。