緩存數(shù)據(jù)的刷盤方法及裝置制造方法
【專利摘要】本發(fā)明提供一種緩存數(shù)據(jù)的刷盤方法及裝置。一種緩存數(shù)據(jù)的刷盤方法,應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)包括控制器、磁盤和SSD,所述SSD作為所述磁盤的緩存,所述方法由控制器執(zhí)行,所述方法包括:向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N;根據(jù)臟數(shù)據(jù)塊的標(biāo)識與LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA;根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
【專利說明】緩存數(shù)據(jù)的刷盤方法及裝置
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實(shí)施例涉及存儲(chǔ)技術(shù),尤其涉及一種緩存數(shù)據(jù)的刷盤方法及裝置。
【背景技術(shù)】
[0002]隨著固態(tài)硬盤(SSD, Solid State Drive)技術(shù)的成熟和成本的下降,越來越多的存儲(chǔ)系統(tǒng)開始選用SSD作為高速緩沖存儲(chǔ)器(cache)介質(zhì)。
[0003]現(xiàn)有技術(shù)中,存儲(chǔ)系統(tǒng)通過cache技術(shù)進(jìn)行寫緩存時(shí):控制器首先接收處理器下發(fā)的寫請求,其中該寫請求包括了待寫入數(shù)據(jù)及該待寫入數(shù)據(jù)對應(yīng)的邏輯區(qū)塊地址(LBA,Logical Block Address);其次,將待寫入數(shù)據(jù)寫入到SSD的緩存塊中,將該緩存塊的狀態(tài)設(shè)置為臟數(shù)據(jù)塊,并將該臟數(shù)據(jù)塊的標(biāo)識與待寫入數(shù)據(jù)對應(yīng)的LBA進(jìn)行關(guān)聯(lián)存儲(chǔ);最后在cache的刷盤時(shí)機(jī),向磁盤進(jìn)行數(shù)據(jù)同步(即將寫緩存中的數(shù)據(jù)發(fā)送到磁盤進(jìn)行存儲(chǔ),本發(fā)明中也稱為cache的刷盤)?,F(xiàn)有技術(shù)中,在進(jìn)行cache刷盤時(shí):控制器采用異步1的方式向SSD發(fā)送多個(gè)緩存數(shù)據(jù)讀取請求以獲得多個(gè)臟數(shù)據(jù)塊的緩存數(shù)據(jù);并在接收到任一緩存數(shù)據(jù)讀取請求對應(yīng)的緩存數(shù)據(jù)后,將該緩存數(shù)據(jù)及該緩存數(shù)據(jù)對應(yīng)的LBA發(fā)送至磁盤,以使磁盤將該緩存數(shù)據(jù)存儲(chǔ)至對應(yīng)的LBA。
[0004]由于磁盤存儲(chǔ)數(shù)據(jù)時(shí),首先需要將磁頭步進(jìn)到LBA所指示的位置,再將緩存數(shù)據(jù)進(jìn)行存儲(chǔ);因此,現(xiàn)有技術(shù)中,存在控制器刷盤效率低的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種緩存數(shù)據(jù)的刷盤方法及裝置,用以解決現(xiàn)有技術(shù)中控制器刷盤效率低的問題。
[0006]第一方面,本發(fā)明提供一種緩存數(shù)據(jù)的刷盤方法,應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)包括控制器、磁盤和固態(tài)硬盤SSD,所述SSD作為所述磁盤的緩存,所述方法由控制器執(zhí)行,所述方法包括:
[0007]向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;
[0008]接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ;
[0009]根據(jù)臟數(shù)據(jù)塊的標(biāo)識與磁盤邏輯區(qū)塊地址LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;
[0010]根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0011]結(jié)合第一方面,在第一方面的第一種可能實(shí)現(xiàn)的方式中,所述向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求之前,還包括:根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA。
[0012]結(jié)合第一方面的第一種可能實(shí)現(xiàn)的方式,在第一方面的第二種可能實(shí)現(xiàn)的方式中,所述根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,包括:根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于或等于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ;從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0013]結(jié)合第一方面的第第二種可能實(shí)現(xiàn)的方式,在第一方面的第三種可能實(shí)現(xiàn)的方式中,從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0014]結(jié)合第一方面的第二種或第三種可能實(shí)現(xiàn)的方式,在第一方面的第四種可能實(shí)現(xiàn)的方式中,所述方法還包括:根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊;
[0015]相應(yīng)的,向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識,包括:向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
[0016]第二方面,本發(fā)明提供一種控制器,所述控制器應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)包括所述控制器、磁盤和固態(tài)硬盤SSD,所述SSD作為所述磁盤的緩存,所述控制器包括:
[0017]讀取請求發(fā)送模塊,用于向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;
[0018]讀取響應(yīng)接收模塊,用于接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ;
[0019]LBA確定模塊,用于根據(jù)臟數(shù)據(jù)塊的標(biāo)識與磁盤邏輯區(qū)塊地址LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;
[0020]刷盤模塊,用于根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0021]結(jié)合第二方面,在第二方面的第一種可能實(shí)現(xiàn)的方式中,所述讀取請求發(fā)送模塊,還用于:根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA。
[0022]結(jié)合第二方面的第一種可能實(shí)現(xiàn)的方式,在第二方面的第二種可能實(shí)現(xiàn)的方式中,所述讀取請求發(fā)送模塊,具體用于:根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ;從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0023]結(jié)合第二方面的第二種可能實(shí)現(xiàn)的方式,在第二方面的第三種可能實(shí)現(xiàn)的方式中,所述讀取請求發(fā)送模塊,具體用于:從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0024]結(jié)合第二方面的第二種或第三種可能實(shí)現(xiàn)的方式,在第二方面的第四種可能實(shí)現(xiàn)的方式中,所述讀取請求發(fā)送模塊,還用于:根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊;
[0025]相應(yīng)的,所述讀取請求發(fā)送模塊,具體用于:向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
[0026]本發(fā)明提供一種緩存數(shù)據(jù)的刷盤方法及裝置,通過根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤,避免了由于磁盤來回尋道而浪費(fèi)的刷盤時(shí)間,提高了控制器的刷盤效率。
【專利附圖】
【附圖說明】
[0027]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0028]圖1為本發(fā)明緩存數(shù)據(jù)的刷盤方法的應(yīng)用場景示意圖;
[0029]圖2為本發(fā)明緩存數(shù)據(jù)的刷盤方法實(shí)施例一的流程圖;
[0030]圖3為本發(fā)明緩存數(shù)據(jù)的刷盤方法實(shí)施例二的流程圖;
[0031]圖4為本發(fā)明緩存數(shù)據(jù)的刷盤方法實(shí)施例三的流程圖;
[0032]圖5為本發(fā)明實(shí)施例LBA示意圖;
[0033]圖6為本發(fā)明控制器實(shí)施例一的結(jié)構(gòu)示意圖;
[0034]圖7為本發(fā)明控制器實(shí)施例四的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0035]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0036]圖1為本發(fā)明緩存數(shù)據(jù)的刷盤方法的應(yīng)用場景示意圖;如圖1所示,存儲(chǔ)系統(tǒng)中,處理器11將待寫入的數(shù)據(jù)發(fā)送至控制器12 ;控制器12首先將接收到的數(shù)據(jù)發(fā)送至SSD 13進(jìn)行緩存,然后再在cache的刷盤時(shí)機(jī)將緩存在SSD 13的數(shù)據(jù)同步至磁盤14?,F(xiàn)有技術(shù)中,控制器12將緩存在SSD 13的數(shù)據(jù)同步至磁盤14時(shí):控制器12采用異步1的方式向SSD 13發(fā)送多個(gè)緩存數(shù)據(jù)讀取請求以獲得多個(gè)緩存數(shù)據(jù);并在接收到任一緩存數(shù)據(jù)讀取請求對應(yīng)的緩存數(shù)據(jù)后,將該緩存數(shù)據(jù)及該緩存數(shù)據(jù)對應(yīng)的LBA發(fā)送至磁盤14,以使磁盤14將該緩存數(shù)據(jù)存儲(chǔ)至對應(yīng)的LBA。由于磁盤存儲(chǔ)數(shù)據(jù)時(shí),首先需要將磁頭步進(jìn)到LBA所指示的位置,再將緩存數(shù)據(jù)進(jìn)行存儲(chǔ);且磁頭只能向一個(gè)方向步進(jìn);因此,存在控制器刷盤效率低的問題。
[0037]圖2為本發(fā)明緩存數(shù)據(jù)的刷盤方法實(shí)施例一的流程圖,如圖2所示,本實(shí)施例的方法可以包括:
[0038]步驟201、向SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;
[0039]可選的,所述向SSD發(fā)送緩存數(shù)據(jù)讀取請求,包括:
[0040]向SSD發(fā)送M個(gè)緩存數(shù)據(jù)讀取請求,每一個(gè)緩存數(shù)據(jù)讀取請求中包括一個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;或者,向SSD發(fā)送一個(gè)緩存數(shù)據(jù)讀取請求,該緩存數(shù)據(jù)讀取請求中包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
[0041]可選的,所述M個(gè)待刷盤的臟數(shù)據(jù)塊可以為所有臟數(shù)據(jù)塊中任選的M個(gè)臟數(shù)據(jù)塊。
[0042]步驟202、接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ;
[0043]步驟203、根據(jù)臟數(shù)據(jù)塊的標(biāo)識與LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;
[0044]步驟204、根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0045]例如,若N = 5,且待刷盤的臟數(shù)據(jù)塊I對應(yīng)的LBA為2、待刷盤的臟數(shù)據(jù)塊2對應(yīng)的LBA為5、待刷盤的臟數(shù)據(jù)塊3對應(yīng)的LBA為3、待刷盤的臟數(shù)據(jù)塊4對應(yīng)的LBA為6、待刷盤的臟數(shù)據(jù)塊5對應(yīng)的LBA為4 ;則:控制器按照先待刷盤的臟數(shù)據(jù)塊I的緩存數(shù)據(jù)、再待刷盤的臟數(shù)據(jù)塊3的緩存數(shù)據(jù)、再待刷盤的臟數(shù)據(jù)塊5的緩存數(shù)據(jù)、再待刷盤的臟數(shù)據(jù)塊2的緩存數(shù)據(jù)、再待刷盤的臟數(shù)據(jù)塊4的緩存數(shù)據(jù)的順序?qū)?個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至磁盤。
[0046]現(xiàn)有技術(shù)中,控制器通過異步1的方式向SSD發(fā)送多個(gè)緩存數(shù)據(jù)讀取請求,并在接收到任一緩存數(shù)據(jù)讀取請求對應(yīng)的緩存數(shù)據(jù)后,就將該緩存數(shù)據(jù)同步至磁盤。本發(fā)明中,根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0047]現(xiàn)有技術(shù)中,由于控制器通過異步1的方式向SSD發(fā)送多個(gè)緩存數(shù)據(jù)讀取請求,并在接收到任一緩存數(shù)據(jù)讀取請求對應(yīng)的緩存數(shù)據(jù)后,就將該緩存數(shù)據(jù)同步至磁盤;且磁盤在存儲(chǔ)數(shù)據(jù)時(shí),首先需要將磁頭步進(jìn)到LBA所指示的位置,再將緩存數(shù)據(jù)進(jìn)行存儲(chǔ);且磁頭只能向一個(gè)方向步進(jìn)。因此,若磁頭當(dāng)前位于LBA等于3的位置,控制器第一次收到的緩存數(shù)據(jù)I對應(yīng)的LBA為8、第二次收到的緩存數(shù)據(jù)2對應(yīng)的LBA為6、第三次收到的緩存數(shù)據(jù)3對應(yīng)的LBA為2 ;則:磁盤的磁頭首先需要步進(jìn)至LBA等于8為的位置將緩存數(shù)據(jù)I進(jìn)行存儲(chǔ),接著磁頭需要步進(jìn)至LBA最大的位置后、重新回到LBA等于O的位置、再步進(jìn)至LBA等于6的位置將緩存數(shù)據(jù)2進(jìn)行存儲(chǔ),接著磁頭又需要步進(jìn)至LBA最大的位置后、重新又回到LBA等于O的位置、再步進(jìn)至LBA等于2的位置將緩存數(shù)據(jù)3進(jìn)行存儲(chǔ);因此,磁盤需要來回尋道(也即,步進(jìn)至LBA最大的位置后、重新回到LBA等于O的位置、再步進(jìn)至緩存數(shù)據(jù)對應(yīng)的LBA的位置)才能實(shí)現(xiàn)對各緩存數(shù)據(jù)的存儲(chǔ);而磁盤來回尋道需要耗費(fèi)較長時(shí)間;因此,現(xiàn)有技術(shù)中存在控制器刷盤效率低的問題。本發(fā)明中,通過根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤,避免了由于磁盤來回尋道而浪費(fèi)的刷盤時(shí)間,提高了控制器的刷盤效率。
[0048]本實(shí)施例,通過根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤,避免了由于磁盤來回尋道而浪費(fèi)的刷盤時(shí)間,提高了控制器的刷盤效率。
[0049]需要說明的是,本發(fā)明中方法的執(zhí)行主體是控制器。
[0050]圖3為本發(fā)明緩存數(shù)據(jù)的刷盤方法實(shí)施例二的流程圖,如圖3所示,本實(shí)施例的方法可以包括:
[0051]步驟301、獲得臟數(shù)據(jù)塊占SSD的所有緩存塊的比例;
[0052]可選的,當(dāng)控制器接收到處理器發(fā)送的待寫入數(shù)據(jù)時(shí),將待寫入數(shù)據(jù)寫入到SSD的若干個(gè)緩存塊中,并將該若干個(gè)緩存塊的狀態(tài)設(shè)置為臟數(shù)據(jù)塊;且該若干個(gè)緩存塊分別對應(yīng)一臟數(shù)據(jù)塊的標(biāo)識。
[0053]其中,所述臟數(shù)據(jù)塊占SSD的所有緩存塊的比例可以為:狀態(tài)為臟數(shù)據(jù)塊的緩存塊的數(shù)量除以SSD緩存塊的總數(shù),再乘以百分之百。
[0054]步驟302、確定所述比例是否大于或等于預(yù)設(shè)比例;
[0055]若是,則執(zhí)行步驟303 ;否則,結(jié)束。
[0056]可選的,預(yù)設(shè)比例可以為40%。
[0057]步驟303、根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA ;
[0058]可選的,根據(jù)臟數(shù)據(jù)塊占SSD的所有緩存塊的比例來確定M的大小:當(dāng)臟數(shù)據(jù)塊占SSD的所有緩存塊的比例越大時(shí),M越大。
[0059]可選的,當(dāng)前刷盤操作的LBA可以為最近一次將一臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至磁盤時(shí),該臟數(shù)據(jù)塊對應(yīng)的LBA。
[0060]本實(shí)施例中,通過根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇M個(gè)待刷盤的臟數(shù)據(jù)塊;其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA ;使得控制器向磁盤進(jìn)行同步的所有緩存數(shù)據(jù)所對應(yīng)的LBA都大于或等于當(dāng)前刷盤操作的LBA,使得在每次進(jìn)行刷盤時(shí)磁頭都是往一個(gè)方向步進(jìn),從而減小了磁頭尋道的時(shí)間;進(jìn)一步提高了控制器的刷盤效率。
[0061]可選的,所述根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇M個(gè)待刷盤的臟數(shù)據(jù)塊,包括:
[0062]根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于或等于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ;從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0063]具體的,在所有臟數(shù)據(jù)塊的標(biāo)識中,確定若一臟數(shù)據(jù)塊的LBA大于或等于當(dāng)前刷盤操作的LBA,則將該臟數(shù)據(jù)塊放入第一隊(duì)列。
[0064]例如,若當(dāng)前存在5個(gè)臟數(shù)據(jù)塊,臟數(shù)據(jù)塊1、臟數(shù)據(jù)塊2、臟數(shù)據(jù)塊3、臟數(shù)據(jù)塊4和臟數(shù)據(jù)塊5,臟數(shù)據(jù)塊I的LBA為5,臟數(shù)據(jù)塊2的LBA為15、臟數(shù)據(jù)塊3的LBA為20、臟數(shù)據(jù)塊4的LBA為25、臟數(shù)據(jù)塊5的LBA為30,當(dāng)前刷盤操作的LBA為9 ;則將臟數(shù)據(jù)塊2、臟數(shù)據(jù)塊3、臟數(shù)據(jù)塊4、臟數(shù)據(jù)塊5放入第一隊(duì)列;將臟數(shù)據(jù)塊I放入第二隊(duì)列。
[0065]進(jìn)一步可選的,從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0066]例如,若M等于2,第一隊(duì)列包括臟數(shù)據(jù)塊A、臟數(shù)據(jù)塊B、臟數(shù)據(jù)塊C、臟數(shù)據(jù)塊D、臟數(shù)據(jù)塊E ;其中,臟數(shù)據(jù)塊A的LBA為5,臟數(shù)據(jù)塊B的LBA為9,臟數(shù)據(jù)塊C的LBA為20,臟數(shù)據(jù)塊D的LBA為3,臟數(shù)據(jù)塊E的LBA為10 ;則通過從第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊,獲得的所述M個(gè)待刷盤的臟數(shù)據(jù)為臟數(shù)據(jù)塊D和臟數(shù)據(jù)塊A。
[0067]本實(shí)施例中,通過從第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊,使得在刷盤時(shí)能夠根據(jù)第一隊(duì)列中所包括的各臟數(shù)據(jù)塊的LBA由小至大的順序,依次將第一隊(duì)列中的M個(gè)臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至磁盤;進(jìn)一步減小了磁頭尋道的時(shí)間,提高了控制器的刷盤效率。
[0068]步驟304、向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;
[0069]可選的,控制器可以通過異步1的方式向SSD發(fā)送緩存數(shù)據(jù)讀取請求。
[0070]步驟305、接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ;
[0071]步驟306、根據(jù)臟數(shù)據(jù)塊的標(biāo)識與LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;
[0072]步驟307、根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤;
[0073]當(dāng)M大于N時(shí),例如,若控制器向SSD發(fā)送緩存數(shù)據(jù)讀取請求(其中,包括8 (即,M)個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識)后,一段時(shí)間(例如,1ms)內(nèi)收到了 6(也即,N)個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù);則:控制器可以首先對該6個(gè)緩存數(shù)據(jù)進(jìn)行磁盤同步。
[0074]本實(shí)施例,通過向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;并在接收到N待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)后對該N個(gè)緩存數(shù)據(jù)進(jìn)行磁盤同步;從而避免了當(dāng)控制器接收到若干個(gè)緩存數(shù)據(jù)的時(shí)間較晚時(shí),由于等待該若干個(gè)緩存數(shù)據(jù)而浪費(fèi)較長的時(shí)間。
[0075]可選的,在將N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤之后,再將剩余的M-N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至磁盤。
[0076]步驟308、回收cache空間;
[0077]可選的,可以通過將SSD中存儲(chǔ)所述N個(gè)緩存數(shù)據(jù)的緩存塊的狀態(tài)由臟數(shù)據(jù)塊更新為干凈緩存塊實(shí)現(xiàn)cache空間的回收;若一緩存塊對應(yīng)的狀態(tài)為干凈緩存塊時(shí),則控制器可以使用該緩存塊來緩存數(shù)據(jù)。
[0078]需要說明的是,步驟308執(zhí)行完之后,執(zhí)行步驟301。
[0079]需要說明的是,當(dāng)將第一隊(duì)列不存在臟數(shù)據(jù)塊時(shí)(也即,所有的臟數(shù)據(jù)塊的LBA都小于當(dāng)前刷盤操作的LBA),可以從第二隊(duì)列中選取M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0080]圖4為本發(fā)明緩存數(shù)據(jù)的刷盤方法實(shí)施例三的流程圖,如圖4所示,本實(shí)施例的方法可以包括:
[0081]步驟401、從第一隊(duì)列中選擇M個(gè)待刷盤的臟數(shù)據(jù)塊;
[0082]可選的,從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0083]步驟402、根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊;
[0084]其中,L小于或等于M ;
[0085]例如,圖5為本發(fā)明實(shí)施例LBA示意圖,如圖5所示,M = 80,80個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA為I?80,待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)的大小都為32K,且一個(gè)LBA對應(yīng)32K;則將LBA連續(xù)的臟數(shù)據(jù)塊合并后,可以獲得3個(gè)(也即,L等于3)合并后的待刷盤的臟數(shù)據(jù)塊(也即,合并后的待刷盤的臟數(shù)據(jù)塊1、合并后的待刷盤的臟數(shù)據(jù)塊2以及合并后的待刷盤的臟數(shù)據(jù)塊3),且合并后的待刷盤的臟數(shù)據(jù)塊I對應(yīng)的LBA為1、合并后的待刷盤的臟數(shù)據(jù)塊2對應(yīng)的LBA為33、合并后的待刷盤的臟數(shù)據(jù)塊3對應(yīng)的LBA為65。在獲得3個(gè)合并后的待刷盤的臟數(shù)據(jù)塊后,可以根據(jù)合并后的待刷盤的臟數(shù)據(jù)塊向SSD發(fā)送緩存數(shù)據(jù)讀取請求。
[0086]步驟403、向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識;
[0087]步驟404、接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括合并后的待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù);
[0088]步驟405、根據(jù)臟數(shù)據(jù)塊的標(biāo)識與LBA的對應(yīng)關(guān)系,確定所述合并后的待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;
[0089]步驟406、根據(jù)所述合并后的待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述合并后的待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0090]本實(shí)施例中,通過根據(jù)所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊;根據(jù)所述合并后的待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述合并后的待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤;減少了控制器向磁盤進(jìn)行緩存數(shù)據(jù)同步的次數(shù)。
[0091]圖6為本發(fā)明控制器實(shí)施例一的結(jié)構(gòu)示意圖,所述控制器應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)包括所述控制器、磁盤和SSD,所述SSD作為所述磁盤的緩存,如圖6所示,本實(shí)施例的控制器可以包括:讀取請求發(fā)送模塊601,用于向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;讀取響應(yīng)接收模塊602,用于接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ;LBA確定模塊603,用于根據(jù)臟數(shù)據(jù)塊的標(biāo)識與磁盤邏輯區(qū)塊地址LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;刷盤模塊604,用于根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0092]本實(shí)施例的控制器,可以用于執(zhí)行圖2所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0093]控制器實(shí)施例二
[0094]可選的,在本發(fā)明控制器實(shí)施例一的基礎(chǔ)上,讀取請求發(fā)送模塊601,還用于:根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA。
[0095]可選的,讀取請求發(fā)送模塊601,具體用于:根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ;從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0096]進(jìn)一步可選的,讀取請求發(fā)送模塊601,具體用于:從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0097]本實(shí)施例的控制器,可以用于執(zhí)行圖3所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0098]控制器實(shí)施例三
[0099]可選的,在本發(fā)明控制器實(shí)施例二的基礎(chǔ)上,讀取請求發(fā)送模塊601,還用于:根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊;相應(yīng)的,讀取請求發(fā)送模塊602,具體用于:向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
[0100]本實(shí)施例的控制器,可以用于執(zhí)行圖4所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0101]圖7為本發(fā)明控制器實(shí)施例四的結(jié)構(gòu)示意圖,如圖7所示,本實(shí)施例的控制器可以包括:發(fā)射器701、接收器702和處理器703。其中,發(fā)射器701,用于向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識;接收器702,用于接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ;處理器703,用于根據(jù)臟數(shù)據(jù)塊的標(biāo)識與LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ;根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
[0102]本實(shí)施例的控制器,可以用于執(zhí)行圖2所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0103]控制器實(shí)施例五
[0104]可選的,在本發(fā)明控制器實(shí)施例四的基礎(chǔ)上,處理器703還用于:根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA。
[0105]可選的,處理器703,具體用于:根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ;從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0106]進(jìn)一步可選的,處理器703,具體用于:從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
[0107]本實(shí)施例的控制器,可以用于執(zhí)行圖3所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0108]控制器實(shí)施例六
[0109]可選的,在本發(fā)明控制器實(shí)施例五的基礎(chǔ)上,處理器703還用于:根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊;
[0110]發(fā)射器701,具體用于:向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
[0111]本實(shí)施例的控制器,可以用于執(zhí)行圖4所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
[0112]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0113]最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種緩存數(shù)據(jù)的刷盤方法,其特征在于,應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)包括控制器、磁盤和固態(tài)硬盤SSD,所述SSD作為所述磁盤的緩存,所述方法由控制器執(zhí)行,所述方法包括: 向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識; 接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ; 根據(jù)臟數(shù)據(jù)塊的標(biāo)識與磁盤邏輯區(qū)塊地址LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ; 根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求之前,還包括: 根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,包括: 根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于或等于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ; 從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
5.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述方法還包括: 根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊; 相應(yīng)的,向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識,包括: 向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
6.一種控制器,其特征在于,所述控制器應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)包括所述控制器、磁盤和固態(tài)硬盤SSD,所述SSD作為所述磁盤的緩存,所述控制器包括: 讀取請求發(fā)送模塊,用于向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括M個(gè)待刷盤的臟數(shù)據(jù)塊的標(biāo)識; 讀取響應(yīng)接收模塊,用于接收所述SSD發(fā)送的緩存數(shù)據(jù)讀取響應(yīng),所述緩存數(shù)據(jù)讀取響應(yīng)包括N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù),M大于或等于N ; LBA確定模塊,用于根據(jù)臟數(shù)據(jù)塊的標(biāo)識與磁盤邏輯區(qū)塊地址LBA的對應(yīng)關(guān)系,確定所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA ; 刷盤模塊,用于根據(jù)所述N個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的LBA,按照LBA由小至大的順序,依次將所述N個(gè)待刷盤的臟數(shù)據(jù)塊的緩存數(shù)據(jù)存儲(chǔ)至所述磁盤。
7.根據(jù)權(quán)利要求6所述的控制器,其特征在于,所述讀取請求發(fā)送模塊,還用于: 根據(jù)當(dāng)前刷盤操作的LBA,從全部臟數(shù)據(jù)塊中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊,其中,所述M個(gè)待刷盤的臟數(shù)據(jù)塊分別對應(yīng)的M個(gè)LBA均大于所述當(dāng)前刷盤操作的LBA。
8.根據(jù)權(quán)利要求7所述的控制器,其特征在于,所述讀取請求發(fā)送模塊,具體用于: 根據(jù)所述當(dāng)前刷盤操作的LBA和每個(gè)臟數(shù)據(jù)塊的LBA,將所述每個(gè)臟數(shù)據(jù)塊放入第一隊(duì)列或第二隊(duì)列,所述第一隊(duì)列中的臟數(shù)據(jù)塊的LBA大于所述當(dāng)前刷盤操作的LBA,所述第二隊(duì)列中的臟數(shù)據(jù)塊的LBA小于所述當(dāng)前刷盤操作的LBA ; 從所述第一隊(duì)列中選擇所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
9.根據(jù)權(quán)利要求8所述的控制器,其特征在于,所述讀取請求發(fā)送模塊,具體用于:從所述第一隊(duì)列中選擇LBA值小的所述M個(gè)待刷盤的臟數(shù)據(jù)塊。
10.根據(jù)權(quán)利要求8或9所述的控制器,其特征在于,所述讀取請求發(fā)送模塊,還用于:根據(jù)選擇的所述M個(gè)待刷盤的臟數(shù)據(jù)塊的LBA,將所述M個(gè)待刷盤的臟數(shù)據(jù)塊中LBA連續(xù)的臟數(shù)據(jù)塊進(jìn)行合并,獲得合并后的待刷盤的臟數(shù)據(jù)塊; 相應(yīng)的,所述讀取請求發(fā)送模塊,具體用于:向所述SSD發(fā)送緩存數(shù)據(jù)讀取請求,所述緩存數(shù)據(jù)讀取請求包括所述合并后的待刷盤的臟數(shù)據(jù)塊的標(biāo)識。
【文檔編號】G06F12/08GK104461936SQ201410712971
【公開日】2015年3月25日 申請日期:2014年11月28日 優(yōu)先權(quán)日:2014年11月28日
【發(fā)明者】張志樂 申請人:華為技術(shù)有限公司