本發(fā)明屬于計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,具體地涉及存儲(chǔ)設(shè)備的輸入輸出(io)能力進(jìn)行合理分配的方法、裝置及采用該存儲(chǔ)設(shè)備io分配方法、存儲(chǔ)設(shè)備io分配裝置的服務(wù)器系統(tǒng)。
背景技術(shù):
隨著數(shù)據(jù)公司的涌現(xiàn)和業(yè)務(wù)發(fā)展,全球優(yōu)秀的云計(jì)算供應(yīng)商都推出了云存儲(chǔ)服務(wù)。目前云存儲(chǔ)可分為冷存儲(chǔ)和熱存儲(chǔ),其中熱存儲(chǔ)既是對(duì)處于活躍使用狀態(tài)或預(yù)期會(huì)頻繁訪問(讀取和寫入)的數(shù)據(jù)進(jìn)行存儲(chǔ),例如在來自遠(yuǎn)程的終端頻繁訪問存儲(chǔ)服務(wù)器上的數(shù)據(jù)的場(chǎng)景中,需要頻繁對(duì)存儲(chǔ)設(shè)備進(jìn)行讀寫操作。冷數(shù)據(jù)存儲(chǔ)是指很少使用或訪問的非活躍數(shù)據(jù)的存儲(chǔ),需要長時(shí)間存儲(chǔ)并且?guī)缀醪辉L問的合規(guī)性和存檔數(shù)據(jù)即為冷存儲(chǔ),其示例包括:備份、存檔和災(zāi)難恢復(fù)數(shù)據(jù)集,不再經(jīng)常查看、但訪問時(shí)應(yīng)立即可用的較舊的媒體內(nèi)容,諸如長期存儲(chǔ)的科學(xué)數(shù)據(jù)、面向醫(yī)療保健機(jī)構(gòu)、轉(zhuǎn)碼為其他格式后的原始媒體文件等。
當(dāng)存儲(chǔ)服務(wù)器同時(shí)保存有冷存儲(chǔ)數(shù)據(jù)以及熱存儲(chǔ)數(shù)據(jù)時(shí),對(duì)這兩種數(shù)據(jù)進(jìn)行讀寫的優(yōu)先級(jí)是不同的。換言之,應(yīng)當(dāng)根據(jù)不同的存儲(chǔ)數(shù)據(jù)類型,對(duì)他們所需占用的io資源加以限制,例如將對(duì)存儲(chǔ)設(shè)備進(jìn)行讀寫的進(jìn)程進(jìn)行分組,并對(duì)每組設(shè)定權(quán)重以標(biāo)志該組進(jìn)程讀寫訪問的優(yōu)先級(jí)別,以節(jié)省io資源,優(yōu)化讀寫速度。
目前l(fā)inux內(nèi)核中存在的幾種存儲(chǔ)設(shè)備io分配方法,普遍采用noop、deadline與cfq等磁盤調(diào)度器,然而noop磁盤調(diào)度器與deadline磁盤調(diào)度器不支持按照進(jìn)程組的權(quán)重來限制該組可用的io資源,即權(quán)重限流。而cfq磁盤調(diào)度器雖然能夠?qū)崿F(xiàn)權(quán)重限流,但其僅適用于傳統(tǒng)的機(jī)械式磁盤,在高速塊設(shè)備,例如固態(tài)硬盤上性能較差,不能充分發(fā)揮固態(tài)硬盤的性能。
技術(shù)實(shí)現(xiàn)要素:
為克服上述缺陷,本發(fā)明提供了能夠適用于固態(tài)硬盤、采用權(quán)重限制分配給各進(jìn)程的可用io資源、并且能夠根據(jù)實(shí)際運(yùn)行狀態(tài)實(shí)時(shí)調(diào)整上述分配的存儲(chǔ)設(shè)備io分配方法、存儲(chǔ)設(shè)備io分配裝置及服務(wù)器系統(tǒng)。
根據(jù)本發(fā)明的第一方面,提供一種存儲(chǔ)設(shè)備io分配方法,用于分配存儲(chǔ)設(shè)備io至根據(jù)對(duì)該存儲(chǔ)設(shè)備的訪問頻率劃分的多個(gè)進(jìn)程組,包括下述步驟:io總數(shù)確定步驟:以存儲(chǔ)設(shè)備的io容量減去已占用的io數(shù),確定當(dāng)前可用的存儲(chǔ)設(shè)備io總數(shù);額定io數(shù)計(jì)算步驟:根據(jù)每個(gè)進(jìn)程組的權(quán)重值計(jì)算每個(gè)進(jìn)程組的額定io數(shù),其中一個(gè)進(jìn)程組的額定io數(shù)在存儲(chǔ)設(shè)備io總數(shù)中的占比等于一個(gè)進(jìn)程組的權(quán)重值在多個(gè)進(jìn)程組的總權(quán)重值中的占比;比較確定步驟:比較每個(gè)進(jìn)程組的額定io數(shù)和io需求數(shù),以將額定io數(shù)大于io需求數(shù)的進(jìn)程組確定為富余組,并且將額定io數(shù)小于io需求數(shù)的進(jìn)程組確定為饑餓組;和調(diào)整步驟:將所有的富余組的富余io數(shù)的總和分配給所有饑餓組,其中富余組的富余io數(shù)為富余組的額定io數(shù)與io需求數(shù)的差值。
根據(jù)本發(fā)明第一方面的存儲(chǔ)設(shè)備io分配方法,根據(jù)各進(jìn)程組的設(shè)定權(quán)重進(jìn)行存儲(chǔ)設(shè)備io資源初步分配。因此可以考慮到各進(jìn)程組進(jìn)程特點(diǎn),例如對(duì)存儲(chǔ)設(shè)備的讀寫速度、響應(yīng)情況等,優(yōu)先保證特定進(jìn)程組能夠分配到充足的io資源。與此同時(shí),可以考慮到各進(jìn)程組實(shí)際io資源的利用情況,對(duì)閑置io資源進(jìn)行再分配,最大化地發(fā)揮了單個(gè)存儲(chǔ)設(shè)備的io能力,提高存儲(chǔ)設(shè)備利用率,降低對(duì)額外存儲(chǔ)設(shè)備的需求,降低成本。
在本發(fā)明第一方面的存儲(chǔ)設(shè)備io分配方法中,優(yōu)選地,在調(diào)整步驟中,根據(jù)富余io數(shù)的總和以及每個(gè)饑餓組的權(quán)重值,確定將要分配給每個(gè)饑餓組的調(diào)整io數(shù);其中一個(gè)饑餓組的調(diào)整io數(shù)在富余io數(shù)的總和中的占比等于一個(gè)饑餓組的權(quán)重值在所有的饑餓組的總權(quán)重值中的占比。
在本發(fā)明第一方面的上述優(yōu)選方案中,當(dāng)對(duì)閑置io資源進(jìn)行再分配以滿足當(dāng)前欠缺io資源的進(jìn)程組需求時(shí),仍然采用按照各進(jìn)程組的權(quán)重進(jìn)行上述再分配。因此,即使當(dāng)具有多個(gè)饑餓組時(shí),還可盡量為優(yōu)先級(jí)較高的饑餓組分配較多的io資源。
在本發(fā)明第一方面的存儲(chǔ)設(shè)備io分配方法中,優(yōu)選地,存儲(chǔ)設(shè)備是固態(tài)硬盤。
根據(jù)本發(fā)明第一方面的存儲(chǔ)設(shè)備io分配方法,不但能根據(jù)各組的權(quán)重進(jìn)行io限流限流,而且特別適用于固態(tài)硬盤,解決了現(xiàn)有技術(shù)中cfq調(diào)度算法在固態(tài)硬盤高速塊設(shè)備上性能較差的缺陷,能夠充分發(fā)揮固態(tài)硬盤的性能優(yōu)勢(shì)。而相較于采用noop和deadline算法的調(diào)度算法,還能夠?qū)崿F(xiàn)各組的權(quán)重進(jìn)行io限流。
在本發(fā)明第一方面的存儲(chǔ)設(shè)備io分配方法中,優(yōu)選地,實(shí)時(shí)循環(huán)執(zhí)行比較確定步驟和調(diào)整步驟,因此,能夠根據(jù)各進(jìn)程組實(shí)際的io請(qǐng)求數(shù)量及時(shí)、主動(dòng)地調(diào)整分配給各進(jìn)程組的可用io資源。
根據(jù)本發(fā)明的第二方面,提供一種存儲(chǔ)設(shè)備io分配裝置,用于分配存儲(chǔ)設(shè)備io至根據(jù)對(duì)該存儲(chǔ)設(shè)備的訪問頻率劃分的多個(gè)進(jìn)程組,存儲(chǔ)設(shè)備io分配裝置包括下述模塊:io總數(shù)確定模塊,io總數(shù)確定模塊用于以存儲(chǔ)設(shè)備的io容量減去已占用的io數(shù)確定當(dāng)前可用的存儲(chǔ)設(shè)備io總數(shù);額定io數(shù)計(jì)算模塊,額定io數(shù)計(jì)算模塊根據(jù)每個(gè)進(jìn)程組的權(quán)重值計(jì)算每個(gè)進(jìn)程組的額定io數(shù),其中一個(gè)進(jìn)程組的額定io數(shù)在存儲(chǔ)設(shè)備io總數(shù)中的占比等于一個(gè)進(jìn)程組的權(quán)重值在多個(gè)進(jìn)程組的總權(quán)重值中的占比;比較確定模塊,比較確定模塊比較每個(gè)進(jìn)程組的額定io數(shù)和io需求數(shù),以將額定io數(shù)大于io需求數(shù)的進(jìn)程組確定為富余組,并且將額定io數(shù)小于io需求數(shù)的進(jìn)程組確定為饑餓組;以及調(diào)整模塊:調(diào)整模塊將所有的富余組的富余io數(shù)的總和分配給所有饑餓組,其中富余組的富余io數(shù)為富余組的額定io數(shù)與io需求數(shù)的差值。
在本發(fā)明第二方面的存儲(chǔ)設(shè)備io分配裝置中,優(yōu)選地,在調(diào)整模塊中,根據(jù)富余io數(shù)的總和以及每個(gè)饑餓組的權(quán)重值,確定將要分配給每個(gè)饑餓組的調(diào)整io數(shù);其中一個(gè)饑餓組的調(diào)整io數(shù)在富余io數(shù)的總和中的占比等于一個(gè)饑餓組的權(quán)重值在所有的饑餓組的總權(quán)重值中的占比。
在本發(fā)明第二方面的存儲(chǔ)設(shè)備io分配裝置中,優(yōu)選地,存儲(chǔ)設(shè)備是固態(tài)硬盤。
在本發(fā)明第二方面的存儲(chǔ)設(shè)備io分配裝置中,優(yōu)選地,實(shí)時(shí)循環(huán)執(zhí)行比較確定步驟和調(diào)整步驟。
一種服務(wù)器系統(tǒng),包括存儲(chǔ)設(shè)備,以及根據(jù)本發(fā)明第二方面的存儲(chǔ)設(shè)備io分配裝置。
附圖說明
圖1是本發(fā)明的服務(wù)器系統(tǒng)示意圖。
圖2示出本發(fā)明的存儲(chǔ)設(shè)備io分配方法流程圖。
圖3示出本發(fā)明的存儲(chǔ)設(shè)備io分配裝置模塊化視圖。
具體實(shí)施方式
將參照附圖進(jìn)行說明關(guān)于根據(jù)本發(fā)明的存儲(chǔ)設(shè)備io分配方法、存儲(chǔ)設(shè)備io分配系統(tǒng)以及服務(wù)器系統(tǒng)的優(yōu)選實(shí)施例。
為使得本發(fā)明的技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面用本發(fā)明的一個(gè)應(yīng)用示例進(jìn)一步加以說明。
如圖1所示,在本發(fā)明的服務(wù)器系統(tǒng)中,利用linux內(nèi)核提供的cgroup控制組機(jī)制將訪問該存儲(chǔ)服務(wù)器上運(yùn)行的進(jìn)程分為3個(gè)進(jìn)程組g1~g3,以限制、記錄、隔離每個(gè)進(jìn)程組所使用的物理資源,諸如cpu、內(nèi)存儲(chǔ)器以及可使用本發(fā)明的方法和裝置分配的著重的io資源。具體地,在本發(fā)明中,存儲(chǔ)設(shè)備io分配裝置1為cgroup控制組機(jī)制下的子系統(tǒng),用于限制每個(gè)進(jìn)程組連接至存儲(chǔ)設(shè)備時(shí)可用的io數(shù)。
在本發(fā)明的實(shí)施例中,存儲(chǔ)設(shè)備例如為固態(tài)硬盤ssd,該固態(tài)硬盤ssd一次能處理的最大io請(qǐng)求數(shù)(容量)例如為1610。多個(gè)進(jìn)程利用cgroup控制組機(jī)制被分為3個(gè)進(jìn)程組,分別為熱存儲(chǔ)讀寫進(jìn)程組g1、普通進(jìn)程組g2及冷存儲(chǔ)讀寫進(jìn)程組g3。其中g(shù)1假設(shè)為上述例舉的頻繁訪問存儲(chǔ)設(shè)備的進(jìn)程的集合,該進(jìn)程組需要有較高的優(yōu)先級(jí)以保證快速讀寫性能,減小延遲,因此將其權(quán)重w1設(shè)定為1000。冷存儲(chǔ)讀寫進(jìn)程組g3例如時(shí)用于訪問歸檔存儲(chǔ)數(shù)據(jù)的進(jìn)程組g3,通常無需為其預(yù)留較多的io資源,因此將其權(quán)重設(shè)定為一較小的權(quán)重值w3=100。而其余進(jìn)程劃分為普通進(jìn)程組g2,其具有介于熱存儲(chǔ)讀寫進(jìn)程組g1及冷存儲(chǔ)讀寫進(jìn)程組g3之間的存儲(chǔ)設(shè)備讀寫優(yōu)先級(jí),將其權(quán)重w2設(shè)定為500。上述權(quán)重值能夠任意設(shè)置,只要能夠以其比例關(guān)系體現(xiàn)進(jìn)程組間對(duì)存儲(chǔ)資源占用的優(yōu)先性即可。
下面將實(shí)施如圖2所示的本發(fā)明的存儲(chǔ)設(shè)備io分配方法,以將該固態(tài)硬盤ssd的例如1610個(gè)可用io資源分配至3個(gè)進(jìn)程組g1,g2及g3,該可用io資源取決于存儲(chǔ)設(shè)備即固態(tài)硬盤ssd自身的性能參數(shù)。
首先,執(zhí)行io總數(shù)確定步驟st1。假設(shè)當(dāng)前三個(gè)進(jìn)程組g1,g2及g3中正在由固態(tài)硬盤驅(qū)動(dòng)處理的io請(qǐng)求數(shù)為10,則在該步驟中以存儲(chǔ)設(shè)備的io容量,即1610,減去已占用的io數(shù),確定當(dāng)前可用的io總數(shù)t’,即為1600。
然后,執(zhí)行額定io數(shù)計(jì)算步驟st2,在該步驟中,根據(jù)三個(gè)進(jìn)程組g1,g2及g3的權(quán)重值w1=1000,w2=500,w3=100,計(jì)算三個(gè)進(jìn)程組g1,g2及g3的額定io數(shù)r1,r2,r3。其中r1,r2,r3在可用的io總數(shù)t’中的占比等于進(jìn)程組g1,g2及g3的權(quán)重值w1,w2,w3在進(jìn)程組g1,g2及g3的總權(quán)重值中的占比,因此熱存儲(chǔ)讀寫進(jìn)程組g1的額定io數(shù)r1=t’*w1/(w1+w2+w3)=1000。類似地,可得出r2=500,r3=100。在此,為了清楚起見,每個(gè)進(jìn)程組的額定io數(shù)經(jīng)計(jì)算得出恰好等于其權(quán)重值,然而本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明白,每個(gè)組的權(quán)重值可以任意設(shè)定,只要能夠以其比例關(guān)系體現(xiàn)每個(gè)組占用io資源的優(yōu)先級(jí)別即可。
然后,在比較確定步驟st3中,比較三個(gè)進(jìn)程組g1,g2及g3各自的額定io數(shù)和io需求數(shù)。例如某一時(shí)刻,熱存儲(chǔ)讀寫進(jìn)程組g1需要的io數(shù)q1為820,則進(jìn)程組g1的額定io數(shù)r1大于其io需求數(shù)q1,將進(jìn)程組g1確定為富余組,表示按照權(quán)重分配給進(jìn)程組g1的io配額足夠滿足其需求,而冷存儲(chǔ)讀寫進(jìn)程組g3突然有大量的io請(qǐng)求待處理,假設(shè)此時(shí)進(jìn)程組g2及g3所需的io數(shù)分別為q2=600,q3=200。從而進(jìn)程組g2及g3的額定io數(shù)r2,r3小于他們各自的io需求數(shù)q2,q3,因此進(jìn)程組g2及g3被確定為饑餓組,表示按照權(quán)重分配給進(jìn)程組g2及g3的io配額不足夠滿足其需求。此處,“富余組”是為表述本發(fā)明中額定io數(shù)大于等于io需求數(shù)q1的進(jìn)程組的自定義名詞,類似地,下述“饑餓組”是為表述本發(fā)明中額定io數(shù)小于io需求數(shù)q1的進(jìn)程組的自定義名詞。
此時(shí),需要執(zhí)行調(diào)整調(diào)整步驟st4,以將成為富余組的熱存儲(chǔ)讀寫進(jìn)程組g1的富余io數(shù)s分配給饑餓組g2及g3,富余io數(shù)s為即進(jìn)程組g1的額定io數(shù)r1與其io需求數(shù)q1的差值,在本實(shí)施例中,富余io數(shù)s為180。然后,根據(jù)富余io數(shù)s以及作為饑餓組的進(jìn)程組g2及g3的權(quán)重值w2,w3,確定將要分配給兩個(gè)饑餓組的調(diào)整io數(shù)ad2,ad3。其中,在本發(fā)明的技術(shù)方案中,每個(gè)饑餓組的調(diào)整io數(shù)在富余io數(shù)的總和中的占比等于該饑餓組的權(quán)重值在所有的饑餓組的總權(quán)重值中的占比。因此作為饑餓組的進(jìn)程組g2的調(diào)整io數(shù)ad2=w2*s/(w2+w3)=150。類似地,計(jì)算進(jìn)程組g3的調(diào)整io數(shù)ad3為30,則能夠?qū)⒃确峙渲翢岽鎯?chǔ)讀寫進(jìn)程組g1的閑置io分配給冷存儲(chǔ)讀寫進(jìn)程組g3,以使得可以及時(shí)處理冷存儲(chǔ)讀寫進(jìn)程組g3突然增大的io請(qǐng)求。
在本實(shí)施例中,示出僅有一個(gè)富余組的情況。在實(shí)際應(yīng)用中,可能出現(xiàn)有多個(gè)富余組,則將各個(gè)富余組的富余io數(shù)總和作為上述富余io數(shù)分配給各個(gè)饑餓組。因此本發(fā)明適用于具有任意數(shù)的富余組、饑餓組的情形。
由上述調(diào)整后,對(duì)于額定io數(shù)大于io需求數(shù)的進(jìn)程組,實(shí)際分配到的io數(shù)為其io需求數(shù)。對(duì)于額定io數(shù)小于需求數(shù)的進(jìn)程組,實(shí)際分配到的io數(shù)為額定io數(shù)與調(diào)整io數(shù)的總和。
由上述可知,本發(fā)明第一方面提供的io分配存儲(chǔ)設(shè)備io分配方法,使得對(duì)于多個(gè)進(jìn)程組的第j個(gè)進(jìn)程組gj,符合:
rj=(t-d)*wj/x
其中:
t:該存儲(chǔ)設(shè)備一次能處理的io容量;
d:該存儲(chǔ)設(shè)備驅(qū)動(dòng)當(dāng)前已被占用的io數(shù);
d:該進(jìn)程組在該存儲(chǔ)設(shè)備驅(qū)動(dòng)里占用的io數(shù);
qj:進(jìn)程組gj的io需求數(shù);
wj:進(jìn)程組gj的權(quán)重值;
rj:進(jìn)程組gj基于權(quán)重可分配到的額定io數(shù);
aj:進(jìn)程組gj最終分到的io數(shù);
x:所有進(jìn)程組的權(quán)重之和;
y:所有饑餓組的權(quán)重之和;
s:所有富余組的富余io數(shù)總和。
圖3示出本發(fā)明的存儲(chǔ)設(shè)備io分配裝置1模塊化視圖,該存儲(chǔ)設(shè)備io分配裝置1用于分配存儲(chǔ)設(shè)備io至根據(jù)對(duì)該存儲(chǔ)設(shè)備的訪問頻率劃分的多個(gè)進(jìn)程組,存儲(chǔ)設(shè)備io分配裝置1包括下述模塊:io總數(shù)確定模塊10,io總數(shù)確定模塊10用于以存儲(chǔ)設(shè)備的io容量減去已占用的io數(shù)確定當(dāng)前可用的存儲(chǔ)設(shè)備io總數(shù);額定io數(shù)計(jì)算模塊20,額定io數(shù)計(jì)算模塊20根據(jù)每個(gè)進(jìn)程組的權(quán)重值計(jì)算每個(gè)進(jìn)程組的額定io數(shù),其中一個(gè)進(jìn)程組的額定io數(shù)在存儲(chǔ)設(shè)備io總數(shù)中的占比等于一個(gè)進(jìn)程組的權(quán)重值在多個(gè)進(jìn)程組的總權(quán)重值中的占比;比較確定模塊30,比較確定模塊30比較每個(gè)進(jìn)程組的額定io數(shù)和io需求數(shù),以將額定io數(shù)大于io需求數(shù)的進(jìn)程組確定為富余組,并且將額定io數(shù)小于io需求數(shù)的進(jìn)程組確定為饑餓組;以及調(diào)整模塊40:調(diào)整模塊40將所有的富余組的富余io數(shù)的總和分配給所有饑餓組,其中富余組的富余io數(shù)為富余組的額定io數(shù)與io需求數(shù)的差值。
在本發(fā)明第二方面的存儲(chǔ)設(shè)備io分配裝置中,優(yōu)選地,在調(diào)整模塊40中,根據(jù)富余io數(shù)的總和以及每個(gè)饑餓組的權(quán)重值,確定將要分配給每個(gè)饑餓組的調(diào)整io數(shù);其中一個(gè)饑餓組的調(diào)整io數(shù)在富余io數(shù)的總和中的占比等于一個(gè)饑餓組的權(quán)重值在所有的饑餓組的總權(quán)重值中的占比。
盡管在此已經(jīng)詳細(xì)描述了本發(fā)明的各種優(yōu)選實(shí)施例,但是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在不脫離所要求保護(hù)的本發(fā)明的情況下,可以對(duì)其進(jìn)行變化。