两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

順序流檢測方法與裝置與流程

文檔序號:11177071閱讀:378來源:國知局
順序流檢測方法與裝置與流程

本發(fā)明涉及存儲系統(tǒng),更具體地,涉及檢測訪問連續(xù)地址空間的io命令。



背景技術(shù):

存儲系統(tǒng)用于處理io命令。io命令可以被發(fā)送給存儲設(shè)備(例如,磁盤、固態(tài)硬盤、u盤、光盤等)、存儲服務(wù)器或存儲系統(tǒng)(諸如云存儲)。多條io命令構(gòu)成一個(gè)或多個(gè)數(shù)據(jù)流。若多條io命令所訪問的地址是連續(xù)的,則將這些io命令構(gòu)成的數(shù)據(jù)流稱為順序流。

每條io命令攜帶或指示要訪問的數(shù)據(jù)的地址(邏輯地址或物理地址)。每條io命令要訪問的數(shù)據(jù)的長度可以是固定長度,也可以變化。主機(jī)訪問存儲設(shè)備時(shí),諸如應(yīng)用程序的數(shù)據(jù)訪問方可能將大塊數(shù)據(jù)訪問拆分成多條io命令,并發(fā)送給存儲設(shè)備。主機(jī)中還會存在多個(gè)訪問存儲設(shè)備的應(yīng)用和/或多個(gè)操作系統(tǒng)(諸如,虛擬機(jī)),這導(dǎo)致來個(gè)多個(gè)訪問方的io命令被交織,進(jìn)而使得原本對連續(xù)地址的訪問變得不連續(xù)。

參看圖1,在主機(jī)中有多個(gè)應(yīng)用,順序流a由應(yīng)用a產(chǎn)生,包括訪問連續(xù)地址的a1,a2,a3,…an的多條io命令。作為舉例,順序流a可以來自對大尺寸視頻文件的復(fù)制。順序流b由應(yīng)用b產(chǎn)生,包括訪問連續(xù)地址的b1,b2,b3,…bn的多條io命令。主機(jī)中的應(yīng)用還產(chǎn)生了訪問不連續(xù)地址空間的多條io命令(由s,e,d,c所指示)。在操作系統(tǒng)、驅(qū)動程序、設(shè)備接口和/或總線上,多個(gè)io命令被組織為與原來不同的順序,并被存儲設(shè)備所接收。

諸如固態(tài)硬盤的存儲設(shè)備中,提供地址轉(zhuǎn)換層,將io命令的邏輯地址轉(zhuǎn)換為物理地址,并按照物理地址將訪問存儲介質(zhì)。參看圖2,存儲設(shè)備以a1、b1、c、b2的順序接收到io命令,并將這些io命令順序

存儲設(shè)備按照接收io命令的順序,將io命令(以寫命令為例)訪問的數(shù)據(jù)寫入到存儲介質(zhì)中。諸如閃存的存儲介質(zhì)以頁為單元寫入數(shù)據(jù)。在存儲設(shè)備中還可采用預(yù)定尺寸的數(shù)據(jù)塊作為寫入數(shù)據(jù)的單元(例如,由多個(gè)頁組成的集合)。寫入數(shù)據(jù)的單元一般具有較大的尺寸,能夠容納多條io命令所寫入的數(shù)據(jù)。在圖2的例子中,io命令a1、b1、c、b2對應(yīng)的數(shù)據(jù)被寫入到同一個(gè)數(shù)據(jù)塊中,并且該數(shù)據(jù)塊中的數(shù)據(jù)來自連續(xù)的多個(gè)io命令。而原本在順序流中發(fā)出的多個(gè)io命令(諸如io命令a1,a2,a3,…an,b1,b2,b3,…bn)所對應(yīng)的數(shù)據(jù)將被分散在不同的數(shù)據(jù)塊上。



技術(shù)實(shí)現(xiàn)要素:

然在一些情況下,屬于同一個(gè)順序流的數(shù)據(jù)具有相同或相似的生命周期,即這些數(shù)據(jù)會同時(shí)被更新或作廢。參看圖2,若數(shù)據(jù)流a已經(jīng)作廢或被更新,而數(shù)據(jù)流b、c還保持有效時(shí),數(shù)據(jù)塊中對應(yīng)a1的部分無效,而數(shù)據(jù)塊的其他部分還有效,那么在因各種原因需要回收該數(shù)據(jù)塊時(shí),需要對除對應(yīng)于a1的數(shù)據(jù)之外的數(shù)據(jù)進(jìn)行搬移,這會引入寫放大。寫放大導(dǎo)致增加的讀寫操作,增加了系統(tǒng)開銷,也消耗了存儲介質(zhì)的使用壽命。

在本發(fā)明中,對數(shù)據(jù)流進(jìn)行順序性檢查,將連續(xù)的數(shù)據(jù)流(順序流)提取出來,并寫入到存儲設(shè)備的連續(xù)的物理空間。

根據(jù)本發(fā)明的第一方面,提供了根據(jù)本發(fā)明第一方面的第一順序流檢測方法, 其中緩存多個(gè)io地址;與所緩存的多個(gè)io地址的每個(gè)相關(guān)聯(lián)地記錄命中計(jì)數(shù);所述方法包括:響應(yīng)于收到第一io命令,如果第一io命令的第一地址命中所緩存的多個(gè)io地址之一,以所述第一地址替換所命中的多個(gè)io地址之一,遞增與所述第一地址相關(guān)聯(lián)的第一命中計(jì)數(shù);若第一命中計(jì)數(shù)滿足閾值,將第一io命令標(biāo)記為屬于第一順序流。

根據(jù)本發(fā)明的第一方面的第一順序流檢測方法,提供了根據(jù)本發(fā)明第一方面的第二順序流檢測方法,其中,所述多個(gè)io地址是最近收到的多個(gè)io命令的地址。

