本發(fā)明涉及通信技術(shù),尤其涉及一種數(shù)據(jù)處理方法及電子設(shè)備。
背景技術(shù):
固態(tài)硬盤(SSD)存儲在PC消費(fèi)領(lǐng)域、在服務(wù)器領(lǐng)域以及移動電子設(shè)備中使用的越來越多,對性能要求也越來越高。
SSD的接口標(biāo)準(zhǔn)從串行高級技術(shù)附件(SATA)2、SATA3演變到高級外設(shè)部件互連標(biāo)準(zhǔn)第2代(PCIe G2),PCIe第3代(PCIe G3),SSD的數(shù)據(jù)吞吐量越來越大,這就要求處于SSD的控制器(包括CPU以及相關(guān)接口如PCIe接口)中的CPU也要具有非常強(qiáng)的數(shù)據(jù)處理能力,導(dǎo)致CPU的功耗居高不下,這對電子設(shè)備尤其是移動設(shè)備的續(xù)航產(chǎn)生不利影響。
對于如何降低SSD中的CPU因數(shù)據(jù)吞吐量較大執(zhí)行頻繁讀寫操作而導(dǎo)致功耗較大的問題,相關(guān)技術(shù)尚無有效解決方案。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種數(shù)據(jù)處理方法及電子設(shè)備,能夠降低CPU功耗,提升系統(tǒng)性能。
本發(fā)明實施例的技術(shù)方案是這樣實現(xiàn)的:
一方面,本發(fā)明實施例提供一種數(shù)據(jù)處理方法,包括:
接收來自主機(jī)端的第一命令;所述第一命令用于指示進(jìn)行目標(biāo)數(shù)據(jù)的讀/寫操作;
對所述第一命令進(jìn)行重組得到至少一個第二命令;每個所述第二命令指示操作的數(shù)據(jù)量相同;
查找對應(yīng)所述第二命令的空閑的命令通道,為所述空閑的命令通道分配所述第二命令;
基于所述空閑的命令通道執(zhí)行分配的所述第二命令。
上述方案中,所述對所述第一命令進(jìn)行重組得到至少一個第二命令,包括:
分析得到所述第一命令所請求操作的目標(biāo)數(shù)據(jù)的數(shù)據(jù)量;
確定所述數(shù)據(jù)量大于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,基于所述單位數(shù)據(jù)量將所述第一命令拆分為至少兩個第二命令;
確定所述數(shù)據(jù)量小于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,將與所述第一命令相同類型的命令合并為至少一個第二命令;
其中,所述第二命令指示操作所述目標(biāo)數(shù)據(jù)中對應(yīng)所述單位數(shù)據(jù)量的數(shù)據(jù)。
上述方案中,所述基于所述空閑的命令通道執(zhí)行分配的所述第二命令,包括:
確定所述第二命令為寫命令時,將所述第二命令指示寫入的數(shù)據(jù)存儲至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù);
基于所述空閑的命令通道,將所述緩存單元中的所述組合數(shù)據(jù)寫入數(shù)據(jù)存儲單元。
上述方案中,所述基于所述空閑的命令通道執(zhí)行分配的所述第二命令,包括:
確定所述第二命令為讀命令時,基于所述空閑的命令通道,從數(shù)據(jù)存儲單元讀取所述第二命令指示讀取的數(shù)據(jù)至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù);
將所述緩存單元中的所述組合數(shù)據(jù)發(fā)送至所述主機(jī)端。
上述方案中,所述方法還包括:
基于對應(yīng)所述第二命令的空閑的命令通道,生成對應(yīng)所述第二命令的命令描述符;所述命令描述符用作基于所述空閑的命令通道執(zhí)行分配的所述第二命令的依據(jù);
所述命令描述符包括以下至少之一:
所述第二命令對應(yīng)的數(shù)據(jù)操作類型;
所述第二命令對應(yīng)的命令標(biāo)識;
所述第二命令對應(yīng)的數(shù)據(jù)操作的邏輯地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的物理地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的目標(biāo)數(shù)據(jù)在緩存單元中的存儲地址;
所述第二命令對應(yīng)的命令完成狀態(tài)。
上述方案中,所述基于所述空閑的命令通道執(zhí)行分配的所述第二命令之后,所述方法還包括:
基于所述第二命令對應(yīng)的命令標(biāo)識,更新所述命令描述符中所述第二命令對應(yīng)的命令完成狀態(tài),以釋放所述第二命令對應(yīng)的命令通道。
上述方案中,所述方法還包括:
檢測到存在至少一個未被執(zhí)行的第二命令,且當(dāng)前沒有第二命令被執(zhí)行,觸發(fā)對未被執(zhí)行的第二命令的執(zhí)行。
另一方面,本發(fā)明實施例還提供一種電子設(shè)備,包括:
接口處理單元,用于接收來自主機(jī)端的第一命令;所述第一命令用于指示進(jìn)行目標(biāo)數(shù)據(jù)的讀/寫操作;
命令重組單元,用于對所述第一命令進(jìn)行重組得到至少一個第二命令;每個所述第二命令指示操作的數(shù)據(jù)量相同;
命令控制單元,用于查找對應(yīng)所述第二命令的空閑的命令通道,為所述空閑的命令通道分配所述第二命令;
閃存控制單元,用于基于所述空閑的命令通道執(zhí)行分配的所述第二命令。
上述方案中,所述命令重組單元,還用于分析得到所述第一命令所請求操作的目標(biāo)數(shù)據(jù)的數(shù)據(jù)量;
以及,確定所述數(shù)據(jù)量大于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,基于所述單位數(shù)據(jù)量將所述第一命令拆分為至少兩個第二命令;
以及,確定所述數(shù)據(jù)量小于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,將與所述第一命令相同類型的命令合并為至少一個第二命令;
其中,所述第二命令指示操作所述目標(biāo)數(shù)據(jù)中對應(yīng)所述單位數(shù)據(jù)量的數(shù)據(jù)。
上述方案中,所述電子設(shè)備還包括緩存單元及數(shù)據(jù)存儲單元;
所述命令重組單元,還用于確定所述第二命令為寫命令時,將所述第二命令指示寫入的數(shù)據(jù)存儲至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù);
所述閃存控制單元,還用于基于所述空閑的命令通道,將所述緩存單元中的所述組合數(shù)據(jù)寫入數(shù)據(jù)存儲單元。
上述方案中,所述電子設(shè)備還包括緩存單元及數(shù)據(jù)存儲單元;
所述閃存控制單元,還用于確定所述第二命令為讀命令時,基于所述空閑的命令通道,從數(shù)據(jù)存儲單元讀取所述第二命令指示讀取的數(shù)據(jù)至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù);
所述命令重組單元,還用于將緩存單元中的所述組合數(shù)據(jù)通過所述接口控制單元發(fā)送至所述主機(jī)端。
上述方案中,所述命令控制單元,還用于基于對應(yīng)所述第二命令的空閑的命令通道,生成對應(yīng)所述第二命令的命令描述符;所述命令描述符用作基于所述空閑的命令通道執(zhí)行分配的所述第二命令的依據(jù);
所述命令描述符包括以下至少之一:
所述第二命令對應(yīng)的數(shù)據(jù)操作類型;
所述第二命令對應(yīng)的命令標(biāo)識;
所述第二命令對應(yīng)的數(shù)據(jù)操作的邏輯地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的物理地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的目標(biāo)數(shù)據(jù)在緩存單元中的存儲地址;
所述第二命令對應(yīng)的命令完成狀態(tài)。
上述方案中,所述閃存控制單元,還用于基于所述第二命令對應(yīng)的命令標(biāo)識,更新所述命令描述符中所述第二命令對應(yīng)的命令完成狀態(tài),以使所述命令重組單元基于所述命令完成狀態(tài)釋放所述第二命令對應(yīng)的命令通道。
上述方案中,所述命令控制單元,還用于檢測到存在至少一個未被執(zhí)行的第二命令,且當(dāng)前沒有第二命令被執(zhí)行,觸發(fā)所述閃存控制單元對未被執(zhí)行的第二命令的執(zhí)行。
本發(fā)明實施例中,接收來自主機(jī)端的第一命令;所述第一命令用于指示進(jìn)行目標(biāo)數(shù)據(jù)的讀/寫操作;對所述第一命令進(jìn)行重組得到至少一個第二命令;每個所述第二命令指示操作的數(shù)據(jù)量相同;查找對應(yīng)所述第二命令的空閑的命令通道,為所述空閑的命令通道分配所述第二命令;基于所述空閑的命令通道執(zhí)行分配的所述第二命令;如此,命令信息與數(shù)據(jù)塊數(shù)據(jù)并行處理,互不影響,速度快;且數(shù)據(jù)處理處理過程中只需要SSD中的CPU少量參與,大量工作都由硬件自動完成,降低CPU負(fù)載,并提升系統(tǒng)性能。
附圖說明
圖1為本發(fā)明實施例中數(shù)據(jù)處理方法的實現(xiàn)流程示意圖一;
圖2為本發(fā)明實施例中電子設(shè)備的組成結(jié)構(gòu)示意圖一;
圖3為本發(fā)明實施例中地址映射表的示意圖;
圖4為本發(fā)明實施例中命令描述符的信息結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例中數(shù)據(jù)處理方法的實現(xiàn)流程示意圖二;
圖6為本發(fā)明實施例中數(shù)據(jù)處理方法的邏輯框圖;
圖7為本發(fā)明實施例中電子設(shè)備的組成結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖和具體實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
實施例一
圖1為本發(fā)明實施例中數(shù)據(jù)處理方法的實現(xiàn)流程示意圖,應(yīng)用與電子設(shè)備,所述電子設(shè)備的一種組成結(jié)構(gòu)示意圖如圖2所示,如圖1、圖2所示,本發(fā)明實施例中數(shù)據(jù)處理方法包括:
步驟101:接收來自主機(jī)端的第一命令;所述第一命令用于指示進(jìn)行目標(biāo)數(shù)據(jù)的讀/寫操作。
在實際實施時,電子設(shè)備中的接口處理單元接收來自主機(jī)(Host)端的第一命令,該接口處理單元是電子設(shè)備與主機(jī)相連的接口,可以是SSD控制器芯片中的一個接口模塊,如USB、SATA、PCIe等。
來自主機(jī)的第一命令指示電子設(shè)備進(jìn)行目標(biāo)數(shù)據(jù)的讀操作或?qū)懖僮?,也即指示讀取SSD中數(shù)據(jù)存儲單元的目標(biāo)數(shù)據(jù)至主機(jī),或?qū)碜灾鳈C(jī)目標(biāo)數(shù)據(jù)寫入SSD中數(shù)據(jù)存儲單元。
步驟102:對所述第一命令進(jìn)行重組得到至少一個第二命令;每個所述第二命令指示操作的數(shù)據(jù)量相同。
這里,對主機(jī)端的第一命令進(jìn)行重組的目的是重組(組合/拆分)成適合Flash操作的第二命令,主要依據(jù)Flash顆粒的特性(頁大小)及SSD芯片中軟件處理的要求(單頁操作還是雙頁或多頁操作)而定;比如:Flash顆粒大小是16K字節(jié),軟件按雙頁操作,則會對主機(jī)來的數(shù)據(jù)進(jìn)行重組,重組成以32K字節(jié)為單位的數(shù)據(jù)塊;也即,第一命令指示操作的數(shù)據(jù)塊小的,則將多個命令合成一個新命令供后續(xù)操作,而第一命令指示操作的數(shù)據(jù)塊大的,則將第一命令拆成多個新命令供后面的流程處理。
具體的,在實際實施時,電子設(shè)備的命令重組單元接收到來自接口處理單元的第一命令后,分析得到所述第一命令所請求操作的目標(biāo)數(shù)據(jù)的數(shù)據(jù)量,然后,若確定所述數(shù)據(jù)量大于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,基于所述單位數(shù)據(jù)量將所述第一命令拆分為至少兩個第二命令;若確定所述數(shù)據(jù)量小于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,將與所述第一命令相同類型的命令合并為至少一個第二命令;
其中,所述第二命令指示操作所述目標(biāo)數(shù)據(jù)中對應(yīng)所述單位數(shù)據(jù)量的數(shù)據(jù);
與所述第一命令相同類型的命令指的是均為讀/寫操作,且指示進(jìn)行數(shù)據(jù)操作的物理地址指向同一Flash芯片的命令;
這里所述的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量,即為依據(jù)依據(jù)Flash頁大小及頁操作要求(單頁操作或雙頁操作或多頁操作)決定的每次進(jìn)行數(shù)據(jù)操作的數(shù)據(jù)量;如按照單頁操作,頁大小是16K字節(jié),則進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量為16K;如果按雙頁操作,頁大小是16K字節(jié),則進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量為32K字節(jié)。
由于主機(jī)的第一命令指示操作的數(shù)據(jù)量很有可能與進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量不同,如所述單位數(shù)據(jù)量為16K,第一命令指示操作的數(shù)據(jù)量為32K,則對第一命令進(jìn)行重組可得到兩個指示操作目標(biāo)數(shù)據(jù)中對應(yīng)單位數(shù)據(jù)量的數(shù)據(jù)的第二命令。
步驟103:查找對應(yīng)所述第二命令的空閑的命令通道,為所述空閑的命令通道分配所述第二命令。
在實際應(yīng)用中,通常存在多個Flash通道,每個Flash通道與SSD中的一個Flash芯片對應(yīng);本實施例中所述命令通道通常也存在多個,但命令通道與Flash通道不同,可以一個命令通道支持(對應(yīng))一個Flash通道,也可以一個命令通道支持(對應(yīng))多個Flash通道,或者多個命令通道支持(對應(yīng))一個Flash通道。
由于每個命令通道指向特定的Flash芯片,因此,電子設(shè)備中的命令控制單元依據(jù)第二命令指示操作的數(shù)據(jù)的物理地址查找所述第二命令對應(yīng)的命令通道的通道狀態(tài)(如空閑、被占用),當(dāng)對應(yīng)的命令通道空閑時將該空閑的命令通道分配所述第二命令,以基于該空閑的命令通道執(zhí)行分配的第二命令。
然而在實際實施時,第二命令指示操作的數(shù)據(jù)的物理地址為:依據(jù)預(yù)設(shè)的映射策略(地址映射表)對所述第二命令的邏輯操作地址進(jìn)行映射得到;這里,所述第二命令的邏輯操作地址為面向主機(jī)的邏輯地址,通過地址映射表查找邏輯操作地址相對應(yīng)Flash中的物理地址;其中,所述地址映射表如圖3所示。
在具體實施時,當(dāng)查找對應(yīng)第二命令的空閑的命令通道時,所述方法還包括:
命令控制單元基于對應(yīng)所述第二命令的空閑的命令通道,生成對應(yīng)所述第二命令的命令描述符,并負(fù)責(zé)對命令描述符的維護(hù);所述命令描述符包括以下至少之一:
所述第二命令對應(yīng)的數(shù)據(jù)操作類型;即指示數(shù)據(jù)讀操作或?qū)懖僮鳎?/p>
所述第二命令對應(yīng)的命令標(biāo)識;即命令I(lǐng)D,在實際實施時,若第二命令由第一命令拆分而來,則拆分得到的多個第二命令的命令I(lǐng)D相同且與所述被拆分的第一命令的命令I(lǐng)D相同;若第二命令由第一命令和另外一個類型相同的命令組合而來,則第二命令的命令I(lǐng)D包括兩部分,分別為第一命令的命令I(lǐng)D及另一個類型相同的命令的命令I(lǐng)D;所述第二命令的命令I(lǐng)D用于進(jìn)行數(shù)據(jù)操作過程中的識別和跟蹤,即可識別來自主機(jī)的第一命令是否完成,以對主機(jī)進(jìn)行響應(yīng);
所述第二命令對應(yīng)的數(shù)據(jù)操作的邏輯地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的物理地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的目標(biāo)數(shù)據(jù)在緩存單元中的存儲地址;
所述第二命令對應(yīng)的命令完成狀態(tài);所述第二命令的初始狀態(tài)為未完成,當(dāng)該第二命令被執(zhí)行完成時,即已完成相關(guān)Flash操作時,該命令完成狀態(tài)被更新為完成;
所述命令描述符的示意圖如圖4所示,需要說明的是,命令描述符包括的信息的順序非固定,可依據(jù)需要進(jìn)行調(diào)整,且包括的內(nèi)容還可根據(jù)實際需要進(jìn)行擴(kuò)展,并不限于上述信息;其中,圖4中的數(shù)據(jù)存儲狀態(tài)描述包括數(shù)據(jù)的存儲位置、長度等信息,通過鏈表結(jié)構(gòu)(如圖3)支持多個數(shù)據(jù)段的拼接(針對主機(jī)的寫操作)或分散發(fā)送(針對主機(jī)的讀操作)。
步驟104:基于所述空閑的命令通道執(zhí)行分配的所述第二命令。
基于本發(fā)明上述實施例,在實際應(yīng)用中,閃存控制單元,用于基于所述空閑的命令通道執(zhí)行分配的所述第二命令;
具體地,當(dāng)?shù)诙顬閷懨顣r,命令重組單元將所述第二命令指示寫入的數(shù)據(jù)存儲至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù),閃存控制單元基于所述第二命令對應(yīng)的空閑的命令通道,將緩存單元中的所述組合數(shù)據(jù)寫入數(shù)據(jù)存儲單元(Flash存儲體);
當(dāng)?shù)诙顬樽x命令時,閃存控制單元基于所述第二命令對應(yīng)的空閑的命令通道,從數(shù)據(jù)存儲單元讀取所述第二命令指示讀取的數(shù)據(jù)至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù),以使命令重組單元將緩存單元中的所述組合數(shù)據(jù)通過接口處理單元發(fā)送至主機(jī)端。
在實際實施時,所述方法還包括:
閃存控制單元基于所述第二命令對應(yīng)的命令標(biāo)識,更新所述命令描述符中所述第二命令對應(yīng)的命令完成狀態(tài),以使所述命令重組單元基于所述命令完成狀態(tài)確定該命令通道的命令已執(zhí)行完時,通知主機(jī)命令已完成,并釋放所述第二命令對應(yīng)的命令通道。
在實際實施時,所述方法還包括:
命令控制單元檢測到存在至少一個未被執(zhí)行的第二命令,且當(dāng)前沒有第二命令被執(zhí)行,也即當(dāng)前的閃存控制單元空閑,觸發(fā)所述閃存控制單元執(zhí)行未被執(zhí)行的第二命令。
需要說明的是,本發(fā)明實施例電子設(shè)備中的各功能單元,除了數(shù)據(jù)存儲單元及緩存單元,均使用CPLD、FPGA方式獨(dú)立于SSD中的CPU實現(xiàn),從而實現(xiàn)降低CPU功耗的目的。
應(yīng)用本發(fā)明上述實施例,對主機(jī)的第一命令進(jìn)行重組得到至少一個第二命令,每個第二命令指示操作的數(shù)據(jù)量相同,如此,可對主機(jī)端零散數(shù)據(jù)按Flash芯片特性通過鏈表進(jìn)行重組,方便寫入或讀出;為第二命令分配空閑的命令通道,然后基于所述空閑的命令通道執(zhí)行分配的所述第二命令;如此,命令信息與數(shù)據(jù)塊數(shù)據(jù)并行處理,互不影響,速度快;且數(shù)據(jù)處理處理過程中只需要SSD中的CPU少量參與,大量工作都由硬件自動完成,降低CPU負(fù)載,并提升系統(tǒng)性能。
實施例二
圖5為本發(fā)明實施例中數(shù)據(jù)處理方法的實現(xiàn)流程示意圖,圖6為本發(fā)明實施例中數(shù)據(jù)處理方法的邏輯框圖,應(yīng)用與電子設(shè)備,在本實施例中的電子設(shè)備設(shè)置于SSD中,獨(dú)立于CPU單獨(dú)存在,可由CPLD、FPGA等集成電路實現(xiàn);所述電子設(shè)備的一種組成結(jié)構(gòu)示意圖如圖2所示,如圖5、圖2、圖6所示,本發(fā)明實施例中數(shù)據(jù)處理方法包括:
首先,接口處理單元接收來自Host端的第一命令,該命令指示進(jìn)行目標(biāo)數(shù)據(jù)的讀操作或?qū)懖僮鳎凰鼋涌谔幚韱卧请娮釉O(shè)備與主機(jī)相連的接口,可以是SSD控制器芯片中的一個接口模塊,如USB、SATA、PCIe等。
然后,命令重組單元根據(jù)預(yù)設(shè)的映射策略,對Host端的第一命令進(jìn)行重組,得到至少一個第二命令;
這里,對主機(jī)端的第一命令進(jìn)行重組的目的是重組(組合/拆分)成適合Flash操作的第二命令,主要依據(jù)Flash顆粒的特性(頁大小)及SSD芯片中軟件處理的要求(單頁操作還是雙頁或多頁操作)而定;比如:Flash顆粒大小是16K字節(jié),軟件按雙頁操作,則進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量為32K,而主機(jī)的第一命令指示進(jìn)行操作的數(shù)據(jù)量為16K,則會對第一命令與其它與其類型相同的命令進(jìn)行組合,重組成指示操作的單位數(shù)據(jù)量為32K字節(jié)的命令;也即,第一命令指示操作的數(shù)據(jù)塊小的,則將多個命令合成一個新命令供后續(xù)操作,而第一命令指示操作的數(shù)據(jù)塊大的,則將第一命令拆成多個新命令供后面的流程處理。
然后,命令控制單元查找對應(yīng)第二命令的可用(空閑)的命令通道,為空閑的命令通道分配所述第二命令,并生成對應(yīng)所述第二命令的命令描述符;
在具體實施時,通常存在多個Flash通道,每個Flash通道與SSD中的一個Flash芯片對應(yīng);本實施例中所述命令通道通常也存在多個,但命令通道與Flash通道不同,可以一個命令通道支持(對應(yīng))一個Flash通道,也可以一個命令通道支持(對應(yīng))多個Flash通道,或者多個命令通道支持(對應(yīng))一個Flash通道。而這多個命令通道可以設(shè)置成不同的優(yōu)先級,根據(jù)處理策略,可以將多個第二命令分成不同的優(yōu)先級,寫進(jìn)不同的命令通道內(nèi)。
由于每個命令通道指向特定的Flash芯片,因此,電子設(shè)備中的命令控制單元依據(jù)第二命令指示操作的數(shù)據(jù)的物理地址查找所述第二命令對應(yīng)的命令通道的通道狀態(tài)(如空閑、被占用),當(dāng)對應(yīng)的命令通道空閑時將該空閑的命令通道分配所述第二命令,以基于該空閑的命令通道執(zhí)行分配的第二命令。
然而在實際實施時,第二命令指示操作的數(shù)據(jù)的物理地址為:依據(jù)預(yù)設(shè)的映射策略(地址映射表)對所述第二命令的邏輯操作地址進(jìn)行映射得到;這里,所述第二命令的邏輯操作地址為面向主機(jī)的邏輯地址,通過地址映射表查找邏輯操作地址相對應(yīng)Flash中的物理地址;其中,所述地址映射表如圖3所示。
在本實施例中,命令控制單元生成的命令描述符包括以下信息:
所述第二命令對應(yīng)的數(shù)據(jù)操作類型;即指示數(shù)據(jù)讀操作或?qū)懖僮?;指原始的主機(jī)發(fā)來的讀命令、寫命令、或其他管理命令;
所述第二命令對應(yīng)的命令標(biāo)識;即命令I(lǐng)D,在實際實施時,若第二命令由第一命令拆分而來,則拆分得到的多個第二命令的命令I(lǐng)D相同且與所述被拆分的第一命令的命令I(lǐng)D相同;若第二命令由第一命令和另外一個類型相同的命令組合而來,則第二命令的命令I(lǐng)D包括兩部分,分別為第一命令的命令I(lǐng)D及另一個類型相同的命令的命令I(lǐng)D;所述第二命令的命令I(lǐng)D用于進(jìn)行數(shù)據(jù)操作過程中的識別和跟蹤,即可識別來自主機(jī)的第一命令是否完成,以對主機(jī)進(jìn)行響應(yīng);
所述第二命令對應(yīng)的數(shù)據(jù)操作的邏輯地址;這里的邏輯地址為面向主機(jī)的邏輯地址,主機(jī)訪問的邏輯地址與實際寫到Flash中的物理地址不是一一對應(yīng)關(guān)系,而是需要通過一個映射表(如圖3)來實現(xiàn);為方便處理、提高處理效率及對不用廠家Flash芯片的兼容性支持,不同的設(shè)計者(芯片廠商)可采用不同的地址映射策略。例如,簡單的一級地址映射:采用16K字節(jié)地址映射以應(yīng)對16K字節(jié)的頁訪問;或者采用二級映射:第一級采用4K字節(jié)映射,第二級再根據(jù)不同的Flash頁大小進(jìn)行靈活調(diào)整,如16K頁操作的Flash就采用16K字節(jié)地址映射。
所述第二命令對應(yīng)的數(shù)據(jù)操作的物理地址;這里指與邏輯地址對應(yīng)的針對Nand的物理地址,可通過映射單元完成邏輯地址到物理地址的映射過程;
所述第二命令對應(yīng)的數(shù)據(jù)存儲狀態(tài);這里所述的數(shù)據(jù)存儲狀態(tài)包括目標(biāo)數(shù)據(jù)在緩存單元中的存儲地址、數(shù)據(jù)長度、數(shù)據(jù)校驗格式等;
所述第二命令對應(yīng)的命令完成狀態(tài);所述第二命令的初始狀態(tài)為未完成,當(dāng)該第二命令被執(zhí)行完成時,即已完成相關(guān)Flash操作時,該命令完成狀態(tài)被更新為完成;
所述命令描述符的示意圖如圖4所示,需要說明的是,命令描述符包括的信息的順序非固定,可依據(jù)需要進(jìn)行調(diào)整,且包括的內(nèi)容還可根據(jù)實際需要進(jìn)行擴(kuò)展,并不限于上述信息;例如還可以包括針對Nand的除物理地址以外的相關(guān)信息(采取何種校驗算法、校驗碼碼率、校驗數(shù)據(jù)長度等;以及是否保存主機(jī)傳過來的ECC數(shù)據(jù)、ECC數(shù)據(jù)長度等信息),以及操作控制信息(即指命令處理過程中的可能用到的具體控制信息,如數(shù)據(jù)在操作過程中是否允許其他命令打斷;當(dāng)前命令的操作的優(yōu)先級等)。
然后,閃存控制單元(NFC,Nand Flash Controller)基于所述空閑的命令通道執(zhí)行分配的所述第二命令,是控制器芯片內(nèi)部的一個主要模塊,負(fù)責(zé)完成對Nand具體命令的解析和處理;
具體地,當(dāng)?shù)诙顬閷懨顣r,命令重組單元將所述第二命令指示寫入的數(shù)據(jù)存儲至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù),閃存控制單元基于所述第二命令對應(yīng)的空閑的命令通道,將緩存單元中的所述組合數(shù)據(jù)寫入數(shù)據(jù)存儲單元(Flash存儲體);
當(dāng)?shù)诙顬樽x命令時,閃存控制單元基于所述第二命令對應(yīng)的空閑的命令通道,從數(shù)據(jù)存儲單元讀取所述第二命令指示讀取的數(shù)據(jù)至緩存單元,在所述緩存單元中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù),以使命令重組單元將緩存單元中的所述組合數(shù)據(jù)通過接口處理單元發(fā)送至主機(jī)端。
當(dāng)閃存控制單元有執(zhí)行完的第二命令的時候,更新命令控制單元中對應(yīng)命令I(lǐng)D的命令完成狀態(tài),以使所述命令重組單元(NVMe)基于所述命令完成狀態(tài)確定該命令通道的命令已執(zhí)行完時,通過接口處理單元通知主機(jī)命令已完成,并釋放所述第二命令對應(yīng)的命令通道。
在實際實施時,命令控制單元檢測到存在未被執(zhí)行(待處理)的第二命令,且當(dāng)前沒有第二命令被執(zhí)行,也即當(dāng)前的閃存控制單元空閑,觸發(fā)所述閃存控制單元執(zhí)行未被執(zhí)行的第二命令,即讀取待處理的第二命令給閃存控制單元執(zhí)行。
需要說明的是,本發(fā)明實施例電子設(shè)備中的各功能單元,除了數(shù)據(jù)存儲單元及緩存單元,均使用CPLD、FPGA方式獨(dú)立于SSD中的CPU實現(xiàn),從而實現(xiàn)降低CPU功耗的目的。
在本發(fā)明上述實施例中,數(shù)據(jù)處理處理過程中只需要SSD中的CPU少量參與,大量工作都由硬件自動完成,降低CPU負(fù)載;并提升系統(tǒng)性能;命令處理與數(shù)據(jù)處理同時進(jìn)行,即命令流與數(shù)據(jù)流分離,速度快;Host端數(shù)據(jù)處理與Flash端數(shù)據(jù)處理并行工作;采用鏈表方式(如圖3所示)重組命令或數(shù)據(jù),靈活方便,如此,可對主機(jī)端零散數(shù)據(jù)按Flash芯片特性通過鏈表進(jìn)行重組,方便寫入或讀出;且本實施例中,只做數(shù)據(jù)連接(即以鏈表的形式拼接數(shù)據(jù)),不做數(shù)據(jù)的搬移和整合,降低對硬件帶寬的要求,提升效率并降低功耗;用戶數(shù)據(jù)(來自PC端的用戶需要讀取的數(shù)據(jù)或者用戶需要寫入SSD的數(shù)據(jù))只做最初的寫入(從主機(jī)寫過來的數(shù)據(jù),可以存在DDR中,也可以存放在SRAM中)和最后的讀出(針對Flash Program命令執(zhí)行前的用戶數(shù)據(jù)),中途不做搬移。
實施例三
圖7為本發(fā)明實施例中電子設(shè)備的組成結(jié)構(gòu)示意圖,如圖7所示,本發(fā)明實施例中電子設(shè)備的組成包括:接口處理單元71、命令重組單元72、命令控制單元73及閃存控制單元74;其中,
接口處理單元71,用于接收來自主機(jī)端的第一命令;所述第一命令用于指示進(jìn)行目標(biāo)數(shù)據(jù)的讀/寫操作;
命令重組單元72,用于對所述第一命令進(jìn)行重組得到至少一個第二命令;每個所述第二命令指示操作的數(shù)據(jù)量相同;
命令控制單元73,用于查找對應(yīng)所述第二命令的空閑的命令通道,為所述空閑的命令通道分配所述第二命令;
閃存控制單元74,用于基于所述空閑的命令通道執(zhí)行分配的所述第二命令。
在一實施例中,所述命令重組單元72,還用于分析得到所述第一命令所請求操作的目標(biāo)數(shù)據(jù)的數(shù)據(jù)量;
以及,確定所述數(shù)據(jù)量大于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,基于所述單位數(shù)據(jù)量將所述第一命令拆分為至少兩個第二命令;
以及,確定所述數(shù)據(jù)量小于預(yù)設(shè)的進(jìn)行數(shù)據(jù)操作的單位數(shù)據(jù)量時,將與所述第一命令相同類型的命令合并為至少一個第二命令;
其中,所述第二命令指示操作所述目標(biāo)數(shù)據(jù)中對應(yīng)所述單位數(shù)據(jù)量的數(shù)據(jù)。
在一實施例中,所述電子設(shè)備還包括緩存單元75及數(shù)據(jù)存儲單元76;
所述命令重組單元72,還用于確定所述第二命令為寫命令時,將所述第二命令指示寫入的數(shù)據(jù)存儲至緩存單元75,在所述緩存單元75中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù);
所述閃存控制單元74,還用于基于所述空閑的命令通道,將所述緩存單元中的所述組合數(shù)據(jù)寫入數(shù)據(jù)存儲單元76。
在一實施例中,所述電子設(shè)備還包括緩存單元75及數(shù)據(jù)存儲單元76;
所述閃存控制單元74,還用于確定所述第二命令為讀命令時,基于所述空閑的命令通道,從數(shù)據(jù)存儲單元76讀取所述第二命令指示讀取的數(shù)據(jù)至緩存單元75,在所述緩存單元75中形成數(shù)據(jù)量與所述單位數(shù)據(jù)量對應(yīng)的組合數(shù)據(jù);
所述命令重組單元72,還用于將緩存單元75中的所述組合數(shù)據(jù)通過所述接口控制單元71發(fā)送至所述主機(jī)端。
在一實施例中,所述命令控制單元73,還用于基于對應(yīng)所述第二命令的空閑的命令通道,生成對應(yīng)所述第二命令的命令描述符;所述命令描述符用作基于所述空閑的命令通道執(zhí)行分配的所述第二命令的依據(jù);
所述命令描述符包括以下至少之一:
所述第二命令對應(yīng)的數(shù)據(jù)操作類型;
所述第二命令對應(yīng)的命令標(biāo)識;
所述第二命令對應(yīng)的數(shù)據(jù)操作的邏輯地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的物理地址;
所述第二命令對應(yīng)的數(shù)據(jù)操作的目標(biāo)數(shù)據(jù)在緩存單元中的存儲地址;
所述第二命令對應(yīng)的命令完成狀態(tài)。
在一實施例中,所述閃存控制單元74,還用于基于所述第二命令對應(yīng)的命令標(biāo)識,更新所述命令描述符中所述第二命令對應(yīng)的命令完成狀態(tài),以使所述命令重組單元72基于所述命令完成狀態(tài)釋放所述第二命令對應(yīng)的命令通道。
在一實施例中,所述命令控制單元73,還用于檢測到存在至少一個未被執(zhí)行的第二命令,且當(dāng)前沒有第二命令被執(zhí)行,觸發(fā)所述閃存控制單元74對未被執(zhí)行的第二命令的執(zhí)行。
這里需要指出的是:以上涉及電子設(shè)備的描述,與上述方法描述是類似的,同方法的有益效果描述,不做贅述。對于本發(fā)明所述電子設(shè)備實施例中未披露的技術(shù)細(xì)節(jié),請參照本發(fā)明方法實施例的描述。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序命令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:移動存儲設(shè)備、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
或者,本發(fā)明上述集成的單元如果以軟件功能模塊的形式實現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明實施例的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干命令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī)、服務(wù)器、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分。而前述的存儲介質(zhì)包括:移動存儲設(shè)備、ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。