本發(fā)明涉及基于加密卡的計算機(jī)數(shù)據(jù)加解密技術(shù),具體涉及一種基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法。
背景技術(shù):
在政府、軍隊、有保密要求的企業(yè)或組織內(nèi)部有對重要數(shù)據(jù)進(jìn)行加密的需求。出于保密性和性能的考慮,現(xiàn)有數(shù)據(jù)加密系統(tǒng)普遍使用硬件加解密。加密硬件為pci卡的形式(以下簡稱加密卡)。單塊加密卡的加解密速度是有上限的。對于單臺主機(jī)來說,有時單塊加密卡并不能在速度上滿足處理大量數(shù)據(jù)的需要,因此可同時插入多塊加密卡分擔(dān)任務(wù)。因為加解密每個數(shù)據(jù)塊的任務(wù)彼此獨立不相互依賴,對于多卡環(huán)境,可簡單的把加解密數(shù)據(jù)塊任務(wù)平均分配到每個加密卡上,這也是目前使用的加密卡調(diào)度算法。
每個加密卡有多個端口,每個端口可處理一個加解密數(shù)據(jù)任務(wù),也就是說一個有n個端口的正常狀態(tài)下的加密卡可同時進(jìn)行n個數(shù)據(jù)的加解密。
在實際使用過程中,加密卡可能出現(xiàn)故障,導(dǎo)致加解密無法進(jìn)行。對于單卡系統(tǒng)來說,由于加密卡故障為單點故障,從而導(dǎo)致整個系統(tǒng)故障。對于多卡系統(tǒng),當(dāng)一部分加密卡出現(xiàn)故障時,在使用目前調(diào)度算法的情況下,當(dāng)任務(wù)分配到故障加密卡上時,會導(dǎo)致該任務(wù)失敗,總體看來會有部分任務(wù)失敗。因此即使多卡系統(tǒng)也無法冗余加密卡故障。
在實際的加密卡加解密過程中,發(fā)現(xiàn)有時在密鑰和數(shù)據(jù)正確的情況下,會出現(xiàn)錯誤的結(jié)果。這種錯誤具有隨機(jī)性,表現(xiàn)為對于相同的密鑰和數(shù)據(jù),在同一加密卡上重復(fù)加密兩次,可能會出現(xiàn)不同的結(jié)果,考慮結(jié)果的惟一性,必然有一次產(chǎn)生了錯誤的結(jié)果。這種情況通常不被認(rèn)為是加密卡故障,但是如何保證數(shù)據(jù)的正確性,仍然是一項亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題:針對現(xiàn)有技術(shù)的上述問題,提供一種考慮到了加密卡的數(shù)據(jù)錯誤及調(diào)用錯誤等情況,使用特定調(diào)度算法在多卡環(huán)境下建立冗余,最大限度提高了多加密卡并行性能和系統(tǒng)可用性,降低了數(shù)據(jù)錯誤率的基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法。
為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
一種基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法,其特征在于實施步驟包括:
1)預(yù)先維護(hù)一個加密卡狀態(tài)列表、為每一個加密卡維護(hù)一個端口狀態(tài)列表,所述加密卡狀態(tài)列表包括每一個加密卡的狀態(tài),所述加密卡的狀態(tài)包括正常、故障和飽和三種,所述端口狀態(tài)列表包括加密卡的每一個端口的狀態(tài),所述端口的狀態(tài)包括使用中和未使用兩種;初始化用于存放加解密任務(wù)的等待隊列;當(dāng)收到當(dāng)前加解密任務(wù)時,跳轉(zhuǎn)執(zhí)行步驟2);
2)將當(dāng)前加解密任務(wù)分配到兩個正常狀態(tài)的加密卡中的兩個未使用的目標(biāo)端口進(jìn)行指定的加密或解密處理,且在兩個目標(biāo)端口進(jìn)行指定的加密或解密處理的輸出一致的情況下判定當(dāng)前加解密任務(wù)執(zhí)行成功,調(diào)用目標(biāo)端口過程中將目標(biāo)端口標(biāo)記為使用中、且在調(diào)用目標(biāo)端口完畢后恢復(fù)端口為未使用,如果加密卡端口全在使用中且標(biāo)記該加密卡為飽和,且根據(jù)目標(biāo)端口的調(diào)用成功情況標(biāo)記加密卡的狀態(tài)為正?;蚬收蠣顟B(tài)。
2.根據(jù)權(quán)利要求1所述的基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法,其特征在于,步驟2)的詳細(xì)步驟包括:
2.1)判斷等待隊列是否為空,如果等待隊列為空則直接跳轉(zhuǎn)執(zhí)行步驟2.2);否則,將當(dāng)前加解密任務(wù)加入等待隊列,且在等待隊列中位于當(dāng)前加解密任務(wù)前面的任務(wù)全部完成后,跳轉(zhuǎn)執(zhí)行步驟2.2);
2.2)根據(jù)加密卡狀態(tài)列表嘗試獲取正常狀態(tài)的兩個加密卡,如果獲取成功,則跳轉(zhuǎn)執(zhí)行步驟2.3);否則,將加密卡總數(shù)量減去處于故障狀態(tài)的加密卡數(shù)量得到可用加密卡數(shù)量,如果可用加密卡數(shù)量小于二則返回錯誤并退出,如果可用加密卡數(shù)量大于等于二,則跳轉(zhuǎn)執(zhí)行步驟2.1);
2.3)根據(jù)兩個加密卡的端口狀態(tài)列表,從所述兩個加密卡中分別獲取一個未使用的端口,并置該端口狀態(tài)為已使用,如果此時加密卡的所有端口均被使用,則將加密卡狀態(tài)列表中該加密卡的相關(guān)狀態(tài)置為飽和,最終得到分屬于不同加密卡的兩個端口作為兩個目標(biāo)端口;
2.4)將當(dāng)前加解密任務(wù)分別調(diào)用兩個目標(biāo)端口進(jìn)行指定的加密或解密處理得到兩個輸出;如果兩個目標(biāo)端口均調(diào)用正常、且兩個輸出相同則返回當(dāng)前加解密任務(wù)執(zhí)行成功;如果兩個目標(biāo)端口均調(diào)用正常、且兩個輸出不同,則返回當(dāng)前加解密任務(wù)執(zhí)行校驗錯誤;如果任意目標(biāo)端口調(diào)用出錯,則將加密卡狀態(tài)列表中調(diào)用出錯的目標(biāo)端口對應(yīng)加密卡的相關(guān)狀態(tài)置為故障,返回當(dāng)前加解密任務(wù)執(zhí)行錯誤;
2.5)針對調(diào)用正常的目標(biāo)端口對應(yīng)的加密卡,將對應(yīng)端口狀態(tài)列表中的目標(biāo)端口的狀態(tài)置為未使用,且將加密卡狀態(tài)列表中的對應(yīng)狀態(tài)置為正常。
本發(fā)明基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法具有下述優(yōu)點:
1、本發(fā)明方法預(yù)先維護(hù)一個加密卡狀態(tài)列表、為每一個加密卡維護(hù)一個端口狀態(tài)列表,加密卡的狀態(tài)包括正常、故障和飽和三種,端口狀態(tài)包括使用中和未使用兩種;初始化用于存放加解密任務(wù)的等待隊列;當(dāng)收到當(dāng)前加解密任務(wù)時,將當(dāng)前加解密任務(wù)分配到兩個正常狀態(tài)的加密卡中的兩個未使用的目標(biāo)端口進(jìn)行指定的加密或解密處理,輸出一致的情況則判定當(dāng)前加解密任務(wù)執(zhí)行成功,在調(diào)用過程中更新維護(hù)加密卡狀態(tài)列表和端口狀態(tài)列表,本發(fā)明考慮到了加密卡的數(shù)據(jù)錯誤及調(diào)用錯誤等情況,使用特定調(diào)度算法在多卡環(huán)境下建立冗余,最大限度提高了多加密卡并行性能和系統(tǒng)可用性,降低了數(shù)據(jù)錯誤率。
2、本發(fā)明能夠解決現(xiàn)有采用多加密卡環(huán)境的數(shù)據(jù)加解密系統(tǒng)存在加密卡故障導(dǎo)致系統(tǒng)故障,以及加解密小概率產(chǎn)生錯誤結(jié)果的問題。
附圖說明
圖1為本發(fā)明實施例方法的應(yīng)用環(huán)境示意圖。
圖2為本發(fā)明實施例方法的流程示意圖。
圖3為本發(fā)明實施例中的加密卡狀態(tài)列表示意圖。
圖4為本發(fā)明實施例中的端口狀態(tài)列表示意圖。
圖5為本發(fā)明實施例中步驟2)的詳細(xì)流程示意圖。
圖6為本發(fā)明實施例中的等待隊列示意圖。
具體實施方式
如圖1所示,本實施例中具體是包含4塊加密卡的linux操作系統(tǒng)為例,對本發(fā)明基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法進(jìn)行進(jìn)一度的詳細(xì)說明。參見圖1,該包含4塊加密卡的linux操作系統(tǒng)文件系統(tǒng)驅(qū)動調(diào)度算法模塊,文件系統(tǒng)驅(qū)動為調(diào)度算法模塊的調(diào)用者,調(diào)度算法模塊則為加密卡驅(qū)動的調(diào)用者,加密卡驅(qū)動為原始的加密卡硬件接口,要求調(diào)用者指定卡號和端口號,調(diào)度算法模塊為采用本實施例基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法的實例,對上層調(diào)用者屏蔽了加密卡的細(xì)節(jié),提供了單一的加解密接口。
如圖2所示,本實施例基于多卡冗余校驗的數(shù)據(jù)加解密調(diào)度方法的實施步驟包括:
1)預(yù)先維護(hù)一個加密卡狀態(tài)列表(如圖3所示,其中卡1、卡2、卡3……分別不同的加密卡)、為每一個加密卡維護(hù)一個端口狀態(tài)列表(如圖4所示,其中端口1、端口2、端口3……分別同一加密卡的不同端口),加密卡狀態(tài)列表包括每一個加密卡的狀態(tài),加密卡的狀態(tài)包括正常、故障和飽和三種,端口狀態(tài)列表包括加密卡的每一個端口的狀態(tài),端口的狀態(tài)包括使用中和未使用兩種;初始化用于存放加解密任務(wù)的等待隊列(如圖5所示,其中任務(wù)1~任務(wù)n表示等待隊列中緩存的任務(wù));當(dāng)收到當(dāng)前加解密任務(wù)時,跳轉(zhuǎn)執(zhí)行步驟2);
2)將當(dāng)前加解密任務(wù)分配到兩個正常狀態(tài)的加密卡中的兩個未使用的目標(biāo)端口進(jìn)行指定的加密或解密處理,且在兩個目標(biāo)端口進(jìn)行指定的加密或解密處理的輸出一致的情況下判定當(dāng)前加解密任務(wù)執(zhí)行成功,調(diào)用目標(biāo)端口過程中將目標(biāo)端口標(biāo)記為使用中、且在調(diào)用目標(biāo)端口完畢后恢復(fù)端口為未使用,如果加密卡端口全在使用中且標(biāo)記該加密卡為飽和,且根據(jù)目標(biāo)端口的調(diào)用成功情況標(biāo)記加密卡的狀態(tài)為正?;蚬收蠣顟B(tài)。
如圖6所示,步驟2)的詳細(xì)步驟包括:
2.1)判斷等待隊列是否為空,如果等待隊列為空則直接跳轉(zhuǎn)執(zhí)行步驟2.2);否則,將當(dāng)前加解密任務(wù)加入等待隊列,且在等待隊列中位于當(dāng)前加解密任務(wù)前面的任務(wù)全部完成后,跳轉(zhuǎn)執(zhí)行步驟2.2);本實施例中,等待隊列采用fifo的方式進(jìn)行調(diào)度,如果等待隊列非空,則將當(dāng)前加解密任務(wù)加入等待隊列,直到前面的任務(wù)都完成才能夠?qū)?dāng)前加解密任務(wù)進(jìn)行調(diào)度處理,這樣做的目的是為了提供qos(服務(wù)質(zhì)量),防止的等待隊列中的任務(wù)可能長時間得不到處理;
2.2)根據(jù)加密卡狀態(tài)列表嘗試獲取正常狀態(tài)的兩個加密卡,如果獲取成功,則跳轉(zhuǎn)執(zhí)行步驟2.3);否則,將加密卡總數(shù)量減去處于故障狀態(tài)的加密卡數(shù)量得到可用加密卡數(shù)量,如果可用加密卡數(shù)量小于二則返回錯誤并退出,如果可用加密卡數(shù)量大于等于二,則跳轉(zhuǎn)執(zhí)行步驟2.1);
2.3)根據(jù)兩個加密卡的端口狀態(tài)列表,從兩個加密卡中分別獲取一個未使用的端口,并置該端口狀態(tài)為已使用,如果此時加密卡的所有端口均被使用,則將加密卡狀態(tài)列表中該加密卡的相關(guān)狀態(tài)置為飽和,最終得到分屬于不同加密卡的兩個端口作為兩個目標(biāo)端口;
2.4)將當(dāng)前加解密任務(wù)分別調(diào)用兩個目標(biāo)端口進(jìn)行指定的加密或解密處理得到兩個輸出;如果兩個目標(biāo)端口均調(diào)用正常、且兩個輸出相同則返回當(dāng)前加解密任務(wù)執(zhí)行成功;如果兩個目標(biāo)端口均調(diào)用正常、且兩個輸出不同,則返回當(dāng)前加解密任務(wù)執(zhí)行校驗錯誤;如果任意目標(biāo)端口調(diào)用出錯,則將加密卡狀態(tài)列表中調(diào)用出錯的目標(biāo)端口對應(yīng)加密卡的相關(guān)狀態(tài)置為故障,返回當(dāng)前加解密任務(wù)執(zhí)行錯誤;
2.5)針對調(diào)用正常的目標(biāo)端口對應(yīng)的加密卡,將對應(yīng)端口狀態(tài)列表中的目標(biāo)端口的狀態(tài)置為未使用,且將加密卡狀態(tài)列表中的對應(yīng)狀態(tài)置為正常。
以上所述僅是本發(fā)明的優(yōu)選實施方式,本發(fā)明的保護(hù)范圍并不僅局限于上述實施例,凡屬于本發(fā)明思路下的技術(shù)方案均屬于本發(fā)明的保護(hù)范圍。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理前提下的若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。