鏈路數(shù)據(jù)保護的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于信息技術(shù)領(lǐng)域,具體說涉及一種鏈路數(shù)據(jù)保護的方法和裝置。
【背景技術(shù)】
[0002]在信息技術(shù)的諸多領(lǐng)域里,數(shù)據(jù)板卡之間的高速通信越來越常見。例如,在存儲技術(shù)領(lǐng)域,為云計算服務(wù)的存儲設(shè)備,為了追求卓越的性能往往使用閃存進行數(shù)據(jù)存儲,在負責(zé)網(wǎng)絡(luò)處理的板卡和負責(zé)數(shù)據(jù)存儲的板卡之間會存在大量的數(shù)據(jù)通信。板卡之間的通信常使用高速serdes (英文serializer(串行器)/deserializer (解串器)的合并簡稱)鏈路。高速serdes鏈路傳輸數(shù)據(jù)容易存在傳輸錯誤、接收方對數(shù)據(jù)流量不可預(yù)知、鏈路異常等問題,因此保證鏈路傳輸?shù)恼_性顯得非常重要。
[0003]通常高速serdes鏈路只負責(zé)傳輸數(shù)據(jù),并不保證數(shù)據(jù)正確,也不會在板卡之間出現(xiàn)數(shù)據(jù)擁堵時及時控制鏈路上的數(shù)據(jù)流量,更無法在鏈路出現(xiàn)異常時保證數(shù)據(jù)不丟失。在存儲技術(shù)領(lǐng)域,如果出現(xiàn)數(shù)據(jù)包錯誤、數(shù)據(jù)包丟失或硬件設(shè)備受到干擾失靈等問題,會對存儲請求造成致命影響。為了防止這樣的問題出現(xiàn),確保正確的數(shù)據(jù)傳輸,一般在上層軟件層面對數(shù)據(jù)包進行標識、校驗,數(shù)據(jù)流量過大時直接丟棄處理,然后發(fā)送請求消息,要求數(shù)據(jù)板卡重新傳輸。這樣實際上是由上層系統(tǒng)來保證數(shù)據(jù)的正確性,會增加上層系統(tǒng)的數(shù)據(jù)處理及數(shù)據(jù)存儲壓力,另外還會導(dǎo)致整個數(shù)據(jù)通路延長,保障的風(fēng)險加大。
[0004]在說明書“【背景技術(shù)】”部分公開的內(nèi)容,有助于本領(lǐng)域技術(shù)人員理解本發(fā)明的技術(shù)方案,但不應(yīng)據(jù)此認為這些內(nèi)容一定屬于現(xiàn)有技術(shù)或公知常識。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種鏈路數(shù)據(jù)保護的方法,該方法與數(shù)據(jù)板卡相關(guān)。
[0006]本發(fā)明所述的數(shù)據(jù)板卡,泛指能夠傳輸數(shù)據(jù)(即發(fā)送或接收數(shù)據(jù))的設(shè)備或裝置。數(shù)據(jù)板卡為了實現(xiàn)傳輸數(shù)據(jù)的功能,相應(yīng)的也要具備一定的數(shù)據(jù)處理、數(shù)據(jù)存儲等其他功能。數(shù)據(jù)板卡之間傳輸數(shù)據(jù)時需要建立鏈路,處于鏈路上的正在發(fā)送或接收過程中的數(shù)據(jù)可以稱為鏈路數(shù)據(jù)。數(shù)據(jù)板卡之間傳輸數(shù)據(jù)要遵照一定的通信協(xié)議。通信協(xié)議往往將數(shù)據(jù)分割為數(shù)據(jù)包,以數(shù)據(jù)包作為發(fā)送或接收數(shù)據(jù)的最小單位。數(shù)據(jù)板卡一般通過集成電路即硬件的方式實現(xiàn),如果有必要也可以使用軟件來虛擬數(shù)據(jù)板卡。
[0007]本發(fā)明涉及到發(fā)送板卡和接收板卡,這兩個概念是相對于某數(shù)據(jù)的發(fā)送或接收過程而言的,是相對而非是絕對的概念。例如,數(shù)據(jù)板卡a將數(shù)據(jù)A發(fā)送給數(shù)據(jù)板卡b,同時從數(shù)據(jù)板卡c接收數(shù)據(jù)B,則數(shù)據(jù)板卡a相對于數(shù)據(jù)A和數(shù)據(jù)板卡b而言是發(fā)送板卡,相對于數(shù)據(jù)B和數(shù)據(jù)板卡c而言是接收板卡。
[0008]鏈路數(shù)據(jù)保護的方法,包括:發(fā)送板卡發(fā)送附帶序號和校驗值的主數(shù)據(jù)包,接收板卡驗證收到的主數(shù)據(jù)包的序號和校驗值,根據(jù)驗證結(jié)果進行處理。
[0009]本發(fā)明所涉及的數(shù)據(jù)包,包括主數(shù)據(jù)包和驗證包。數(shù)據(jù)板卡傳輸?shù)臄?shù)據(jù)包中,一類數(shù)據(jù)包是由根據(jù)數(shù)據(jù)板卡的功能設(shè)計“真正需要”發(fā)送或接收的數(shù)據(jù)形成的,這類數(shù)據(jù)包稱為主數(shù)據(jù)包;而另一類數(shù)據(jù)包只是用來反饋主數(shù)據(jù)包是否傳輸成功,這類數(shù)據(jù)包稱為驗證包。本發(fā)明所述的發(fā)送板卡和接收板卡,基于主數(shù)據(jù)包進行定義,發(fā)送主數(shù)據(jù)包的板卡為發(fā)送板卡,接收主數(shù)據(jù)包的板卡為接收板卡。為了區(qū)別某個數(shù)據(jù)包是主數(shù)據(jù)包還是驗證包,數(shù)據(jù)板卡為數(shù)據(jù)包設(shè)置了一個標識,本發(fā)明涉及的所有數(shù)據(jù)包都帶有標識。
[0010]主數(shù)據(jù)包的序號,指為了驗證主數(shù)據(jù)包是否傳輸成功而設(shè)置的數(shù)值。主數(shù)據(jù)包的序號最常見的生成規(guī)則是發(fā)送板卡發(fā)送的第一個主數(shù)據(jù)包的序號設(shè)為0,之后依次發(fā)送的主數(shù)據(jù)包的序號逐次增加I。
[0011]校驗值,指對數(shù)據(jù)包中的數(shù)據(jù)進行校驗計算后產(chǎn)生的數(shù)值。目前已經(jīng)公開了非常多的數(shù)據(jù)校驗算法,如crcl6算法。發(fā)送板卡發(fā)送主數(shù)據(jù)包時進行一次校驗計算得到校驗值,將該校驗值附帶在主數(shù)據(jù)包中,接收板卡收到主數(shù)據(jù)包后再進行一次檢驗計算得到校驗值,比較該校驗值與主數(shù)據(jù)包中附帶的校驗值是否一致就可以得知主數(shù)據(jù)包中的數(shù)據(jù)在傳輸過程中是否發(fā)生了錯誤。
[0012]對于驗證包,為了保證其數(shù)據(jù)的正確性,驗證包也應(yīng)附帶校驗值,校驗值的生成方法及驗證包的校驗方法與主數(shù)據(jù)包相同。由于驗證包是為了反饋主數(shù)據(jù)包是否傳輸成功,驗證包不需要獨立的序號,附帶由其反饋信息的主數(shù)據(jù)包(即對應(yīng)的主數(shù)據(jù)包)的序號即可,其對應(yīng)的主數(shù)據(jù)包的序號也可以視為驗證包的序號。
[0013]上述“根據(jù)驗證結(jié)果進行處理”,包括如下幾種處理方法:
[0014]如果接收板卡收到的主數(shù)據(jù)包的序號與序號生成規(guī)則一致,對主數(shù)據(jù)包數(shù)據(jù)計算得到的校驗值與主數(shù)據(jù)包中附帶的校驗值一致,則接收板卡存儲該主數(shù)據(jù)包并向發(fā)送板卡發(fā)送顯示驗證正確的驗證包。
[0015]這種情況意味著主數(shù)據(jù)包中的數(shù)據(jù)正確,鏈路在數(shù)據(jù)傳輸過程中不存在錯誤,發(fā)送板卡向接收板卡發(fā)送數(shù)據(jù)包的過程將持續(xù)下去。
[0016]如果接收板卡收到的主數(shù)據(jù)包的序號與序號生成規(guī)則一致,對主數(shù)據(jù)包數(shù)據(jù)計算得到的校驗值與主數(shù)據(jù)包中附帶的校驗值不一致,則接收板卡丟棄該主數(shù)據(jù)包并向發(fā)送板卡發(fā)送顯示驗證錯誤的驗證包。
[0017]這種情況意味著主數(shù)據(jù)包在傳輸過程中不存在異常丟包,但主數(shù)據(jù)包中的數(shù)據(jù)產(chǎn)生了錯誤(這種錯誤可以稱為比特錯誤,bit eiror)。發(fā)送板卡收到顯示驗證錯誤的驗證包后,向接收板卡重新發(fā)送該主數(shù)據(jù)包。
[0018]如果接收板卡收到的主數(shù)據(jù)包的序號與序號生成規(guī)則不一致,則接收板卡丟棄該主數(shù)據(jù)包,不向發(fā)送板卡發(fā)送任何驗證包。
[0019]這種情況意味著主數(shù)據(jù)包在傳輸過程中存在異常丟包。發(fā)送板卡未收到驗證包達到一定時間后,將所有未收到對應(yīng)驗證包的主數(shù)據(jù)包重新向接收板卡發(fā)送(這稱為timeout 機制)。
[0020]除了上面幾種情況外,鏈路還可能出現(xiàn)非正常斷開、重新連接等異常情況,這會導(dǎo)致主數(shù)據(jù)包和驗證包產(chǎn)生其他問題。這時相應(yīng)的處理方法包括:
[0021]如果對驗證包數(shù)據(jù)計算得到的校驗值與驗證包中附帶的校驗值不一致,發(fā)送板卡視為未收到驗證包。數(shù)據(jù)傳輸過程中,主數(shù)據(jù)包可能產(chǎn)生比特錯誤,驗證包同樣可能產(chǎn)生比特錯誤。發(fā)送板卡收到驗證包后也需要再計算一次校驗值,如果對驗證包數(shù)據(jù)計算得到的校驗值與驗證包中附帶的校驗值不一致,表明驗證包中的數(shù)據(jù)產(chǎn)生了比特錯誤,此時發(fā)送板卡將該驗證包直接丟棄,視為未收到驗證包。這樣處理,發(fā)送板卡可以啟動timeout機制,保證主數(shù)據(jù)包的傳輸不存在問題。
[0022]如果接收板卡在收到某個主數(shù)據(jù)包并向發(fā)送板卡發(fā)送顯示驗證正確的驗證包后又收到該主數(shù)據(jù)包,則丟棄后收到的該主數(shù)據(jù)包。出現(xiàn)這種情況表明驗證包出現(xiàn)了丟包,發(fā)送板卡不知道接收板卡已經(jīng)收到了正確的主數(shù)據(jù)包,通過timeout機制重新發(fā)送。此時接收板卡將后面又收到的該主數(shù)據(jù)包直接丟棄即可。
[0023]鏈路數(shù)據(jù)保護的方法,還包括:發(fā)送板卡主數(shù)據(jù)包的存儲空間和接收板卡主數(shù)據(jù)包的存儲空間相等。發(fā)送板卡在發(fā)送主數(shù)據(jù)包后未收到接收板卡對應(yīng)的顯示驗證正確的驗證包前,不刪除該主數(shù)據(jù)包。
[0024]數(shù)據(jù)板卡之間發(fā)送或接收數(shù)據(jù),應(yīng)當實施必要的數(shù)據(jù)流量控制,特別是當數(shù)據(jù)板卡之間采用高速鏈路時。高速鏈路往往默認數(shù)據(jù)只要發(fā)出對方就可以接收,不進行數(shù)據(jù)流量控制會嚴重影響數(shù)據(jù)傳輸?shù)陌踩浴H缜八?,?shù)據(jù)板卡也具有數(shù)據(jù)存儲的功能,將發(fā)送板卡主數(shù)據(jù)包的存儲空間和接收板卡主數(shù)據(jù)包的存儲空間設(shè)計為相等,實現(xiàn)了發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的對等,不會出現(xiàn)發(fā)送板卡發(fā)送的主數(shù)據(jù)包過多,接收板卡無法接收只能丟棄的情況。同時,發(fā)送板卡在發(fā)送主數(shù)據(jù)包后未收到接收板卡對應(yīng)的顯示驗證正確的驗證包前,不刪除該主數(shù)據(jù)包釋放其存儲空間,這樣進一步使得接收板卡未能正確接收主數(shù)據(jù)包時發(fā)送板卡因存儲空間的限制無法繼續(xù)大量發(fā)送主數(shù)據(jù)包,實現(xiàn)了對數(shù)據(jù)流量的控制,保證了鏈路的運行效率。
[0025]鏈路數(shù)據(jù)保護的方法,還包括:數(shù)據(jù)板卡(發(fā)送板卡或接收板卡)對于待發(fā)送的主數(shù)據(jù)包和驗證包,優(yōu)先發(fā)送驗證包。
[0026]由于發(fā)送板卡和接收板卡是一個相對的概念,有時可能出現(xiàn)某個數(shù)據(jù)板卡同時作為發(fā)送板卡發(fā)送主數(shù)據(jù)包和接收板卡發(fā)送驗證包的情況,此時兩種數(shù)據(jù)包的發(fā)送就形成了競爭關(guān)系,需要仲裁解決發(fā)送的優(yōu)先級。由于驗證包關(guān)系到其他板卡主數(shù)據(jù)包的發(fā)送,對由所有數(shù)據(jù)板卡構(gòu)成的板卡體系數(shù)據(jù)傳輸?shù)挠绊戄^大,對于同時提交的待發(fā)送的主數(shù)據(jù)包和驗證包,應(yīng)當優(yōu)先發(fā)送驗證包。特別注意,該仲裁規(guī)則只在所有數(shù)據(jù)包都為待發(fā)送狀態(tài)時方有效。如果主數(shù)據(jù)包開始發(fā)送后驗證包的發(fā)送請求才提交,為了保證數(shù)據(jù)包的完整性和數(shù)據(jù)傳輸?shù)姆€(wěn)定性,不允許中斷主數(shù)據(jù)包的發(fā)送,只有當主數(shù)據(jù)包發(fā)送完成后才能發(fā)送驗證