根據(jù)本發(fā)明的第一方面的第一或第二順序流檢測方法,提供了根據(jù)本發(fā)明第一方面的第三順序流檢測方法,其中第一地址命中緩存的多個(gè)地址之一,包括:所述第一地址在數(shù)值上緊鄰所述多個(gè)io地址之一;所述第一地址可由所述多個(gè)io地址之一遞增得到;所述第一地址同所述多個(gè)io地址之一相同;所述第一地址同所述多個(gè)io地址之一交疊;或者所述第一地址同所述多個(gè)地址之一的距離小于閾值。

根據(jù)本發(fā)明的第一方面的第一至第三順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第四順序流檢測方法,所述方法還包括:如果所述第一io未命中所緩存的多個(gè)io地址的任何一個(gè),以所述第一地址替換所述多個(gè)io地址之一,并初始化與被替換的io地址相關(guān)聯(lián)的命中計(jì)數(shù)值。

根據(jù)本發(fā)明的第一方面的第一至第四順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第五順序流檢測方法,其中提供未命中計(jì)數(shù)器;所述方法還包括:若所述第一io命令未命中所緩存的多個(gè)io地址的任何一個(gè),遞增所述未命中計(jì)數(shù)器;若所述未命中計(jì)數(shù)器超出閾值,遞減同所述多個(gè)地址的每個(gè)相關(guān)聯(lián)的命中計(jì)數(shù),以及重置所述未命中計(jì)數(shù)器。

根據(jù)本發(fā)明的第一方面的第一至第五順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第六順序流檢測方法,所述方法還包括:如果所述第一io命令未命中所緩存的多個(gè)io地址的任何一個(gè),將所述第一io命令標(biāo)記為屬于隨機(jī)流。

根據(jù)本發(fā)明的第一方面的第四順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第七順序流檢測方法,其中如果所述第一io命令未命中緩存的多個(gè)io地址的任何一個(gè),以所述第一地址替換所述多個(gè)io地址中命中計(jì)數(shù)最低的io地址;或者以所述第一地址替換所述多個(gè)io地址中最近最少使用的io地址,并初始化所述第一地址的命中計(jì)數(shù)。

根據(jù)本發(fā)明的第一方面的第一至第七順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第八順序流檢測方法,其中如果所述第一命中計(jì)數(shù)不滿足閾值,將第一io命令標(biāo)記為屬于隨機(jī)流。

根據(jù)本發(fā)明的第一方面的第一至第八順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第九順序流檢測方法,所述方法還包括:響應(yīng)于收到第二io命令,如果第二io命令的第二地址命中緩存的所述第一io地址,且所述第一命中計(jì)數(shù)滿足閾值,則以所述第二地址替換所命中的多個(gè)io地址之一,并將所述第二io命令標(biāo)記為屬于第一順序流。

根據(jù)本發(fā)明的第一方面的第一至第八順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第十順序流檢測方法,所述方法還包括:響應(yīng)于收到第二io命令,如果第二io命令的第二地址命中所緩存的除所述第一io地址之外的多個(gè)io地址之一,以所述第二地址替換所命中的多個(gè)io地址之一,遞增與所述第二地址相關(guān)聯(lián)的第二命中計(jì)數(shù),以所述第二地址替換所命中的多個(gè)io地址之一,若所述第二命中計(jì)數(shù)滿足閾值,將所述第二io命令標(biāo)記為屬于第一順序流。

根據(jù)本發(fā)明的第一方面的第九至第十順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第十一順序流檢測方法,所述方法還包括:響應(yīng)于收到第三io命令,如 果第三io命令的第三地址命中所緩存的除所述第一地址或所述第二地址之外的多個(gè)io地址之一,以所述第三地址替換所命中的多個(gè)io地址之一,遞增與所述第三地址相關(guān)聯(lián)的第三命中計(jì)數(shù);若第三命中計(jì)數(shù)滿足閾值,將第三io命令標(biāo)記為屬于第二順序流。

根據(jù)本發(fā)明的第一方面的第一至第十一順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第十二順序流檢測方法,其中如果第一io命令的第一地址命中所緩存的多個(gè)io地址之一,與第一io命令的數(shù)據(jù)長度相對應(yīng)地遞增所述第一命中計(jì)數(shù)。

根據(jù)本發(fā)明的第一方面的第一至第十二順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第十三順序流檢測方法,還包括,若第一io命令是寫命令,將第一順序流寫入到物理地址臨近的存儲位置。

根據(jù)本發(fā)明的第一方面的第一至第十三順序流檢測方法之一,提供了根據(jù)本發(fā)明第一方面的第十四順序流檢測方法,還包括,若第一io命令是讀命令,生成預(yù)讀命令來從與所述第一地址相鄰的位置讀取數(shù)據(jù)。

根據(jù)本發(fā)明的第二方面,提供了根據(jù)本發(fā)明第二方面的第一順序流檢測方法,其中緩存多個(gè)io地址;與所緩存的多個(gè)io地址的每個(gè)相關(guān)聯(lián)地記錄命中計(jì)數(shù);所述方法包括:響應(yīng)于收到第一io命令,若所述第一命令命中了緩存的多個(gè)io地址中被標(biāo)記為屬于第一順序流的io地址,以所述第一地址的第一地址替換所命中的io地址;將第一io命令標(biāo)記為屬于順序流。

根據(jù)本發(fā)明的第二方面的第一順序流檢測方法,提供了根據(jù)本發(fā)明第二方面的第二順序流檢測方法,還包括:若所述第一io命令命中了緩存的多個(gè)io地址中未被標(biāo)記為屬于第一順序流的第二地址,以所述第一地址替換所命中的第二地址,遞增與所述第一地址相關(guān)聯(lián)的第二命中計(jì)數(shù);若第二命中計(jì)數(shù)滿足閾值,將第一io命令標(biāo)記為屬于順序流。

根據(jù)本發(fā)明的第二方面的第一或第二順序流檢測方法,提供了根據(jù)本發(fā)明第二方面的第三順序流檢測方法,還包括:如果第一io命令未命中緩存的多個(gè)io地址的任何一個(gè),遞增未命中計(jì)數(shù)器;若所述未命中計(jì)數(shù)器超出閾值,遞減同所述多個(gè)io地址的每個(gè)相關(guān)聯(lián)的命中計(jì)數(shù);以及以所述第一地址替換緩存的多個(gè)io地址之一。

