專利名稱:提高緩存性能的方法及緩存系統(tǒng)的制作方法
提高緩存性能的方法及緩存系統(tǒng)才支術(shù)領(lǐng)域本發(fā)明涉及數(shù)據(jù)緩存技術(shù),尤其涉及提高緩存性能的方法及緩存系統(tǒng)。
技術(shù)背景在數(shù)據(jù)存儲(chǔ)系統(tǒng)中,通常包括非易失存儲(chǔ)器和高速緩沖存儲(chǔ)器(Cache) 即緩存兩部分。當(dāng)外部設(shè)備發(fā)起輸入輸出(10)請(qǐng)求訪問數(shù)據(jù)存儲(chǔ)系統(tǒng)時(shí), 首先搜索Cache,如果在Cache中發(fā)現(xiàn)需要的數(shù)據(jù),則稱為緩存命中,從Cache 中讀取數(shù)據(jù);否則稱為緩存未命中,從非易失存儲(chǔ)器中讀取數(shù)據(jù)。緩存命中 可以提高數(shù)據(jù)存儲(chǔ)系統(tǒng)的響應(yīng)速度,縮短IO路徑距離。Cache由多個(gè)緩存時(shí)隙(Cache slot)組成,每個(gè)Cache slot都是一段連 續(xù)的內(nèi)存,其大小一般為2K、 4K、 8K、 16K、 32K、 64K或128K等。Cache slot是Cache操作的基本單位,在實(shí)際操作過程中,不僅一個(gè)IO請(qǐng)求可能 涉及多個(gè)Cache slot, —個(gè)Cache slot上也可能發(fā)生多個(gè)IO請(qǐng)求。在現(xiàn)有的 緩存技術(shù)中,當(dāng)一個(gè)IO請(qǐng)求涉及到某一個(gè)Cache slot時(shí),就會(huì)將該Cache slot 鎖住,用以表示該Cache slot上當(dāng)前存在IO請(qǐng)求,后續(xù)發(fā)生在該Cache slot 上的其它IO請(qǐng)求必須等待,直到當(dāng)前IO請(qǐng)求處理完畢才能處理后續(xù)10請(qǐng) 求。也就是說, 一個(gè)Cache slot上一次只能處理一個(gè)IO請(qǐng)求,而不能同時(shí) 處理多個(gè)IO請(qǐng)求,這樣會(huì)延長(zhǎng)IO請(qǐng)求的響應(yīng)時(shí)間,減緩響應(yīng)速度,并最終 導(dǎo)致緩存性能的下降。發(fā)明內(nèi)容有鑒于此,本發(fā)明的目的在于提供一種提高緩存性能的方法及緩存系 統(tǒng),以減少IO請(qǐng)求響應(yīng)時(shí)間,加快響應(yīng)速度,提高緩存性能。 為達(dá)到上述目的,本發(fā)明提供的技術(shù)方案如下一種提高緩存性能的方法,該方法包括以扇區(qū)為基本單位處理訪問緩 存Cache的輸入輸出IO請(qǐng)求,其中,所述扇區(qū)大小要小于緩存時(shí)隙Cache slot 大小。所述處理過程包括接收到訪問Cache的10請(qǐng)求后,判斷該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是 否都處于空閑狀態(tài),如果是,則處理該IO請(qǐng)求;否則,先將該IO請(qǐng)求掛起, 等到該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)都處于空閑狀態(tài)時(shí)再處理該IO請(qǐng)求。該方法還包括為Cache的各個(gè)扇區(qū)分別設(shè)置請(qǐng)求標(biāo)志位,用以表示各 個(gè)扇區(qū)當(dāng)前是否處于空閑狀態(tài);所述判斷該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是否都處于空閑狀態(tài)包括根 據(jù)該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)的請(qǐng)求標(biāo)志位判斷該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng) 前是否都處于空閑狀態(tài)。所述判斷該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是否都處于空閑狀態(tài)的過程具 體包括針對(duì)所述IO請(qǐng)求對(duì)應(yīng)的各個(gè)扇區(qū),分別判斷該扇區(qū)的請(qǐng)求標(biāo)志位當(dāng)前 是否處于空閑狀態(tài),如果是,則將該扇區(qū)的請(qǐng)求標(biāo)志位置為非空閑狀態(tài);否 則,標(biāo)記該扇區(qū)發(fā)生了沖突;當(dāng)所述IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)都執(zhí)行完畢上述判斷操作之后,判斷是 否存在發(fā)生了沖突的扇區(qū),如果不存在,則確定該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū) 當(dāng)前都處于空閑狀態(tài)。發(fā)生了沖突的扇區(qū)恢復(fù)為空閑狀態(tài)之后進(jìn)一步包括將發(fā)生了沖突的扇 區(qū)的請(qǐng)求標(biāo)志位置為非空閑狀態(tài);所述IO請(qǐng)求處理完畢之后進(jìn)一步包括將該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)的 請(qǐng)求標(biāo)志位都置為空閑狀態(tài)。所述Cache slot大小為扇區(qū)大小的整^t倍。一種緩存系統(tǒng),該系統(tǒng)包括用于緩存數(shù)據(jù)的緩存模塊以及對(duì)緩存模塊 進(jìn)行控制的緩存控制模塊,其中,所迷緩存控制模塊,用于接收訪問緩存模塊的IO請(qǐng)求,并以扇區(qū)為基本單位處理訪問緩存模塊的IO請(qǐng)求,其中,所述扇區(qū)大小要小于Cache slot大小。所述緩存控制模塊接收到訪問緩存模塊的IO請(qǐng)求后,判斷該IO請(qǐng)求對(duì) 應(yīng)的所有扇區(qū)當(dāng)前是否都處于空閑狀態(tài),如果是,則處理該IO請(qǐng)求;否則, 先將該IO請(qǐng)求掛起,等到該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)都處于空閑狀態(tài)時(shí)再處 理該IO請(qǐng)求。所述緩存控制模塊進(jìn)一步為緩存模塊的各個(gè)扇區(qū)分別設(shè)置請(qǐng)求標(biāo)志位, 用以表示各個(gè)扇區(qū)當(dāng)前是否處于空閑狀態(tài),緩存控制模塊根據(jù)所述10請(qǐng)求 對(duì)應(yīng)的所有扇區(qū)的請(qǐng)求標(biāo)志位判斷所述10請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是否都處于空閑狀態(tài)。所述緩存控制模塊針對(duì)所述10請(qǐng)求對(duì)應(yīng)的各個(gè)扇區(qū),分別判斷該扇區(qū) 的請(qǐng)求標(biāo)志位當(dāng)前是否處于空閑狀態(tài),如果是,則將該扇區(qū)的請(qǐng)求標(biāo)志位置 為非空閑狀態(tài);否則,標(biāo)記該扇區(qū)發(fā)生了沖突;當(dāng)所述IO請(qǐng)求對(duì)應(yīng)的所有 扇區(qū)都執(zhí)行完畢上述判斷操作之后,判斷是否存在發(fā)生了沖突的扇區(qū),如果 不存在,則確定該10請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前都處于空閑狀態(tài)。所述緩存控制模塊進(jìn)一步在發(fā)生了沖突的扇區(qū)恢復(fù)為空閑狀態(tài)之后,將 發(fā)生了沖突的扇區(qū)的請(qǐng)求標(biāo)志位置為非空閑狀態(tài);并在所述10請(qǐng)求處理完 畢之后,將該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)的請(qǐng)求標(biāo)志位都置為空閑狀態(tài)。所述Cache slot大小為扇區(qū)大小的整數(shù)倍。由此可見,釆用以扇區(qū)為Cache操作的基本單位的方案后,對(duì)于發(fā)生在 同一個(gè)Cache slot上的多個(gè)10請(qǐng)求,只要它們所涉及到的扇區(qū)不一樣,那 么就可以同時(shí)得到處理,而無需進(jìn)行等待,從而避免了現(xiàn)有技術(shù)中 一 個(gè)C ac he slot上一次只能處理一個(gè)IO請(qǐng)求而不能同時(shí)處理多個(gè)IO請(qǐng)求的情況,有效 減少了 IO請(qǐng)求的響應(yīng)時(shí)間,加快了響應(yīng)速度,提高了緩存性能。
圖1為本發(fā)明實(shí)施例中提高緩存性能的方法流程圖;圖2為本發(fā)明實(shí)施例中的IO請(qǐng)求處理過程示意圖; 圖3為本發(fā)明實(shí)施例中的緩存系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了克服現(xiàn)有技術(shù)中的問題,本發(fā)明提供一種解決方案,其基本思想是 以扇區(qū)(sector)為基本單位處理訪問Cache的10請(qǐng)求。其中,扇區(qū)是Cache slot的進(jìn)一步劃分,每個(gè)扇區(qū)的大小一般為512字節(jié)或1 K,要小于一個(gè)Cache slot的大小, 一個(gè)Cache slot可以分為多個(gè)扇區(qū),Cache slot大小是扇區(qū)大小的整數(shù)倍。為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面參照附圖并舉實(shí)施例,對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。圖1示出了本發(fā)明提供的提高緩存性能方法的流程圖,包括如下步驟 步驟101:接收到訪問Cache的IO請(qǐng)求后,判斷該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是否都處于空閑狀態(tài),如果是,則執(zhí)行步驟102;否則,執(zhí)行步驟103。步驟102:處理該IO請(qǐng)求,并結(jié)束本流程的處理。步驟103:先將該IO請(qǐng)求桂起,等到該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)都處于 空閑狀態(tài)時(shí),再處理該IO請(qǐng)求。由于發(fā)生在同一個(gè)Cache slot上的多個(gè)IO請(qǐng)求所涉及的扇區(qū)可能是不 同的,因此,以扇區(qū)為Cache操作的基本單位,而不以Cache slot為Cache 操作的基本單位,能夠縮小IO請(qǐng)求的沖突范圍。為了實(shí)現(xiàn)本發(fā)明,可以對(duì)現(xiàn)有的Cache slot數(shù)據(jù)結(jié)構(gòu)進(jìn)行修改。比如, 參見表1所示的示例性Cache slot數(shù)據(jù)結(jié)構(gòu),地址(Address )、時(shí)隙指針(Cache slot pointer)和狀態(tài)(Status)是現(xiàn)有的數(shù)據(jù)位,而sectors cmd是新增的扇 區(qū)請(qǐng)求標(biāo)志位。其中,Address表示Cache slot所在的邏輯單元號(hào)(LUN ) 和起始邏輯塊地址(LBA )信息;Cache slot pointer指向數(shù)據(jù)緩存區(qū)域;Status 表示Cache slot的數(shù)據(jù)狀態(tài);sectors cmd為新增的扇區(qū)請(qǐng)求標(biāo)志位,用于指示Cacheslot中的各個(gè)扇區(qū)當(dāng)前是否處于空閑狀態(tài)。其中,扇區(qū)處于空閑狀 態(tài)是指該扇區(qū)上當(dāng)前不存在正在處理的IO請(qǐng)求;扇區(qū)處于非空閑狀態(tài)是指 該扇區(qū)上當(dāng)前存在正在處理的IO請(qǐng)求。也就是說,當(dāng)Cache slot中的某個(gè) 扇區(qū)上當(dāng)前存在正在處理的IO請(qǐng)求時(shí),需要將該扇區(qū)的請(qǐng)求標(biāo)志位置為非 空閑狀態(tài),如置為1;當(dāng)該IO請(qǐng)求處理完畢后,需要將該扇區(qū)的請(qǐng)求標(biāo)志 位恢復(fù)成空閑狀態(tài),如置為0。AddressCache slot pointerStatussectors cmd表 1圖2示出了本發(fā)明實(shí)施例中的IO請(qǐng)求處理過程示意圖,該過程包括以 下步驟步驟201:接收到訪問Cache的IO請(qǐng)求后,確定該IOi斧求對(duì)應(yīng)的各個(gè) Cache slot,并將該IO請(qǐng)求涉及到的Cache slot個(gè)數(shù)記為N。步驟202:從N個(gè)Cache slot中選取一個(gè)Cache slot,確定所述I()請(qǐng)求 在該Cache slot上對(duì)應(yīng)的所有sector,并將所述IO請(qǐng)求在該Cache slot上涉 及到的sector個(gè)lti己為M。由于IO請(qǐng)求中一般都會(huì)攜帶LBA信息,故根據(jù)LBA信息便可確定IO 請(qǐng)求所對(duì)應(yīng)的sector。步驟203:從M個(gè)sector中選取一個(gè)sector,并查看該sector的請(qǐng)求標(biāo) 志位,如果該sector的請(qǐng)求標(biāo)志位為0,則說明該sector當(dāng)前處于空閑狀態(tài), 沒有正在處理的IO請(qǐng)求,執(zhí)行步驟204;如果該sector的請(qǐng)求標(biāo)志位為1 , 則說明該sector當(dāng)前處于非空閑狀態(tài),存在正在處理的IO請(qǐng)求,執(zhí)行步驟 205。步驟204:將該sector的請(qǐng)求標(biāo)志位置為非空閑狀態(tài)即置為1,然后執(zhí) 行步驟206。步驟205:標(biāo)記該sector發(fā)生了沖突,然后執(zhí)行步驟206。步驟206:令M = M- 1,并判斷更新后的M值是否大于0,如果大于0,則返回執(zhí)行步驟203;如果小于等于O,則執(zhí)行步驟207。也就是說,重復(fù)執(zhí)行步驟203,直到M個(gè)sector都被處理完畢為止。 步驟207:令N-N-l,并判斷更新后的N值是否大于0,如果大于0,則返回執(zhí)行步驟202;如果小于等于O,則執(zhí)行步驟208。也就是說,重復(fù)執(zhí)行步驟202,直到N個(gè)Cache slot都被處理完畢為止。 步驟208:判斷接收到的10請(qǐng)求對(duì)應(yīng)的所有sector中是否存在發(fā)生了沖突的sector,如果存在,則說明該IO請(qǐng)求對(duì)應(yīng)的所有sector并非當(dāng)前都處于空閑狀態(tài),執(zhí)行步驟209;如果不存在,則說明該IO請(qǐng)求對(duì)應(yīng)的所有sector當(dāng)前都處于空閑狀態(tài),執(zhí)行步驟210。步驟209:將該IO請(qǐng)求掛起,等到發(fā)生沖突的sector上的其它K)請(qǐng)求處理完畢,發(fā)生沖突的sector恢復(fù)成空閑狀態(tài)時(shí),再處理該IO請(qǐng)求,并將所述發(fā)生沖突的sector的請(qǐng)求標(biāo)志位置為非空閑狀態(tài)即置為1,然后執(zhí)行步驟211。步驟210:處理該IO請(qǐng)求,如向發(fā)起該IO請(qǐng)求的主才幾返回相關(guān)I丈據(jù)。 步驟211:該IO請(qǐng)求處理完畢后,將該IO請(qǐng)求對(duì)應(yīng)的所有sector的請(qǐng) 求標(biāo)志位都恢復(fù)成空閑狀態(tài),即置為0??梢姡瑘D1所示流程是以sector為Cache操作的基本單位,而不是以 Cache sot為基本單位。對(duì)于一個(gè) sector, 無論其所在的Cache slot上當(dāng)前是 否存在正在處理的IO請(qǐng)求,只要該sector上當(dāng)前不存在正在處理的IO請(qǐng)求, 那么后續(xù)發(fā)生在該sector上的IO請(qǐng)求就可以及時(shí)得到處理,而無需被桂起 等待。也就是說,采用以sector為Cache操作的基本單位的方案后,對(duì)于發(fā)生 在同 一個(gè)Cache slot上的多個(gè)IO請(qǐng)求,只要它們所涉及到的sector不 一樣, 那么就可以同時(shí)得到處理,而無需進(jìn)行等待,從而避免了現(xiàn)有技術(shù)中一個(gè) Cache slot上 一 次只能處理一 個(gè)IO請(qǐng)求而不能同時(shí)處理多個(gè)IO請(qǐng)求的情況, 有效減少了 IO請(qǐng)求的響應(yīng)時(shí)間,加快了響應(yīng)速度,提高了緩存性能。相應(yīng)地,本發(fā)明還提供了一種緩存系統(tǒng),其結(jié)構(gòu)如圖3所示,主要包括用于緩存數(shù)據(jù)的緩存模塊以及對(duì)緩存模塊進(jìn)行控制的緩存控制模塊,其中, 所述緩存控制模塊,用于接收訪問緩存模塊的IO請(qǐng)求,并以扇區(qū)為基本單位處理訪問緩存模塊的IO請(qǐng)求。其中,所述扇區(qū)大小要小于Cache slot大 小,且Cache slot大小一般為扇區(qū)大小的整數(shù)倍。其中,緩存控制模塊處理IO請(qǐng)求的具體過程如下緩存控制模塊接收 到訪問緩存模塊的10請(qǐng)求后,判斷該10請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是否都處 于空閑狀態(tài),如果是,則處理該IO請(qǐng)求;否則,先將該IO請(qǐng)求掛起,等到 該10請(qǐng)求對(duì)應(yīng)的所有扇區(qū)都處于空閑狀態(tài)時(shí)再處理該10請(qǐng)求。緩存控制模塊可進(jìn)一步為緩存模塊的各個(gè)扇區(qū)分別設(shè)置請(qǐng)求標(biāo)志位,用 以表示各個(gè)扇區(qū)當(dāng)前是否處于空閑狀態(tài),然后根據(jù)所述IO請(qǐng)求對(duì)應(yīng)的所有 扇區(qū)的請(qǐng)求標(biāo)志位判斷所述10請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前是否都處于空閑狀 態(tài)。具體操作過程如下緩存控制模塊針對(duì)所述IO請(qǐng)求對(duì)應(yīng)的各個(gè)扇區(qū), 分別判斷該扇區(qū)的請(qǐng)求標(biāo)志位當(dāng)前是否處于空閑狀態(tài),如果是,則將該扇區(qū) 的請(qǐng)求標(biāo)志位置為非空閑狀態(tài);否則,標(biāo)記該扇區(qū)發(fā)生了沖突;當(dāng)所述IO 請(qǐng)求對(duì)應(yīng)的所有扇區(qū)都執(zhí)行完畢上述判斷操作之后,判斷是否存在發(fā)生了沖 突的扇區(qū),如果不存在,則確定該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)當(dāng)前都處于空閑 狀態(tài)。緩存控制模塊進(jìn)一步在發(fā)生了沖突的扇區(qū)恢復(fù)為空閑狀態(tài)之后,將發(fā)生 了沖突的扇區(qū)的請(qǐng)求標(biāo)志位置為非空閑狀態(tài);并在所述IO請(qǐng)求處理完畢之 后,將該IO請(qǐng)求對(duì)應(yīng)的所有扇區(qū)的請(qǐng)求標(biāo)志位都置為空閑狀態(tài)。以上所述對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步的詳細(xì)說 明,所應(yīng)理解的是,以上所述并不用以限制本發(fā)明,凡在本發(fā)明的精神和原 則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范 圍之內(nèi)。
權(quán)利要求
1、一種提高緩存性能的方法,其特征在于,該方法包括以扇區(qū)為基本單位處理訪問緩存Cache的輸入輸出IO請(qǐng)求,其中,所述扇區(qū)大小要小于緩存時(shí)隙Cache slot大小。
全文摘要
本發(fā)明提供了一種提高緩存性能的方法,該方法包括以扇區(qū)為基本單位處理訪問緩存Cache的輸入輸出IO請(qǐng)求,其中,所述扇區(qū)大小要小于緩存時(shí)隙Cache slot大小。相應(yīng)地,本發(fā)明還提供了一種緩存系統(tǒng)。利用本發(fā)明提供的技術(shù)方案,能夠減少IO請(qǐng)求響應(yīng)時(shí)間,加快響應(yīng)速度,提高緩存性能。
文檔編號(hào)G06F12/08GK101221539SQ200810056990
公開日2008年7月16日 申請(qǐng)日期2008年1月28日 優(yōu)先權(quán)日2008年1月28日
發(fā)明者李至哲 申請(qǐng)人:杭州華三通信技術(shù)有限公司