專利名稱:Io命令處理的方法及其固態(tài)硬盤的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲技術(shù)領(lǐng)域,尤其涉及一種IO命令處理的方法及其固態(tài)硬盤。
背景技術(shù):
固態(tài)硬盤(Solid State Disk,簡稱SSD)是一種基于永久性存儲器,如閃存,或非永久性存儲器,SDRAM (Synchronous Dynamic Random Access Memory,同步動態(tài)隨機(jī)存取存儲器)的計算機(jī)外部存儲設(shè)備。其具有讀寫速度快,低功耗,無噪音,抗震動,低熱量,體積小,工作范圍大,廣泛應(yīng)用于軍事、車載、工控、視頻監(jiān)控、網(wǎng)絡(luò)監(jiān)控、網(wǎng)絡(luò)終端、電力、醫(yī)療、航空等、導(dǎo)航設(shè)備等領(lǐng)域。如果能夠克服容價比低,和壽命限制,將會得到更廣泛的應(yīng)用。固態(tài)硬盤能夠逐漸取代機(jī)械硬盤的根本原因是其相對于機(jī)械硬盤卓越的性能。雖然固態(tài)硬盤擁有較高的性能,但是硬盤接口還是計算機(jī)的主要瓶頸。尤其是對于以磁盤10 (Input/Output,輸入/輸出)為主的場合,提高CPU頻率和使用多核處理器對于提升整個計算機(jī)系統(tǒng)的性能效果并不明顯。而把機(jī)械盤換成固態(tài)硬盤能夠顯著的提高磁盤10處理速度。但是固態(tài)硬盤的處理速度和CPU和內(nèi)存相比,速度還是有較大的差距。進(jìn)一步優(yōu)化固態(tài)硬盤的處理速度有著現(xiàn)實的意義。目前大部分固態(tài)硬盤控制器的基本處理方式是接收來自上層軟件產(chǎn)生的10命令,轉(zhuǎn)換格式成底層固件能夠直接處理的巾貞,然后通過DMA (Direct Memory Access,直接內(nèi)存存取)把10發(fā)送給硬件處理。在硬件處理完該10后,產(chǎn)生一個硬件中斷,把硬件處理的結(jié)果返回給上層軟件。因為硬件中斷的產(chǎn)生和處理需要消耗大量的系統(tǒng)資源,因此,合并多個10命令可以減少中斷的產(chǎn)生和處理,合并比較多的情況下,可以極大的提高系統(tǒng)性能。本發(fā)明就是提供了一種合并同質(zhì)10命令的方法和裝置。綜上可知,現(xiàn)有10命令處理技術(shù)在實際使用上,顯然存在不便與缺陷,所以有必要加以改進(jìn)。
發(fā)明內(nèi)容
針對上述的缺陷,本發(fā)明的目的在于提供一種10命令處理的方法及其固態(tài)硬盤,以提高固態(tài)硬盤的讀寫性能。為了實現(xiàn)上述目的,本發(fā)明提供一種10命令處理的方法,所述方法包括如下步驟預(yù)設(shè)同質(zhì)10命令的相關(guān)參數(shù)以及下發(fā)條件;在根據(jù)所述同質(zhì)10命令的相關(guān)參數(shù)判斷接收到10命令為同質(zhì)10命令時,收集所述同質(zhì)10命令;在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)10命令下發(fā)到對應(yīng)的固件進(jìn)行處理。根據(jù)所述的方法,所述預(yù)設(shè)同質(zhì)10命令的相關(guān)參數(shù)以及下發(fā)條件的步驟包括初始化及注冊10命令收集裝置;
設(shè)置所述同質(zhì)IO命令長度的區(qū)間值;設(shè)置收集所述同質(zhì)IO命令的時間閾值、每次收集所述同質(zhì)IO命令的數(shù)目閾值以及計時定時器;獲取處理所述同質(zhì)IO命令的固件所能夠處理同質(zhì)IO命令的最大數(shù)目。根據(jù)所述的方法,所述在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令的步驟包括對從上層下發(fā)的IO命令進(jìn)行同質(zhì)IO命令的判斷;在判斷所述從上層下發(fā)的IO命令的長度在所述同質(zhì)IO命令長度的區(qū)間值的范圍之內(nèi)時,收集所述同質(zhì)IO命令。根據(jù)所述的方法,所述在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理的步驟包括在每次收集的所述同質(zhì)IO命令數(shù)達(dá)到所述固件所能夠處理同質(zhì)IO命令的最大數(shù)目時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令;在所述定時器計時達(dá)到收集所述同質(zhì)IO命令的時間閾值時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令。根據(jù)所述的方法,在所述在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令的步驟之后還包括對于符合要求的所述同質(zhì)IO命令,構(gòu)建新的所述固件能夠識別的命令,對所述固件能夠識別的控件的相關(guān)結(jié)構(gòu)進(jìn)行填充;在接收到新的命令包含的所述同質(zhì)IO命令小于每次收集所述同質(zhì)IO命令的數(shù)目閾值時,對新的符合格式的所述同質(zhì)IO命令插入由第一個所述同質(zhì)IO命令新建的鏈表中。為了實現(xiàn)本發(fā)明的另一發(fā)明目的,本發(fā)明還提供了一種固態(tài)硬盤,包括預(yù)設(shè)模塊,用于預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件;收集模塊,用于在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令;下發(fā)模塊,用于在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理。根據(jù)所述的固態(tài)硬盤,所述預(yù)設(shè)模塊包括初始化子模塊,用于初始化及注冊IO命令收集裝置;第一設(shè)置子模塊,用于設(shè)置所述同質(zhì)IO命令長度的區(qū)間值;第二設(shè)置子模塊,用于設(shè)置收集所述同質(zhì)IO命令的時間閾值、每次收集所述同質(zhì)IO命令的數(shù)目閾值以及計時定時器;獲取子模塊,用于獲取處理所述同質(zhì)IO命令的固件所能夠處理同質(zhì)IO命令的最大數(shù)目。根據(jù)所述的固態(tài)硬盤,所述收集模塊包括判斷子模塊,用于對從上層下發(fā)的IO命令進(jìn)行同質(zhì)IO命令的判斷;收集子模塊,用于在判斷所述從上層下發(fā)的IO命令的長度在所述同質(zhì)IO命令長度的區(qū)間值的范圍之內(nèi)時,收集所述同質(zhì)IO命令。根據(jù)所述的固態(tài)硬盤,所述下發(fā)模塊包括
第一下發(fā)子模塊,用于在每次收集的所述同質(zhì)IO命令數(shù)達(dá)到所述固件所能夠處理同質(zhì)IO命令的最大數(shù)目時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令;第二下發(fā)子模塊,用于在所述定時器計時達(dá)到收集所述同質(zhì)IO命令的時間閾值時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令。根據(jù)所述的固態(tài)硬盤,所述固態(tài)硬盤還包括構(gòu)建模塊,用于在收集模塊收集所述同質(zhì)IO命令后對于符合要求的所述同質(zhì)IO命令,構(gòu)建新的所述固件能夠識別的命令,對所述固件能夠識別的控件的相關(guān)結(jié)構(gòu)進(jìn)行填充;插入模塊,用于在接收到新的命令包含的所述同質(zhì)IO命令小于每次收集所述同質(zhì)IO命令的數(shù)目閾值時,對新的符合格式的所述同質(zhì)IO命令插入由第一個所述同質(zhì)IO命令新建的鏈表中。本發(fā)明通過在固態(tài)硬盤執(zhí)行IO操作的過程中,啟動同質(zhì)IO命令收集裝置,同時設(shè)置相關(guān)的定時器。對特定的同質(zhì)IO命令,則符合特定大小,如可以手工設(shè)定的,在某一固定時間段,不引起延遲的IO命令。確保收集命令的總大小和個數(shù)能夠被固態(tài)硬盤固件一次性處理,在處理完這些命令后,僅產(chǎn)生一個硬件中斷;可以在大部分應(yīng)用場合提高固態(tài)硬盤的讀寫性能,在特定場合能夠極大的提高固態(tài)硬盤的讀寫性能。
圖1是本發(fā)明第一實施例提供的固態(tài)硬盤的結(jié)構(gòu)示意圖;圖2是本發(fā)明第二實施例提供的固態(tài)硬盤的結(jié)構(gòu)示意圖;圖3是本發(fā)明第三、四、五實施例提供的固態(tài)硬盤的結(jié)構(gòu)示意圖;圖4是本發(fā)明第六實施例提供的IO命令處理的方法流程圖;圖5是現(xiàn)有技術(shù)中提供的IO命令處理的方法流程圖;圖6是本發(fā)明一個實施例提供的IO命令處理的方法流程圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。參見圖1,在本發(fā)明的第一實施例中提供了一種固態(tài)硬盤100,包括預(yù)設(shè)模塊10,用于預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件;收集模塊20,用于在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令;下發(fā)模塊30,用于在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理。在該實施例中,預(yù)設(shè)模塊10預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件;該同質(zhì)IO命令的相關(guān)參數(shù)作為判斷是否為同質(zhì)IO命令的標(biāo)準(zhǔn),由于將多個同質(zhì)IO命令收集后再下發(fā)可以提供固態(tài)硬盤100處理IO命令的效率;并且設(shè)置適應(yīng)固態(tài)硬盤100控制器的處理能力的下發(fā)條件,可以在該條件具備時將所述同質(zhì)IO命令進(jìn)行下發(fā),進(jìn)一步提高了固態(tài)硬盤100的處理IO命令的效率。收集模塊20則在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令;收集符合所述相關(guān)參數(shù)的同質(zhì)IO命令后對其進(jìn)行收集。最后下發(fā)模塊30在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理,以此提高了固態(tài)硬盤100處理IO命令的效率。參見圖2,在本發(fā)明的第二實施例中,預(yù)設(shè)模塊10包括初始化子模塊11,用于初始化及注冊IO命令收集裝置;第一設(shè)置子模塊12,用于設(shè)置所述同質(zhì)IO命令長度的區(qū)間值;第二設(shè)置子模塊13,用于設(shè)置收集所述同質(zhì)IO命令的時間閾值、每次收集所述同質(zhì)IO命令的數(shù)目閾值以及計時定時器;獲取子模塊14,用于獲取處理所述同質(zhì)IO命令的固件所能夠處理同質(zhì)IO命令的
最大數(shù)目。在該實施例中,初始化子模塊11在IO啟動之前先初始化和注冊一個IO命令收集裝置,在初始化硬件的過程中,從固件的相關(guān)位置獲取固件所能夠處理IO命令的相關(guān)閾值,包括該固態(tài)硬盤控·制器所能夠支持的最大命令長度,F(xiàn)lash芯片的page大小,最大命令
數(shù)等等第一設(shè)置子模塊12設(shè)置所述同質(zhì)IO命令長度的區(qū)間值;該區(qū)間值根據(jù)包含固態(tài)硬盤100控制器的處理能夠確定,第二設(shè)置子模塊13設(shè)置相關(guān)的定時器,獲取子模塊14獲得相關(guān)的固件所能處理的IO命令的相關(guān)閾值,最大命令長度,最大命令數(shù),固件處理總長度等。例如最大命令長度為8Κ,最小命令長度為521Bytes,固件處理總長度為4M。參見圖3,在本發(fā)明的第三實施例中,收集模塊20包括判斷子模塊21,用于對從上層下發(fā)的IO命令進(jìn)行同質(zhì)IO命令的判斷;收集子模塊22,用于在判斷所述從上層下發(fā)的IO命令的長度在所述同質(zhì)IO命令長度的區(qū)間值的范圍之內(nèi)時,收集所述同質(zhì)IO命令。在該實施例中,判斷子模塊21對于每個從上層下發(fā)的IO命令,都要對其IO的長度進(jìn)行判斷,如何長度不屬于IO同質(zhì)命令的區(qū)間,則直接發(fā)送到固件處理,且每次收集的IO同質(zhì)命令總數(shù)小于所述同質(zhì)IO命令的數(shù)目閾值。對于從上層下發(fā)的IO命令,對IO命令的特質(zhì)進(jìn)行相關(guān)的判斷,確保其長度符合同質(zhì)命令的收集需求,同時所收集的IO命令的總長度也不能超過固態(tài)硬盤控制器固件所能一次性處理的總長度。參見圖3,在本發(fā)明的第四實施例中,下發(fā)模塊30包括第一下發(fā)子模塊31,用于在每次收集的所述同質(zhì)IO命令數(shù)達(dá)到所述固件所能夠處理同質(zhì)IO命令的最大數(shù)目時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令;第二下發(fā)子模塊32,用于在所述定時器計時達(dá)到收集所述同質(zhì)IO命令的時間閾值時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令。在該實施例中,當(dāng)固件上等待的IO命令數(shù)大于固件所能夠承受的IO數(shù)時,或者當(dāng)收集到的IO同質(zhì)命令達(dá)到每次能夠收集命令的最大值的時候,第一下發(fā)子模塊31讓收集到IO命令下發(fā)。例如最大IO數(shù)為20,同質(zhì)命令為256。當(dāng)收集到的IO同質(zhì)命令雖然未達(dá)到每次能夠收集命令的最大值的時候,到達(dá)定時器設(shè)置時間時,第二下發(fā)子模塊32也將收集到的同質(zhì)IO進(jìn)行下發(fā)。因此,當(dāng)每次收集的同質(zhì)命令數(shù)達(dá)到固件所能一次性承受的IO數(shù),或者同質(zhì)命令的總長度達(dá)到固件能夠一次性處理的總長度時,下發(fā)收集到的命令。雖然同質(zhì)命令的收集未到達(dá)總數(shù),在計時定時器超時的情況下,仍然下發(fā)。參見圖3,在本發(fā)明的第五實施例中,固態(tài)硬盤100還包括構(gòu)建模塊40,用于在收集模塊收集所述同質(zhì)IO命令后對于符合要求的所述同質(zhì)IO命令,構(gòu)建新的所述固件能夠識別的命令,對所述固件能夠識別的控件的相關(guān)結(jié)構(gòu)進(jìn)行填充;插入模塊50,用于在接收到新的命令包含的所述同質(zhì)IO命令小于每次收集所述同質(zhì)IO命令的數(shù)目閾值時,對新的符合格式的所述同質(zhì)IO命令插入由第一個所述同質(zhì)IO命令新建的鏈表中。在該實施例中,對于符合要求的同質(zhì)命令,構(gòu)建模塊40構(gòu)建新的底層固件能夠識別的命令,對固件能夠識別的frame的相關(guān)結(jié)構(gòu)進(jìn)行填充。插入模塊50在新的命令包含的同質(zhì)命令小于每次收集總數(shù)時,對新的符合格式的同質(zhì)命令進(jìn)行插入。具體的,對于符合同質(zhì)要求的IO命令,接收到的第一個同質(zhì)IO命令時,分配一個新的格式的命令,對于后續(xù)符合同質(zhì)的IO命令,插入第一個新命令所建立的鏈表中,例如當(dāng)建立鏈表后,下一個命令也在512bytes和2M之間時,把這個結(jié)構(gòu)插入到新建立的鏈表中。在上述多個實施例中,固態(tài)硬盤100的多個模塊可以軟件單元,硬件單元或軟硬件結(jié)合單元。參見圖4,在本發(fā)明的第六實施例中提供了一種IO命令處理的方法,所述方法包括如下步驟步驟S401中,預(yù)設(shè)模塊10預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件;步驟S402中,收集模塊20在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令;步驟S403中,下發(fā)模塊30在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理。在該實施例中,對符合同質(zhì)屬性的IO命令進(jìn)行收集,讓固態(tài)硬盤100控制器能夠一次性處理多個IO命令,減少了系統(tǒng)IO硬件中斷產(chǎn)生,提高了計算機(jī)系統(tǒng)處理IO的效率,極大的提聞了系統(tǒng)的IO速率。在本發(fā)明的第七實施例中,所述步驟S401包括初始化子模塊11初始化及注冊IO命令收集裝置;第一設(shè)置子模塊12設(shè)置所述同質(zhì)IO命令長度的區(qū)間值;第二設(shè)置子模塊13設(shè)置收集所述同質(zhì)IO命令的時間閾值、每次收集所述同質(zhì)IO命令的數(shù)目閾值以及計時定時器;獲取子模塊14獲取處理所述同質(zhì)IO命令的固件所能夠處理同質(zhì)IO命令的最大數(shù)目。在該實施例中,對同質(zhì)IO命令的收集進(jìn)行初始化準(zhǔn)備,并且設(shè)置相關(guān)的參數(shù)。在本發(fā)明的第八實施例中,所述步驟S402包括判斷子模塊21對從上層下發(fā)的IO命令進(jìn)行同質(zhì)IO命令的判斷;收集子模塊22在判斷子模塊21判斷所述從上層下發(fā)的IO命令的長度在所述同質(zhì)IO命令長度的區(qū)間值的范圍之內(nèi)時,收集所述同質(zhì)IO命令,在本發(fā)明的第八實施例中,所述步驟S403包括第一下發(fā)子模塊31在每次收集的所述同質(zhì)IO命令數(shù)達(dá)到所述固件所能夠處理同質(zhì)IO命令的最大數(shù)目時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令;第二下發(fā)子模塊32在所述定時器計時達(dá)到收集所述同質(zhì)IO命令的時間閾值時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令。在該實施例中,固態(tài)硬盤100控制器需要能夠支持同時對多個非連續(xù)IO進(jìn)行處理,僅僅適用于具有該功能的固態(tài)硬盤控制器。在本發(fā)明的第九實施例中,在所述步驟S402之后還包括構(gòu)建模塊40對于符合要求的所述同質(zhì)IO命令,構(gòu)建新的所述固件能夠識別的命令,對所述固件能夠識別的控件的相關(guān)結(jié)構(gòu)進(jìn)行填充;插入模塊50在接收到新的命令包含的所述同質(zhì)IO命令小于每次收集所述同質(zhì)IO命令的數(shù)目閾值時,對新的符合格式的所述同質(zhì)IO命令插入由第一個所述同質(zhì)IO命令新建的鏈表中。在本發(fā)明的一個實施例中,首先選擇能夠同時處理多個IO的固態(tài)硬盤控制器作為硬件基礎(chǔ)。對于一次只能處理單個IO的固態(tài)硬盤控制器不屬于該發(fā)明的適用范圍。在驅(qū)動程序初始化的過程中,初始化同質(zhì)命令收集裝置的相關(guān)參數(shù)和定時器。具體的參數(shù)一般從固態(tài)硬盤控制器硬件的相關(guān)寄存器獲取,定時器時間的設(shè)置也由固態(tài)硬盤控制器的處理能力決定。為防止數(shù)據(jù)不一致性情況的產(chǎn)生,該時間值一般不宜設(shè)置過長。啟動定時器,同時對每個下發(fā)的IO命令特征進(jìn)行判斷,如果不符合同質(zhì)命令的特征,將會直接下發(fā)給固件處理。對于符合同質(zhì)的IO命令,將會構(gòu)建新的命令格式同時進(jìn)行收集,在出現(xiàn)當(dāng)收集IO命令總數(shù)達(dá)到閾值、收集IO命令總長度達(dá)到閾值或者定時器時間超時的任一情況時將所得到的新的同質(zhì)IO命令的集合下發(fā)。然后開始新的重復(fù)命令收集的循環(huán)。從上述實施例中可以看出,對固態(tài)硬盤同質(zhì)命令進(jìn)行收集,在符合IO同質(zhì)命令比較多的情況下,性能提高將會非常明顯,如果符合同質(zhì)的IO命令比較少時,性能提高的提升效果將會不明顯。參見圖5,在現(xiàn)有技術(shù)中,提供了傳統(tǒng)的固態(tài)硬盤IO操作流程,描述如下步驟S501中,產(chǎn)生IO步驟S501中,插入IO等待隊列;步驟S503中,判讀FW(Firmware,固件)是否忙,是則執(zhí)行步驟S504,否則執(zhí)行步驟 S505 ;步驟S504中,繼續(xù)等待;步驟S505中,DMA (Direct Memory Access,直接內(nèi)存存取訪問)到數(shù)據(jù)隊列;步驟S506中,硬件處理;步驟S507中,產(chǎn)生中斷;步驟S508中,上層處理。在傳統(tǒng)的固態(tài)硬盤IO操作流程中,首先生成軟件產(chǎn)生一個IO請求,把構(gòu)建好的IO請求不是直接發(fā)送給固件,而是插入等待隊列,在固件不忙的時候把IO下發(fā)給固件,硬件處理完成以后產(chǎn)生一個硬件中斷,生成軟件完成相關(guān)的IO處理。首先,產(chǎn)生IO命令,然后把IO命令插入等待隊列,然后開始檢查固件狀態(tài),如果固件忙,則返回,繼續(xù)等待下一個IO命令,固件不忙則把等待隊列的IO命令放到DMA數(shù)據(jù)隊列,然后固件開始做DMA,把數(shù)據(jù)轉(zhuǎn)送到固件處理,硬件處理完成以后,產(chǎn)生一個硬件中斷,在中斷處理函數(shù)中通知上層軟件數(shù)據(jù)傳送已經(jīng)完成,同時釋放之前產(chǎn)生IO命令時申請的資源,整個IO流程結(jié)束。在本發(fā)明的一個實施例中采取以下措施,可以使得在固態(tài)硬盤在大部分的情況下提高固態(tài)硬盤的IO速度,因為大部分應(yīng)用的IO都符合同質(zhì)IO的特征。參見圖6,在本發(fā)明的一個實施例中提供了加入同質(zhì)命令收集機(jī)制后的固態(tài)硬盤IO操作流程,該流程對于已經(jīng)處在等待隊列的IO請求進(jìn)行判斷,如果其IO長度屬于收集的區(qū)間,將會被認(rèn)為是同質(zhì)命令進(jìn)行收集。具體處理流程描述如下步驟S601中,產(chǎn)生IO步驟S602中,插入IO等待隊列;步驟S603中,判讀是否是同質(zhì)IO命令,是則執(zhí)行步驟S604,否則執(zhí)行步驟S606 ;步驟S604中,插入同質(zhì)IO命令隊列;步驟S605中,判讀同質(zhì)IO命令是否滿了或者超時,是則執(zhí)行步驟S606,否則返回步驟S602 ;步驟S606中,判斷FW是否忙,是則執(zhí)行步驟S607,否則執(zhí)行步驟S608 ;步驟S607中,繼續(xù)等待;步驟S608中,DMA (Direct Memory Access,直接內(nèi)存存取訪問)到數(shù)據(jù)隊列;步驟S609中,硬件處理;步驟S610中,產(chǎn)生中斷;步驟S611中,返回上層處理。 在該實施例中,首先,上層產(chǎn)生一個IO命令,然后將IO命令插入等待隊列,然后設(shè)置定時器,同時對每個IO命令進(jìn)行檢查,如果該IO命令不符合同質(zhì)命令的特質(zhì),按之前傳統(tǒng)IO處理流程,檢查固件是否忙等等。如果該IO命令符合同質(zhì)命令的特質(zhì),則把該IO命令插入到同質(zhì)命令收集隊列,然后檢查定時器是否超時或者同質(zhì)命令是否收集到最多,如果這兩個條件滿足一個就立即把收集隊列的所有同質(zhì)命令下發(fā),如果不符合繼續(xù)收集同質(zhì)命令,知道上面兩個條件中的一個滿足,后續(xù)過程和傳統(tǒng)IO命令一樣。如果收集到的同質(zhì)命令達(dá)到預(yù)定的閾值或者設(shè)置的定時器超時,將會對收集的同質(zhì)命令進(jìn)行下發(fā)。下發(fā)時,會刪除等待隊列中的IO命令。在硬件處理完IO以后,多個同質(zhì)IO命令將會只產(chǎn)生一個中斷。對于處理好的10,上層軟件將會對每一個同質(zhì)的IO命令返回內(nèi)容分別進(jìn)行處理。綜上所述,本發(fā)明通過在固態(tài)硬盤執(zhí)行IO操作的過程中,啟動同質(zhì)IO命令收集裝置,同時設(shè)置相關(guān)的定時器。對特定的同質(zhì)IO命令,則符合特定大小,如可以手工設(shè)定的,在某一固定時間段,不引起延遲的IO命令。確保收集命令的總大小和個數(shù)能夠被固態(tài)硬盤固件一次性處理,在處理完這些命令后,僅產(chǎn)生一個硬件中斷;可以在大部分應(yīng)用場合提高固態(tài)硬盤的讀寫性能,在特定場合能夠極大的提高固態(tài)硬盤的讀寫性能。當(dāng)然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種IO命令處理的方法,其特征在于,所述方法包括如下步驟 預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件; 在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令; 在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件的步驟包括 初始化及注冊IO命令收集裝置; 設(shè)置所述同質(zhì)IO命令長度的區(qū)間值; 設(shè)置收集所述同質(zhì)IO命令的時間閾值、每次收集所述同質(zhì)IO命令的數(shù)目閾值以及計時定時器; 獲取處理所述同質(zhì)IO命令的固件所能夠處理同質(zhì)IO命令的最大數(shù)目。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令的步驟包括 對從上層下發(fā)的IO命令進(jìn)行同質(zhì)IO命令的判斷; 在判斷所述從上層下發(fā)的IO命令的長度在所述同質(zhì)IO命令長度的區(qū)間值的范圍之內(nèi)時,收集所述同質(zhì)IO命令。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理的步驟包括 在每次收集的所述同質(zhì)IO命令數(shù)達(dá)到所述固件所能夠處理同質(zhì)IO命令的最大數(shù)目時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令; 在所述定時器計時達(dá)到收集所述同質(zhì)IO命令的時間閾值時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令的步驟之后還包括 對于符合要求的所述同質(zhì)IO命令,構(gòu)建新的所述固件能夠識別的命令,對所述固件能夠識別的控件的相關(guān)結(jié)構(gòu)進(jìn)行填充; 在接收到新的命令包含的所述同質(zhì)IO命令小于每次收集所述同質(zhì)IO命令的數(shù)目閾值時,對新的符合格式的所述同質(zhì)IO命令插入由第一個所述同質(zhì)IO命令新建的鏈表中。
6.一種固態(tài)硬盤,其特征在于,包括 預(yù)設(shè)模塊,用于預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件; 收集模塊,用于在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令; 下發(fā)模塊,用于在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理。
7.根據(jù)權(quán)利要求6所述的固態(tài)硬盤,其特征在于,所述預(yù)設(shè)模塊包括 初始化子模塊,用于初始化及注冊IO命令收集裝置; 第一設(shè)置子模塊,用于設(shè)置所述同質(zhì)IO命令長度的區(qū)間值; 第二設(shè)置子模塊,用于設(shè)置收集所述同質(zhì)IO命令的時間閾值、每次收集所述同質(zhì)IO命令的數(shù)目閾值以及計時定時器; 獲取子模塊,用于獲取處理所述同質(zhì)IO命令的固件所能夠處理同質(zhì)IO命令的最大數(shù)目。
8.根據(jù)權(quán)利要求7所述的固態(tài)硬盤,其特征在于,所述收集模塊包括 判斷子模塊,用于對從上層下發(fā)的IO命令進(jìn)行同質(zhì)IO命令的判斷; 收集子模塊,用于在判斷所述從上層下發(fā)的IO命令的長度在所述同質(zhì)IO命令長度的區(qū)間值的范圍之內(nèi)時,收集所述同質(zhì)IO命令。
9.根據(jù)權(quán)利要求6所述的固態(tài)硬盤,其特征在于,所述下發(fā)模塊包括 第一下發(fā)子模塊,用于在每次收集的所述同質(zhì)IO命令數(shù)達(dá)到所述固件所能夠處理同質(zhì)IO命令的最大數(shù)目時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令; 第二下發(fā)子模塊,用于在所述定時器計時達(dá)到收集所述同質(zhì)IO命令的時間閾值時,向所述固件下發(fā)收集到的所述同質(zhì)IO命令。
10.根據(jù)權(quán)利要求7所述的固態(tài)硬盤,其特征在于,所述固態(tài)硬盤還包括 構(gòu)建模塊,用于在收集模塊收集所述同質(zhì)IO命令后對于符合要求的所述同質(zhì)IO命令,構(gòu)建新的所述固件能夠識別的命令,對所述固件能夠識別的控件的相關(guān)結(jié)構(gòu)進(jìn)行填充; 插入模塊,用于在接收到新的命令包含的所述同質(zhì)IO命令小于每次收集所述同質(zhì)IO命令的數(shù)目閾值時,對新的符合格式的所述同質(zhì)IO命令插入由第一個所述同質(zhì)IO命令新建的鏈表中。
全文摘要
本發(fā)明適用于存儲技術(shù)領(lǐng)域,提供了一種IO命令處理的方法及其固態(tài)硬盤,所述方法包括如下步驟預(yù)設(shè)同質(zhì)IO命令的相關(guān)參數(shù)以及下發(fā)條件;在根據(jù)所述同質(zhì)IO命令的相關(guān)參數(shù)判斷接收到IO命令為同質(zhì)IO命令時,收集所述同質(zhì)IO命令;在所述下發(fā)條件發(fā)生時,將收集到的所述同質(zhì)IO命令下發(fā)到對應(yīng)的固件進(jìn)行處理。借此,本發(fā)明提高了固態(tài)硬盤的讀寫性能。
文檔編號G06F3/06GK103049215SQ20121052139
公開日2013年4月17日 申請日期2012年12月7日 優(yōu)先權(quán)日2012年12月7日
發(fā)明者馮旭剛 申請人:記憶科技(深圳)有限公司