根據(jù)本發(fā)明的第二方面的第一或第二順序流檢測方法,提供了根據(jù)本發(fā)明第二方面的第四順序流檢測方法,還包括:如果第一io命令未命中緩存的多個(gè)io地址的任何一個(gè),遞增未命中計(jì)數(shù)器;若所述未命中計(jì)數(shù)器超出閾值,遞減同所述多個(gè)地址的每個(gè)相關(guān)聯(lián)的命中計(jì)數(shù);以及以所述第一地址替換緩存的多個(gè)io地址中未被標(biāo)記為屬于順序流的io地址之一。

根據(jù)本發(fā)明的第三方面,提供了根據(jù)本發(fā)明第三方面的順序流檢測系統(tǒng),其中緩存多個(gè)io地址;與所緩存的多個(gè)io地址的每個(gè)相關(guān)聯(lián)地記錄命中計(jì)數(shù);所述系統(tǒng)包括:命中檢測模塊,用于響應(yīng)于收到第一io命令,如果第一io命令的第一地址命中所緩存的多個(gè)io地址之一,以所述第一地址替換所命中的多個(gè)io地址之一,遞增與所述第一地址相關(guān)聯(lián)的第一命中計(jì)數(shù);以及順序流標(biāo)記模塊,用于若第一命中計(jì)數(shù)滿足閾值,將第一io命令標(biāo)記為屬于第一順序流。

根據(jù)本發(fā)明的第四方面,提供了根據(jù)本發(fā)明第四方面的順序流檢測系統(tǒng),其中緩存多個(gè)io地址;與所緩存的多個(gè)io地址的每個(gè)相關(guān)聯(lián)地記錄命中計(jì)數(shù);所述系統(tǒng)包括:命中檢測模塊,用于響應(yīng)于收到第一io命令,若所述第一命令命中了緩存的多個(gè)io地址中被標(biāo)記為屬于第一順序流的io地址,以所述第一地址的第一地址替換所命中的io地址;以及順序流標(biāo)記模塊,用于將第一io命令標(biāo)記為屬于順序流。

根據(jù)本發(fā)明的第五方面,提供一種包含計(jì)算機(jī)程序代碼的計(jì)算機(jī)程序,當(dāng)被載入計(jì)算機(jī)系統(tǒng)并在計(jì)算機(jī)系統(tǒng)上執(zhí)行時(shí),所述計(jì)算機(jī)程序代碼使所述計(jì)算機(jī)系統(tǒng)執(zhí)行 根據(jù)本發(fā)明第一方面提供的順序流檢測方法或者根據(jù)本發(fā)明第二方面提供的順序流檢測方法。

根據(jù)本發(fā)明的第六方面,提供一種包括程序代碼的程序,當(dāng)被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時(shí),所述計(jì)程序代碼使所述存儲設(shè)備執(zhí)行根據(jù)本發(fā)明第一方面提供的順序流檢測方法或者根據(jù)本發(fā)明第二方面提供的順序流檢測方法。

附圖說明

當(dāng)連同附圖閱讀時(shí),通過參考后面對示出性的實(shí)施例的詳細(xì)描述,將最佳地理解本發(fā)明以及優(yōu)選的使用模式和其進(jìn)一步的目的和優(yōu)點(diǎn),其中附圖包括:

圖1a示出了現(xiàn)有技術(shù)中主機(jī)與設(shè)備間的io命令流的示意圖;

圖1b示出了現(xiàn)有技術(shù)中在存儲介質(zhì)上存儲io命令流的示意圖;

圖2示出了根據(jù)本發(fā)明實(shí)施例的存儲設(shè)備的框圖;

圖3示出了根據(jù)本發(fā)明實(shí)施例的順序流檢測的示意圖;

圖4示出了根據(jù)本發(fā)明實(shí)施例的用于順序流檢測的緩沖區(qū)結(jié)構(gòu)的示意圖;

圖5展示了根據(jù)本發(fā)明實(shí)施例的順序流檢測過程中的緩沖區(qū)變化;

圖6展示了根據(jù)本發(fā)明又一實(shí)施例的順序流檢測過程中的緩沖區(qū)變化;

圖7是根據(jù)本發(fā)明實(shí)施例的順序流檢測方法的流程圖;

圖8是根據(jù)本發(fā)明又一實(shí)施例的順序流檢測方法的流程圖;以及

圖9是根據(jù)本發(fā)明實(shí)施例的順序流檢測系統(tǒng)的框圖。

具體實(shí)施方式

參看圖2,以固態(tài)存儲設(shè)備(solidstoragedevice,ssd)作為存儲設(shè)備的舉例,圖2展示了存儲設(shè)備的框圖。存儲設(shè)備201可以耦合到主機(jī),用于為主機(jī)提供存儲能力。主機(jī)同存儲設(shè)備102之間可通過多種方式相耦合,耦合方式包括但不限于通過例如sata、ide、usb、pcie、nvme(nvmexpress)、scsi、以太網(wǎng)、光纖通道、無線通信網(wǎng)絡(luò)等連接主機(jī)與存儲設(shè)備102。主機(jī)可以是能夠通過上述方式同存儲設(shè)備相通信的信息處理設(shè)備,例如,個(gè)人計(jì)算機(jī)、平板電腦、服務(wù)器、便攜式計(jì)算機(jī)、網(wǎng)絡(luò)交換機(jī)、路由器、蜂窩電話、個(gè)人數(shù)字助理等。存儲設(shè)備102包括接口103、控制部件104、一個(gè)或多個(gè)nvm(非易失存儲器,non-volatilememory)存儲芯片105以及固件存儲器110。接口103可適配于通過例如sata、ide、usb、pcie、nvme、scsi、以太網(wǎng)、光纖通道等方式與主機(jī)交換數(shù)據(jù)??刂撇考?04用于控制在接口103、nvm存儲芯片105以及固件存儲器110之間的數(shù)據(jù)傳輸,還用于存儲管理、主機(jī)邏輯地址到閃存物理地址映射、擦除均衡、壞塊管理等??赏ㄟ^軟件、硬件、固件或其組合的多種方式實(shí)現(xiàn)控制部件104。控制部件104可以是fpga(field-programmablegatearray,現(xiàn)場可編程門陣列)、asic(applicationspecificintegratedcircuit,應(yīng)用專用集成電路)或者其組合的形式。控制部件104也可以包括處理器或者控制器。控制部件104在運(yùn)行時(shí)從固件存儲器110加載固件。固件存儲器110可以是nor閃存、rom、eeprom等。固件用于提供電子設(shè)備底層功能,諸如bios、操作系統(tǒng)加載等。

在根據(jù)本發(fā)明的實(shí)施例中,存儲設(shè)備201從主機(jī)接收io命令,并對所接收的io命令執(zhí)行順序流檢測,以從所接收的多條io命令中檢測并提取出順序流。在一個(gè)例子中,控制部件204通過加載固件210,并執(zhí)行根據(jù)本發(fā)明實(shí)施例的順序流檢測。在另一個(gè)例子中,在同存儲設(shè)備201耦合的主機(jī)中執(zhí)行順序流檢測,并且在發(fā)送給存儲設(shè)備的io命令中標(biāo)記指示該io命令是否屬于順序流的標(biāo)簽。

圖3是根據(jù)本發(fā)明實(shí)施例的順序流檢測示意圖。作為舉例,在諸如固態(tài)硬盤的 存儲設(shè)備中對接收到的io命令實(shí)施順序流檢測。從訪問存儲設(shè)備的多個(gè)io命令中,檢測出訪問連續(xù)地址的順序流a、順序流b以及訪問的地址不具有順序性的多個(gè)io命令(由c、d、e、…s指示)(也稱為隨機(jī)流)。并且,將順序流a寫入到數(shù)據(jù)塊1中,將順序流b寫入到數(shù)據(jù)塊2中,將隨機(jī)流寫入到數(shù)據(jù)塊3。當(dāng)順序流a對應(yīng)的數(shù)據(jù)生命周期完成而被更新或無效時(shí)(例如,當(dāng)順序流a對應(yīng)大尺寸視頻文件時(shí),該視頻文件被刪除),數(shù)據(jù)塊1中的數(shù)據(jù)都變?yōu)闊o效,并使得在回收數(shù)據(jù)塊1時(shí),無需將數(shù)據(jù)塊中的有效數(shù)據(jù)進(jìn)行搬移(因?yàn)閿?shù)據(jù)塊1中不存在有效數(shù)據(jù),或有效數(shù)據(jù)較少),從而降低了寫放大。此外,順序流中的數(shù)據(jù)也可能被連續(xù)讀取。例如,當(dāng)順序流a對應(yīng)大尺寸視頻文件時(shí),數(shù)據(jù)塊1中對應(yīng)于a1、a2、a3與a4的數(shù)據(jù)很可能被連續(xù)讀取。因而對于存儲順序流的數(shù)據(jù)塊1,在響應(yīng)讀操作時(shí),可以在接收到后續(xù)的io命令前,預(yù)讀后續(xù)的數(shù)據(jù),從而降低對后續(xù)讀io命令的響應(yīng)時(shí)間。

為檢測順序流,參看圖4,展示了根據(jù)本發(fā)明實(shí)施例的用于順序流檢測的緩沖區(qū)結(jié)構(gòu)。在存儲器中緩存多個(gè)io命令要訪問的地址。在圖4的例子中,io命令攜帶邏輯塊地址(lba)。在其他例子中,io命令可以攜帶其他形式的地址(例如,虛擬地址),只要io命令的地址空間的元素之間具有順序性。

參看圖4,緩沖區(qū)中包括多個(gè)(6個(gè))條目,每個(gè)條目包括邏輯塊地址(lba)與計(jì)數(shù)值,邏輯塊地址與計(jì)數(shù)值相對應(yīng)地存儲。在圖4的例子中,緩沖區(qū)條目的邏輯塊地址來自io命令訪問的一個(gè)或多個(gè)lba地址的最后一個(gè)。在其他例子中,緩沖區(qū)條目的地址可以記錄io命令的地址范圍,或者io命令的首地址與長度。緩沖區(qū)條目的計(jì)數(shù)值指示該緩沖區(qū)條目的地址被命中的次數(shù)。

參看圖4,還提供了順序流標(biāo)記(ss1、ss2)。順序流標(biāo)記可以有多個(gè),每個(gè)順序流標(biāo)記指示了一個(gè)順序流。在圖4中,順序流標(biāo)記ss1指示了訪問lba3的io命令屬于順序流,而順序流標(biāo)記ss2指示了訪問lba5的io命令屬于另一個(gè)順序流。

圖5展示了根據(jù)本發(fā)明實(shí)施例的順序流檢測過程中的緩沖區(qū)變化。輸入流550包括多個(gè)io命令,按時(shí)間先后順序分別訪問邏輯塊地址為1、52、2、21、100、3、70以及4的存儲位置。在收到邏輯塊地址為1與52的兩個(gè)io命令后,緩沖區(qū)a展示了緩沖區(qū)的內(nèi)容。響應(yīng)于收到訪問邏輯塊地址1的io命令,將緩沖區(qū)條目512中填充邏輯塊地址1,以及這是該緩沖區(qū)條目512的首次填充,相應(yīng)將對應(yīng)的計(jì)數(shù)值初始化為0。類似地,響應(yīng)于接下來收到訪問邏輯塊地址52的io命令,將緩沖區(qū)條目514中填充邏輯塊地址52,并將對應(yīng)的計(jì)數(shù)值初始化為0。

緩沖區(qū)b展示了收到邏輯塊地址為2與21的io命令后的緩沖區(qū)內(nèi)容。響應(yīng)于收到邏輯塊地址為2的io命令,檢查該io命令是否命中了緩沖區(qū)條目。由于緩沖區(qū)條目512的地址字段為1,而邏輯塊地址”2”與緩沖區(qū)512的地址字段的內(nèi)容的下一地址,因而該io命令命中了緩沖區(qū)條目512。作為響應(yīng),將該io命令的邏輯塊地址”2“填充緩沖區(qū)條目512,并將緩沖區(qū)條目512的計(jì)數(shù)值遞增(得到1)。響應(yīng)于收到邏輯塊地址為21的io命令,由于該io命令沒有命中任何一個(gè)緩沖區(qū)條目,將該io命令填入緩沖區(qū)的空條目516。

緩沖區(qū)c展示了收到邏輯塊地址為100與3的io命令后的緩沖區(qū)內(nèi)容。響應(yīng)于收到邏輯塊地址為100的io命令,檢查該io命令是否命中了緩沖區(qū)條目。由于邏輯塊地址為100的io命令未命中任何一個(gè)緩沖區(qū)條目,為該io命令在緩沖區(qū)中分配新的條目。在圖5的例子中,緩沖區(qū)中存在空條目518,將邏輯塊地址為100的io命令填入緩沖區(qū)的空條目518。接下來收到邏輯塊地址為3的io命令。邏輯塊地址為3的io命令命中了緩沖區(qū)512,將該io命令的邏輯塊地址”3“填充條目512的地址字段,并使條目512的計(jì)數(shù)值遞增。在圖5的例子中,條目512的計(jì)數(shù)值滿足了順序流檢測的指定條件(例如,計(jì)數(shù)值不小于2),則將邏輯塊地址為3的io命令識別 為屬于順序流,并使順序流標(biāo)記ss1指向緩沖區(qū)條目512。

緩沖區(qū)d展示了收到邏輯塊地址為70與4的io命令后的緩沖區(qū)內(nèi)容。響應(yīng)于收到邏輯塊地址為70的io命令,檢查該io命令是否命中了緩沖區(qū)條目。由于邏輯塊地址為70的io命令未命中任何一個(gè)緩沖區(qū)條目,為該io命令在緩沖區(qū)中分配新的條目。在圖5的例子中,緩沖區(qū)中存在空條目519,將邏輯塊地址為70的io命令填入緩沖區(qū)的空條目51。所屬領(lǐng)域技術(shù)人員將意識到,可以采用其他方式將未命中緩沖區(qū)條目的io命令的信息填入緩沖區(qū)條目。例如,選擇多個(gè)緩沖區(qū)條目(512、514、516與518)中計(jì)數(shù)值最小的條目,或者上次更新時(shí)間距當(dāng)前時(shí)間最為久遠(yuǎn)的緩沖區(qū)條目。在另一個(gè)例子中,由于緩沖區(qū)條目512被識別為指示了順序流,在為未命中任何條目的io命令選擇待替換的io條目時(shí),不考慮指示了順序流的緩沖區(qū)512,而從多個(gè)緩沖區(qū)條目(514、516、518、519與520)中根據(jù)選擇策略選出條目。例如,從上次更新時(shí)間距當(dāng)前時(shí)間最久的多個(gè)緩沖區(qū)條目中選擇計(jì)數(shù)值最小的條目;或者從計(jì)數(shù)值最小的多個(gè)緩沖區(qū)條目中選擇上次更新時(shí)間距當(dāng)前時(shí)間最久的條目。

接下來收到邏輯塊地址為4的io命令。邏輯塊地址為4的io命令命中了緩沖區(qū)512,將該io命令的邏輯塊地址”3“填充條目512的地址字段,并使條目512的計(jì)數(shù)值遞增。順序流標(biāo)記ss1依然指向條目512,并將邏輯塊地址為4的io命令標(biāo)記為屬于順序流。

在圖5的例子中,輸入流550中的io命令均為寫命令。并將識別為屬于順序流的多個(gè)寫命令的待寫入數(shù)據(jù)寫入到存儲介質(zhì)上物理地址臨近的存儲位置,例如,寫入到相同的存儲塊,或物理地址連續(xù)的存儲頁或存儲塊。

在另一個(gè)例子中,對輸入流中的讀命令與寫命令分別進(jìn)行順序流檢測。將構(gòu)成順序流的寫命令寫入到臨近的存儲位置,而針對構(gòu)成順序流的讀命令,生成預(yù)讀命令來從與當(dāng)前讀命令訪問的地址相鄰的位置讀取數(shù)據(jù)。預(yù)讀命令讀取的數(shù)據(jù)可存儲在存儲介質(zhì)的緩存中(例如,nand閃存的緩沖寄存器)、存儲設(shè)備的緩存或者主機(jī)的內(nèi)存中。

圖6展示了根據(jù)本發(fā)明又一實(shí)施例的順序流檢測過程中的緩沖區(qū)變化。輸入流650是在輸入流550之后的多個(gè)io命令,按時(shí)間先后順序分別訪問邏輯塊地址為5、47、6-10、53、19、67、54以及13的存儲位置,作為舉例,這些io命令均為寫命令,其中一個(gè)命令向邏輯塊地址為6-10的存儲位置寫入數(shù)據(jù),從而io命令所寫入或讀出的數(shù)據(jù)具有不同的長度。

在收到邏輯塊地址為5與47的兩個(gè)io命令后,緩沖區(qū)e展示了緩沖區(qū)的內(nèi)容。訪問邏輯塊地址5的io命令命中了緩沖區(qū)條目512(邏輯塊地址5在緩沖區(qū)條目512的地址字段”3”(參看圖5的緩沖區(qū)d)之后),將緩沖區(qū)條目512中更新為邏輯塊地址5,并使相對應(yīng)的計(jì)數(shù)值遞增。響應(yīng)于接下來收到訪問邏輯塊地址47的io命令,在緩沖區(qū)的空閑條目520中記錄邏輯塊地址47,并使對應(yīng)的計(jì)數(shù)值初始化。

緩沖區(qū)f展示了收到邏輯塊地址為6-10與53-54的io命令后的緩沖區(qū)內(nèi)容。響應(yīng)于收到邏輯塊地址為6-10的io命令,該io命令命中了緩沖區(qū)條目512(邏輯塊地址6-10的首地址”6“在緩沖區(qū)條目512的地址”5“之后),將該io命令的最后邏輯塊地址”10“填充到條目512,以及由于該io命令占用了5個(gè)邏輯塊地址,使條目512的計(jì)數(shù)值遞增5。響應(yīng)于收到邏輯塊地址為53-54的io命令,由于該io命令命中了緩沖區(qū)條目514,將邏輯塊地址”54“填入條目514,并使條目514的計(jì)數(shù)值遞增到2。條目514的計(jì)數(shù)值滿足了順序流檢測的指定條件(例如,計(jì)數(shù)值不小于2),則將邏輯塊地址為54的io命令識別為屬于順序流,并使順序流標(biāo)記ss2指向緩沖區(qū)條目514。

在另一個(gè)例子中,同一時(shí)刻僅標(biāo)記一個(gè)順序流。因而即使條目514的計(jì)數(shù)值滿 足了標(biāo)記為順序流的條件(例如,不小于2),由于已經(jīng)存在了順序流ss1,因而不將命中條目514的io命令標(biāo)記為順序流。若條目514被后續(xù)多條io命令命中,使得條目514的計(jì)數(shù)值超過了條目512的計(jì)數(shù)值(例如,成為多個(gè)條目中計(jì)數(shù)值最大的條目),可將命中條目514的io命令標(biāo)記為屬于順序流。

緩沖區(qū)g展示了收到邏輯塊地址為19與67的io命令后的緩沖區(qū)內(nèi)容。響應(yīng)于收到邏輯塊地址為19的io命令,該io命令未命中任何緩沖區(qū)條目。選擇緩沖區(qū)條目之一用于容納邏輯塊地址為19的io命令。由于條目512與條目514被指示為屬于順序流,盡量不用條目512與條目514來容納未命中任何條目的io命令。在條目516-520中,優(yōu)選地從計(jì)數(shù)值較小的條目516-520中選擇一個(gè)來容納新io命令。例如,選擇更新時(shí)間較早的條目516來容納邏輯塊地址為19的io命令,并初始化計(jì)數(shù)值。響應(yīng)于收到邏輯塊地址為67的io命令,該io命令未命中任何緩沖區(qū)條目。選擇計(jì)數(shù)值較小(在圖6的緩沖區(qū)g中為0),且更新時(shí)間較早的條目518來容納邏輯塊地址為67的io命令,并初始化計(jì)數(shù)值。

緩沖區(qū)h展示了收到邏輯塊地址為54與13的io命令后的緩沖區(qū)內(nèi)容。響應(yīng)于收到邏輯塊地址為54的io命令,該io命令命中條目514(將接收的io命令的邏輯塊地址與條目中的地址相同,也視作命中),并使條目514的計(jì)數(shù)值遞增。作為另一個(gè)例子,在條目中記錄起始地址與結(jié)束地址(或起始地址與長度),若接收到的io命令的邏輯塊地址與條目中記錄的地址存在交疊,也視為命中。

而響應(yīng)于收到邏輯塊地址為13的io命令,該io命令未命中任何一個(gè)條目,選擇條目519來容納邏輯塊地址為13的io命令。

在進(jìn)一步的例子中,還計(jì)數(shù)緩沖區(qū)條目未命中的次數(shù)。例如在收到邏輯塊地址為13的io命令后,緩沖區(qū)條目累計(jì)已經(jīng)有9次未命中,達(dá)到了閾值,則將緩沖區(qū)中所有條目的計(jì)數(shù)值遞減。如圖6中的緩沖區(qū)h所示,條目512的計(jì)數(shù)值被遞減為8,而條目514的計(jì)數(shù)值被遞減為2,其他條目的計(jì)數(shù)值已經(jīng)為最小值,保持不變。

在進(jìn)一步的例子中,將未被標(biāo)識為屬于順序流的io命令標(biāo)識為隨機(jī)流,從而可將所有標(biāo)識為隨機(jī)流的io命令以相同或不同方式處理。

圖7是根據(jù)本發(fā)明實(shí)施例的順序流檢測方法的流程圖。根據(jù)本發(fā)明的實(shí)施例,在存儲設(shè)備中實(shí)施順序流檢測。存儲設(shè)備從主機(jī)或其他存儲設(shè)備接收io命令(710)。io命令中包括邏輯塊地址,指示了要訪問的數(shù)據(jù)的存儲位置。io命令可以是讀命令、寫命令或其他類型的命令。io命令要訪問的數(shù)據(jù)可具有不同的長度,相應(yīng)地,io命令的邏輯地址可以是一個(gè)范圍。下面以寫命令為例,描述順序流檢測的方法。

參看圖4,在諸如存儲器的緩沖區(qū)中緩存了多個(gè)條目,每個(gè)條目包括邏輯塊地址與相應(yīng)的計(jì)數(shù)值。響應(yīng)于接收到io命令,檢查io命令的邏輯塊地址是否命中了被緩沖的條目(720)。作為舉例,參看圖5,當(dāng)前緩沖區(qū)的內(nèi)容由緩沖區(qū)b所示。接收到邏輯塊地址為3的io命令。緩沖區(qū)b中,條目512的地址為“2”,邏輯塊地址為3的io命令命中了條目512,則將io命令的邏輯塊地址“3”替換被命中的條目512的地址字段,并使相應(yīng)的計(jì)數(shù)值遞增(730)。接下來,判斷計(jì)數(shù)值是否滿足閾值(740)。作為舉例,將計(jì)數(shù)值的閾值定義為“3”,條目512的當(dāng)前計(jì)數(shù)值滿足(例如,不小于)閾值,則將該邏輯塊地址為3的io命令標(biāo)記為屬于順序流(750)。

在進(jìn)一步的例子中,接收到訪問邏輯塊地址為70的io命令(710)。邏輯塊地址為70的io命令沒有命中任何條目中的被緩存的地址,那么,選擇條目之一用于容納該io命令。參看圖5的緩沖區(qū)d,選擇條目519容納該邏輯塊地址為70的io命令,并將條目519的計(jì)數(shù)值初始化。

在一個(gè)例子中,在任意時(shí)刻,最多存在一個(gè)順序流。即使有多個(gè)條目的計(jì)數(shù)值滿足閾值,也只將一個(gè)條目標(biāo)記為屬于順序流,例如將計(jì)數(shù)值最大的條目對應(yīng)的io 命令標(biāo)記為屬于順序流。在又一個(gè)例子中,同時(shí)可以存在m個(gè)順序流(m>1),將計(jì)數(shù)值滿足閾值的m個(gè)條目對應(yīng)的io命令標(biāo)記為屬于順序流。為順序流提供標(biāo)記以區(qū)分順序流,例如順序流ss1與順序流ss2。順序流有生命周期,在生命周期內(nèi),一般為命中同一個(gè)條目的io命令分配相同的順序流標(biāo)記。

可將多種地址之間的關(guān)系視為命中,例如,io命令的地址在數(shù)值上緊鄰條目中的地址,io命令的地址可由條目中的地址遞增得到,io命令的地址與條目中的地址相同或者io命令的地址與條目中的地址的距離低于閾值。再者,io命令中指示地址范圍,而io命令的地址范圍的起始地址在數(shù)值上緊鄰條目中的地址,可由條目中的地址遞增得到,或者包含了條目中的地址。在依然另一個(gè)例子中,條目中記錄地址范圍,而io命令的地址范圍緊鄰條目中的地址范圍的下界,或者io命令的地址范圍與條目中的地址范圍相交疊。

在根據(jù)本發(fā)明的另一個(gè)實(shí)施例中,存儲設(shè)備從主機(jī)接收的io命令中包括標(biāo)簽。作為舉例,標(biāo)簽指示了發(fā)出該io命令的主機(jī)、虛擬機(jī)、應(yīng)用或者明示了該io命令屬于順序流ss1。從而存儲設(shè)備中根據(jù)io命令中的標(biāo)簽識別順序流。響應(yīng)于接收到io命令,若io命令中存在指示順序流ss1的標(biāo)簽,用與順序流ss1相關(guān)聯(lián)的條目512(參見圖5的緩沖區(qū)c)容納該io命令,包括以該io命令的地址替換條目512中的地址,并使條目512的計(jì)數(shù)值遞增。若io命令中存在標(biāo)簽t3(未明示該io命令屬于順序流),而在緩沖區(qū)中不存在與標(biāo)簽t3相關(guān)聯(lián)的條目(參見圖5的緩沖區(qū)d),選擇一個(gè)條目(例如,條目514-520中的條目520)來容納該io命令,并與條目520相關(guān)聯(lián)地記錄標(biāo)簽t3。并且,當(dāng)再次收到攜帶標(biāo)簽t3的io命令時(shí),即使該io命令未命中條目520,也以條目520容納該io命令,從而與攜帶其他標(biāo)簽的io命令相區(qū)分。在又一個(gè)例子中,若存儲設(shè)備收到的io命令中不存在標(biāo)簽,則不對其進(jìn)行順序流檢測。在又一個(gè)例子中,主機(jī)與存儲設(shè)備使用相同的順序流標(biāo)簽,或者主機(jī)與存儲設(shè)備可獲知彼此所使用的順序流標(biāo)簽。

圖8是根據(jù)本發(fā)明又一實(shí)施例的順序流檢測方法的流程圖。存儲設(shè)備從主機(jī)或其他存儲設(shè)備接收io命令(810)。返回參看圖6,當(dāng)前緩沖區(qū)的內(nèi)容由緩沖區(qū)e所示。接收到邏輯塊地址為6-10的io命令。緩沖區(qū)e中,條目512中記錄的地址為“5”,該io命令的地址命中條目512中記錄的地址,且條目512已被標(biāo)記為屬于順序流(820),因而將邏輯塊地址為6-10的io命令標(biāo)記為屬于順序流(830)??蛇x地,更新條目512中記錄的地址為“10”(圖6的緩沖區(qū)f),以及更新條目512的計(jì)數(shù)值。在另一個(gè)例子中,接收到邏輯塊地址為53-54的io命令(810)(圖6的緩沖區(qū)e)。該io命令未命中被標(biāo)記為屬于順序流的條目512(820),而條目514中記錄的地址為“52”,該條目被命中(840)。以邏輯塊地址為53-54的io命令的地址替換被命中的條目514的地址,并將條目514的計(jì)數(shù)值遞增(850)。接下來,判斷被更新的條目514是否滿足預(yù)設(shè)條件。作為舉例,條目514的計(jì)數(shù)值為2,滿足預(yù)設(shè)條件,將邏輯塊地址為53-54的io命令標(biāo)記為屬于順序流(870)。在一個(gè)例子中,已經(jīng)存在由ss1標(biāo)識的順序流(對應(yīng)命中條目512的io命令),分配新的順序流標(biāo)識ss2,將邏輯塊地址為53-54的io命令標(biāo)記為屬于順序流ss2。

在依然另一個(gè)例子中,接收到邏輯塊地址為19的io命令(810)(圖6的緩沖區(qū)f)。該io命令未命中被標(biāo)記為屬于順序流的條目512、514(820),也未命中緩沖區(qū)中的其他條目(840),從而將未命中計(jì)數(shù)值遞增(880)。未命中計(jì)數(shù)值用于監(jiān)視順序流的生命周期,使得長期未出現(xiàn)新的io命令的順序流能被新的順序流所取代。判斷未命中計(jì)數(shù)值是否超過閾值(890)。作為舉例,當(dāng)前未命中計(jì)數(shù)值為7,不大于閾值(890),從而未命中計(jì)數(shù)值保持不變,而以該io命令的邏輯塊地址19替換緩存的條目之一(897),作為舉例,由最近最少使用的條目519容納該io命令。

若未命令計(jì)數(shù)值超過閾值(890),作為舉例,將緩沖區(qū)中的所有條目的計(jì)數(shù)值遞減(895)(參看圖6的緩沖區(qū)h),并重置未命中計(jì)數(shù)值。從而當(dāng)順序流的生命周期結(jié)束,接收到的io命令不再屬于任何順序流時(shí),緩沖區(qū)會頻繁發(fā)生未命中,并使各條目的計(jì)數(shù)值遞減到不滿足條件,并使得條目512、514不再被標(biāo)記為屬于順序流。

上面以寫命令為例,描述了根據(jù)本發(fā)明實(shí)施例的順序流檢測方法??刹捎妙愃频姆椒z測接收到的讀命令中存在的順序流。響應(yīng)于出現(xiàn)順序的讀命令,可基于當(dāng)前讀命令的地址,預(yù)讀后續(xù)地址的數(shù)據(jù)。預(yù)讀的數(shù)據(jù)可被緩存,并低延遲地響應(yīng)給后續(xù)的讀命令。

進(jìn)一步地,對接收到的io命令,區(qū)分是io命令的類型(讀命令還是寫命令),并針對不同類型的io命令分別進(jìn)行順序流檢測。以及為不同類型的命令,分別提供專用的緩沖區(qū)、順序流標(biāo)識符、未命中計(jì)數(shù)器等資源。

圖9是根據(jù)本發(fā)明實(shí)施例的順序流檢測系統(tǒng)的框圖。為實(shí)施順序流檢測,在多個(gè)條目中緩存近期所收到的io命令的地址,以及在每個(gè)條目中還與io命令的地址相關(guān)聯(lián)地記錄命中計(jì)數(shù)。根據(jù)本發(fā)明實(shí)施例的順序流檢測系統(tǒng)包括命中檢測模塊910與順序流標(biāo)記模塊920。命中檢測模塊910用于響應(yīng)于收到io命令,若io命令的地址命中了緩存的多個(gè)io地址中被標(biāo)記為屬于順序流的io地址,以所緩存的被命中的地址替換io命令的地址。順序流標(biāo)記模塊920用于將io命令標(biāo)記為屬于順序流。

本發(fā)明實(shí)施例還提供一種包含程序代碼的程序,當(dāng)被載入cpu并在cpu中執(zhí)行時(shí),程序使cpu執(zhí)行上面提供的根據(jù)本發(fā)明實(shí)施例的方法之一。

本發(fā)明實(shí)施例還提供一種包括程序代碼的程序,當(dāng)被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時(shí),所述程序使存儲設(shè)備的處理器執(zhí)行上面提供的根據(jù)本發(fā)明實(shí)施例的方法之一。

應(yīng)該理解,框圖和流程圖的每個(gè)框以及框圖和流程圖的框的組合可以分別由包括計(jì)算機(jī)程序指令的各種裝置來實(shí)施。這些計(jì)算機(jī)程序指令可以加載到通用計(jì)算機(jī)、專用計(jì)算機(jī)或其他可編程數(shù)據(jù)控制設(shè)備上以產(chǎn)生機(jī)器,從而在計(jì)算機(jī)或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令創(chuàng)建了用于實(shí)現(xiàn)一個(gè)或多個(gè)流程圖框中指定的功能的裝置。

這些計(jì)算機(jī)程序指令還可以存儲在可以引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)控制設(shè)備的計(jì)算機(jī)可讀存儲器中從而以特定方式起作用,從而能夠利用存儲在計(jì)算機(jī)可讀存儲器中的指令來制造包括用于實(shí)現(xiàn)一個(gè)或多個(gè)流程圖框中所指定功能的計(jì)算機(jī)可讀指令的制品。計(jì)算機(jī)程序指令還可以加載到計(jì)算機(jī)或其他可編程數(shù)據(jù)控制設(shè)備上以使得在計(jì)算機(jī)或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行一系列的操作操作,從而產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,進(jìn)而在計(jì)算機(jī)或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令提供了用于實(shí)現(xiàn)一個(gè)或多個(gè)流程圖框中所指定功能的操作。

因而,框圖和流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的操作的組合和用于執(zhí)行指定功能的程序指令裝置的組合。還應(yīng)該理解,框圖和流程圖的每個(gè)框以及框圖和流程圖的框的組合可以由執(zhí)行指定功能或操作的、基于硬件的專用計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn),或由專用硬件和計(jì)算機(jī)指令的組合實(shí)現(xiàn)。

雖然當(dāng)前發(fā)明參考的示例被描述,其只是為了解釋的目的而不是對本發(fā)明的限制,對實(shí)施方式的改變,增加和/或刪除可以被做出而不脫離本發(fā)明的范圍。

這些實(shí)施方式所涉及的、從上面描述和相關(guān)聯(lián)的附圖中呈現(xiàn)的教導(dǎo)獲益的領(lǐng)域中的技術(shù)人員將認(rèn)識到這里記載的本發(fā)明的很多修改和其他實(shí)施方式。因此,應(yīng)該理解,本發(fā)明不限于公開的具體實(shí)施方式,旨在將修改和其他實(shí)施方式包括在所附權(quán)利要求書的范圍內(nèi)。盡管在這里采用了特定的術(shù)語,但是僅在一般意義和描述意義上使用它們并且不是為了限制的目的而使用。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
定南县| 扶沟县| 贞丰县| 新民市| 治县。| 治多县| 略阳县| 长子县| 微山县| 海晏县| 眉山市| 永善县| 黑河市| 章丘市| 沐川县| 永安市| 北海市| 浏阳市| 古田县| 策勒县| 内丘县| 禹城市| 宜君县| 安新县| 南漳县| 民勤县| 和龙市| 宜宾市| 神农架林区| 石泉县| 宜君县| 方城县| 长兴县| 兰溪市| 满洲里市| 营口市| 通河县| 云安县| 河南省| 孟连| 南漳县|