本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種輸入/輸出I/O調(diào)度方法及裝置。
背景技術(shù):
由于文件服務(wù)器客戶端的處理輸入/輸出(input/output,I/O)的能力有限,且不同客戶端的服務(wù)質(zhì)量(QoS,Quality of Service)可能不同,因此,文件服務(wù)器需要根據(jù)每個(gè)客戶端的QoS將該客戶端生成的每個(gè)外部I/O合理地調(diào)度至存儲(chǔ)設(shè)備進(jìn)行數(shù)據(jù)訪問,從而既能保證存儲(chǔ)設(shè)備處理每個(gè)客戶端生成的外部I/O的開銷都能達(dá)到該客戶端的QoS,又能保證不同的客戶端生成的外部I/O間不會(huì)爭(zhēng)搶處理I/O的資源,其中,開銷是指每個(gè)外部I/O的處理速率。
目前,文件服務(wù)器在塊(block)層使用開始時(shí)間公平排隊(duì)(Start-time Fair Queuing,SFQ)算法或者加權(quán)公平排隊(duì)(Weighted Fair Queuing,WFQ)算法或者mClock算法,對(duì)接收到的每個(gè)I/O進(jìn)行排序,根據(jù)排序順序?qū)⑺蠭/O調(diào)度至存儲(chǔ)設(shè)備進(jìn)行處理,其中,塊層接收到的每個(gè)I/O至少包括由文件系統(tǒng)對(duì)客戶端發(fā)送的外部I/O進(jìn)行解析生成的I/O,外部I/O即文件訪問請(qǐng)求。
客戶端發(fā)送的每個(gè)外部I/O在到達(dá)塊層之上的文件系統(tǒng)時(shí),該文件系統(tǒng)可能根據(jù)內(nèi)部文件機(jī)制對(duì)該外部I/O進(jìn)行解析生成了組I/O。文件服務(wù)器對(duì)所有組I/O按照上述算法對(duì)接收到的每個(gè)I/O進(jìn)行排序,根據(jù)排序順序?qū)⑺蠭/O調(diào)度至存儲(chǔ)設(shè)備進(jìn)行處理,無法保證客戶端的組I/O在塊層調(diào)度的準(zhǔn)確性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種I/O調(diào)度方法及裝置。
第一方面,提供了一種I/O調(diào)度方法,該方法包括:文件系統(tǒng)接收客戶端發(fā)送的第一I/O;解析第一I/O得到組I/O,為該組I/O中的每個(gè)I/O設(shè)置依賴標(biāo)記,并識(shí)別該組I/O中的第二I/O,為該組I/O中的第二I/O設(shè)置來源標(biāo)記;塊層根據(jù)來源標(biāo)記和依賴標(biāo)記對(duì)組I/O中的每個(gè)I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù)。其中,依賴標(biāo)記用于標(biāo)識(shí)組I/O中每個(gè)I/O之間的依賴關(guān)系,來源標(biāo)記用于標(biāo)識(shí)組I/O中的所有的第二I/O屬于同一個(gè)調(diào)度域,第二I/O是由第一I/O轉(zhuǎn)化得到的。
在第一方面的調(diào)度方法,由文件服務(wù)器實(shí)現(xiàn)。具體地,文件服務(wù)器的中央處理器(Central Processing Unit,CPU)執(zhí)行文件系統(tǒng)指令,接收客戶端發(fā)送的第一I/O;解析第一I/O得到組I/O,為該組I/O中的每個(gè)I/O設(shè)置依賴標(biāo)記,并識(shí)別該組I/O中的第二I/O,為該組I/O中的第二I/O設(shè)置來源標(biāo)記;文件服務(wù)器的CPU執(zhí)行塊層指令,根據(jù)來源標(biāo)記和依賴標(biāo)記對(duì)組I/O中的每個(gè)I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù)。其中,依賴標(biāo)記用于標(biāo)識(shí)組I/O中每個(gè)I/O之間的依賴關(guān)系,來源標(biāo)記用于標(biāo)識(shí)組I/O中的所有的第二I/O屬于同一個(gè)調(diào)度域,第二I/O是由第一I/O轉(zhuǎn)化得到的。
通過文件系統(tǒng)為對(duì)第一I/O進(jìn)行解析得到的組I/O設(shè)置依賴標(biāo)記,將具有該依賴標(biāo)記的組I/O調(diào)度至塊層,使得塊層可以根據(jù)多個(gè)I/O之間是否具有相同的依賴標(biāo)記,確定出多個(gè)I/O之間是否存在依賴關(guān)系,提高塊層調(diào)度I/O的準(zhǔn)確性的效果。
另外,通過文件系統(tǒng)為組I/O中的第二I/O設(shè)置來源標(biāo)記,使得終端在統(tǒng)計(jì)每個(gè)I/O的開銷時(shí),可以將具有相同來源標(biāo)記的第二I/O作為同一調(diào)度域的開銷進(jìn)行統(tǒng)計(jì),解決了塊層只能分別統(tǒng)計(jì)每個(gè)I/O的開銷,或者,只能統(tǒng)計(jì)所有I/O的開銷,無法統(tǒng)計(jì)每個(gè)調(diào)度域的I/O的開銷的問題,達(dá)到了明確每個(gè)調(diào)度域的I/O的開銷的效果。
結(jié)合第一方面,在第一方面的第一種實(shí)現(xiàn)中,調(diào)度域用于表示組I/O中的第二I/O來自同一客戶端。
結(jié)合第一方面,在第一方面的第二種實(shí)現(xiàn)中,調(diào)度域用于表示組I/O中的第二I/O來自同一個(gè)文件。
結(jié)合第一方面,在第一方面的第三種實(shí)現(xiàn)中,文件系統(tǒng)接收客戶端發(fā)送的第一I/O,具體包括:操作系統(tǒng)接收客戶端發(fā)送的第一I/O,將第一I/O發(fā)送到高速緩存(cache);cache將第一I/O發(fā)送至文件系統(tǒng)。
可選的,操作系統(tǒng)在接收到第一I/O時(shí),會(huì)為該第一I/O設(shè)置來源標(biāo)記,文件系統(tǒng)接收到具有來源標(biāo)記的第一I/O后,為對(duì)該第一I/O進(jìn)行解析得到的組I/O設(shè)置與該來源標(biāo)記相同的來源標(biāo)記,從而保證每個(gè)I/O對(duì)應(yīng)的調(diào)度域的準(zhǔn)確性。
當(dāng)?shù)谝籌/O為讀I/O,且cache包括該讀I/O讀取的數(shù)據(jù)時(shí),cache會(huì)將該數(shù)據(jù)返回給操作系統(tǒng),并統(tǒng)計(jì)該來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷。
通過cache統(tǒng)計(jì)讀I/O具有的來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷,使得終端不僅可以在塊層統(tǒng)計(jì)每個(gè)I/O的開銷,還會(huì)考慮到第一I/O直接從cache返回的情況,統(tǒng)計(jì)這些第一I/O的開銷,將這些第一I/O的開銷加入到對(duì)應(yīng)的客戶端的開銷中,解決了終端只在塊層統(tǒng)計(jì)每個(gè)I/O的開銷,導(dǎo)致終端統(tǒng)計(jì)I/O的開銷不準(zhǔn)確的問題,提高了終端統(tǒng)計(jì)每個(gè)I/O的開銷的準(zhǔn)確性。
結(jié)合第一方面的第三種實(shí)現(xiàn),在第一方面的第四種實(shí)現(xiàn)中,當(dāng)?shù)谝籌/O為刷盤I/O或非直接寫I/O時(shí),將第一I/O發(fā)送到cache,具體包括:操作系統(tǒng)獲取塊層剩余的未調(diào)度的I/O數(shù)量;操作系統(tǒng)根據(jù)未調(diào)度的I/O數(shù)量將第一I/O發(fā)送到cache。
由于刷盤I/O或非直接寫I/O通常會(huì)導(dǎo)致文件系統(tǒng)生成批量的回寫操作,導(dǎo)致存儲(chǔ)設(shè)備處理I/O的壓力較大的問題,因此,當(dāng)?shù)谝籌/O為刷盤I/O或非直接寫I/O時(shí),通過操作系統(tǒng)根據(jù)塊層未向存儲(chǔ)設(shè)備調(diào)度的I/O的數(shù)量將第一I/O發(fā)送到cache,使得操作系統(tǒng)在存儲(chǔ)設(shè)備可能有空閑的資源處理第一I/O時(shí),才向cache下發(fā)該第一I/O,達(dá)到了減輕存儲(chǔ)設(shè)備處理I/O的壓力的效果。
可選的,當(dāng)?shù)谝籌/O為刷盤I/O或非直接寫I/O時(shí),cache接收到該第一I/O并將該第一I/O返回到操作系統(tǒng)后,統(tǒng)計(jì)該第一I/O具有的來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷。
結(jié)合第一方面或第一方面的第一種實(shí)現(xiàn)至第四種實(shí)現(xiàn)中的任意一種實(shí)現(xiàn),在第一方面的第五種實(shí)現(xiàn)中,塊層根據(jù)來源標(biāo)記和依賴標(biāo)記對(duì)組I/O中的每個(gè)I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù),具體包括:塊層將組I/O中具有依賴標(biāo)記和來源標(biāo)記的第二I/O加入排序隊(duì)列,將具有依賴標(biāo)記但不具有來源標(biāo)記的I/O加入控制隊(duì)列;塊層獲取預(yù)存的客戶端的QoS;根據(jù)QoS和依賴標(biāo)記對(duì)排序隊(duì)列中的第二I/O進(jìn)行排序;根據(jù)并發(fā)數(shù)閾值和并發(fā)數(shù)比例關(guān)系,對(duì)排序隊(duì)列中的第二I/O和控制隊(duì)列中的I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù),其中,并發(fā)數(shù)閾值是存儲(chǔ)設(shè)備同時(shí)處理I/O的總數(shù)量的最大值;并發(fā)數(shù)比例關(guān)系是存儲(chǔ)設(shè)備同時(shí)處理來自排序隊(duì)列的第二I/O的總數(shù)量與來自控制隊(duì)列的I/O的總數(shù)量之間的比例關(guān)系。
由于通常第二I/O是需要返回給客戶端的I/O,即,第二I/O的開銷是面向用戶的開銷,因此,通過塊層根據(jù)來源標(biāo)記和依賴標(biāo)記區(qū)分組I/O中的第二I/O,并根據(jù)QoS對(duì)第二I/O進(jìn)行排序,使得塊層在向存儲(chǔ)設(shè)備調(diào)度所有I/O時(shí),只需使得第二I/O的開銷滿足用戶設(shè)置的QoS即可,即,存儲(chǔ)設(shè)備只需優(yōu)先處理第二I/O即可,解決了塊層根據(jù)QoS對(duì)所有的I/O進(jìn)行排序,向存儲(chǔ)設(shè)備調(diào)度該所有I/O,造成存儲(chǔ)設(shè)備處理I/O的壓力較大的問題,減輕了存儲(chǔ)設(shè)備處理I/O的壓力。
可選的,在塊層根據(jù)并發(fā)數(shù)閾值和并發(fā)數(shù)比例關(guān)系,對(duì)排序隊(duì)列中的第二I/O和控制隊(duì)列中的I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù)之后,塊層接收存儲(chǔ)設(shè)備已處理的每個(gè)I/O;統(tǒng)計(jì)具有相同來源標(biāo)記的不同I/O的開銷之和,將該開銷之和確定為該來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷。
第二方面,提供了一I/O調(diào)度裝置,該裝置包括至少一個(gè)單元,該至少一個(gè)單元用于實(shí)現(xiàn)上述第一方面或第一方面的至少一種實(shí)現(xiàn)中所提供的I/O調(diào)度方法。
第三方面,提供了一種文件服務(wù)器,該裝置包括:處理器和存儲(chǔ)器,其中存儲(chǔ)器中存儲(chǔ)計(jì)算機(jī)指令,如文件系統(tǒng)指令,塊層指令,處理器執(zhí)行存儲(chǔ)器中的計(jì)算機(jī)指令以執(zhí)行第一方面或第一方面任一種實(shí)現(xiàn)的方案。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹。
圖1A是本發(fā)明一個(gè)實(shí)施例提供文件服務(wù)器的結(jié)構(gòu)圖;
圖1B是本發(fā)明一個(gè)實(shí)施例提供的用于I/O調(diào)度的方法的系統(tǒng)架構(gòu)的示意圖;
圖2是本發(fā)明一實(shí)施例提供的I/O調(diào)度方法的流程圖;
圖3是本發(fā)明一個(gè)實(shí)施例提供的I/O調(diào)度裝置的框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
在本文中提及的“單元”是指按照邏輯劃分的功能性結(jié)構(gòu),該“單元”可以由純硬件實(shí)現(xiàn),或者,軟硬件的結(jié)合實(shí)現(xiàn)。
請(qǐng)參考圖1A,其示出了本發(fā)明一個(gè)示例性實(shí)施例提供的文件服務(wù)器100的結(jié)構(gòu)示意圖。該文件服務(wù)器100包括:處理器120、與處理器120相連的存儲(chǔ)器140。
處理器120是文件服務(wù)器的控制中心,該處理器120可以是中央處理器(central processing unit,CPU),網(wǎng)絡(luò)處理器(network processor,NP)或者CPU和NP的組合。處理器120還可以進(jìn)一步包括硬件芯片。上述硬件芯片可以是專用集成電路(application-specific integrated circuit,ASIC),可編程邏輯器件(programmable logic device,PLD)或其組合。上述PLD可以是復(fù)雜可編程邏輯器件(complex programmable logic device,CPLD),現(xiàn)場(chǎng)可編程邏輯門陣列(field-programmable gate array,F(xiàn)PGA),通用陣列邏輯(generic array logic,GAL)或其任意組合。
存儲(chǔ)器140用總線或其它方式與處理器120相連、用于存儲(chǔ)文件服務(wù)器100安裝的客戶端請(qǐng)求寫入的數(shù)據(jù),或者文件服務(wù)器運(yùn)行時(shí)所需的數(shù)據(jù)。存儲(chǔ)器140可以為易失性存儲(chǔ)設(shè)備(英文:volatile memory),非易失性存儲(chǔ)設(shè)備(英文:non-volatile memory)或者它們的組合。易失性存儲(chǔ)設(shè)備可以為隨機(jī)存取存儲(chǔ)設(shè)備(英文:random-access memory,RAM),例如靜態(tài)隨機(jī)存取存儲(chǔ)設(shè)備(英文:static random access memory,SRAM),動(dòng)態(tài)隨機(jī)存取存儲(chǔ)設(shè)備(英文:dynamic random access memory,DRAM)。非易失性存儲(chǔ)設(shè)備可以為只讀存儲(chǔ)設(shè)備(英文:read only memory image,ROM),例如可編程只讀存儲(chǔ)設(shè)備(英文:programmable read only memory,PROM),可擦除可編程只讀存儲(chǔ)設(shè)備(英文:erasable programmable read only memory,EPROM),電可擦除可編程只讀存儲(chǔ)設(shè)備(英文:electrically erasable programmable read-only memory,EEPROM)。
為了便于理解本發(fā)明提供的I/O調(diào)度方法,請(qǐng)參考圖1B,其示出了本發(fā)明一個(gè)示例性實(shí)施例提供的一種用于I/O調(diào)度方法的系統(tǒng)架構(gòu)160的示意圖,該系統(tǒng)架構(gòu)160包括操作系統(tǒng)161、cache162、文件系統(tǒng)163、塊層164、存儲(chǔ)設(shè)備165和客戶端166,該系統(tǒng)架構(gòu)中的操作系統(tǒng)161、cache162、文件系統(tǒng)163、塊層164用于圖1A所示的文件服務(wù)器100中。其中,cache 162可以為文件服務(wù)器100中的存儲(chǔ)器140的一部分。其中一種實(shí)現(xiàn),操作系統(tǒng)161、文件系統(tǒng)163和塊層164以計(jì)算機(jī)指令形式存儲(chǔ)在文件服務(wù)器100中的存儲(chǔ)器140中,處理器120執(zhí)行存儲(chǔ)器140中的計(jì)算機(jī)指令以實(shí)現(xiàn)本發(fā)明實(shí)施例各方案。
操作系統(tǒng)161中包含有調(diào)度器,該調(diào)度器用于為每個(gè)第一I/O設(shè)置來源標(biāo)記,并用于在第一I/O為刷盤I/O或直接寫I/O時(shí),根據(jù)塊層164剩余的未調(diào)度的I/O數(shù)量向cache調(diào)度該第一I/O,其中,來源標(biāo)記用于標(biāo)記每個(gè)I/O來源于哪一個(gè)客戶端,具體地,詳見步驟201。
cache162用于接收操作系統(tǒng)161下發(fā)的第一I/O,并用于在第一I/O為刷盤I/O或非直接寫I/O時(shí),緩存該第一I/O寫入的數(shù)據(jù),具體地,詳見步驟201。
文件系統(tǒng)163的數(shù)量可以為至少一個(gè),且每個(gè)文件系統(tǒng)163中都包含調(diào)度器,調(diào)度器用于接收cache162下發(fā)的第一I/O。文件系統(tǒng)163可以根據(jù)內(nèi)部機(jī)制對(duì)第一I/O進(jìn)行解析生成組I/O,此時(shí),該文件系統(tǒng)163中的調(diào)度器會(huì)為該組I/O中的每個(gè)I/O設(shè)置依賴標(biāo)記,并將第一I/O的來源標(biāo)記復(fù)制到組I/O中的第二I/O中,并根據(jù)來源標(biāo)記和依賴標(biāo)記將該組I/O調(diào)度至塊層。其中,依賴標(biāo)記用于標(biāo)識(shí)組I/O中每個(gè)I/O之間的依賴關(guān)系。具體地,詳見步驟201至步驟203。
塊層164中包含調(diào)度器,該調(diào)度器用于接收文件系統(tǒng)163下發(fā)的每個(gè)I/O,根據(jù)存儲(chǔ)設(shè)備165的并發(fā)數(shù)比例關(guān)系和并發(fā)數(shù)閾值向存儲(chǔ)設(shè)備165下發(fā)每個(gè)I/O,具體地,詳見步驟204。
其中,并發(fā)數(shù)閾值是存儲(chǔ)設(shè)備165同時(shí)處理I/O的總數(shù)量的最大值;并發(fā)數(shù)比例關(guān)系是存儲(chǔ)設(shè)備165同時(shí)處理塊層165中的排序隊(duì)列的I/O的總數(shù)量與控制隊(duì)列的I/O的總數(shù)量之間的比例關(guān)系。
存儲(chǔ)設(shè)備165用于接收塊層164中的調(diào)度器下發(fā)的每個(gè)I/O,并處理每個(gè)I/O。
其中,本實(shí)施例中所描述的每個(gè)層級(jí)或者調(diào)度器可以通過具有相同功能的硬件、軟件、或者硬件和軟件的結(jié)合實(shí)現(xiàn),本實(shí)施例不作限定。另外,每個(gè)系統(tǒng)架構(gòu)160中的文件系統(tǒng)163和塊層164可以實(shí)現(xiàn)在不同的終端中,也可以實(shí)現(xiàn)在同一終端中,本實(shí)施例不作限定。
請(qǐng)參考圖2,其示出了本發(fā)明一實(shí)施例提供的一種I/O調(diào)度方法的流程圖,該I/O調(diào)度方法可以應(yīng)用于圖1B所示的系統(tǒng)架構(gòu)中,該I/O調(diào)度方法包括以下步驟:
步驟201,文件系統(tǒng)接收客戶端發(fā)送的第一I/O。
由于操作系統(tǒng)可以直接與客戶端進(jìn)行交互,因此,本實(shí)施例中,文件系統(tǒng)接收客戶端發(fā)送的第一I/O,包括:操作系統(tǒng)接收客戶端發(fā)送的第一I/O,將第一I/O發(fā)送到cache;cache將第一I/O發(fā)送至文件系統(tǒng),文件系統(tǒng)接收該第一I/O。
其中,第一I/O可以為刷盤I/O、讀I/O或者寫I/O。刷盤I/O用于在cache寫入數(shù)據(jù),并由cache立即將該數(shù)據(jù)回寫入存儲(chǔ)設(shè)備;讀I/O包括直接讀I/O和非直接讀I/O,直接讀I/O用于直接從存儲(chǔ)設(shè)備讀入數(shù)據(jù);非直接讀I/O用于先從cache讀取數(shù)據(jù),如果cache不包括該非直接讀I/O讀取的數(shù)據(jù),再從存儲(chǔ)設(shè)備讀取數(shù)據(jù);寫I/O包括直接寫I/O和非直接寫I/O,直接寫I/O用于直接向存儲(chǔ)設(shè)備寫入數(shù)據(jù);非直接寫I/O用于先向cache寫入數(shù)據(jù),再由cache將該數(shù)據(jù)回寫入存儲(chǔ)設(shè)備。
當(dāng)?shù)谝籌/O為刷盤I/O或非直接寫I/O時(shí),將第一I/O發(fā)送到cache,包括:操作系統(tǒng)獲取塊層剩余的未調(diào)度的I/O數(shù)量,根據(jù)未調(diào)度的I/O數(shù)量將第一I/O發(fā)送到cache。
其中,操作系統(tǒng)根據(jù)未調(diào)度的I/O數(shù)量將第一I/O發(fā)送到cache,包括:在操作系統(tǒng)確定出塊層未調(diào)度的I/O的總數(shù)量小于存儲(chǔ)設(shè)備的并發(fā)數(shù)閾值的正整數(shù)倍時(shí),將第一I/O發(fā)送到cache。其中,并發(fā)數(shù)閾值是存儲(chǔ)設(shè)備同時(shí)處理I/O的總數(shù)量的最大值。正整數(shù)倍的數(shù)值是開發(fā)者設(shè)置的,且本實(shí)施例不對(duì)該正整數(shù)倍的數(shù)值作限定。
由于刷盤I/O或非直接寫I/O通常會(huì)導(dǎo)致文件系統(tǒng)生成批量的回寫操作,導(dǎo)致存儲(chǔ)設(shè)備處理I/O的壓力較大,因此,當(dāng)?shù)谝籌/O為刷盤I/O或非直接寫I/O時(shí),操作系統(tǒng)根據(jù)塊層未向存儲(chǔ)設(shè)備調(diào)度的I/O的數(shù)量將第一I/O發(fā)送到cache,使得操作系統(tǒng)在存儲(chǔ)設(shè)備可能有空閑的資源處理第一I/O時(shí),才向cache下發(fā)該第一I/O,達(dá)到了減輕存儲(chǔ)設(shè)備處理I/O的壓力的效果。
需要說明的是,安裝在操作系統(tǒng)中的調(diào)度器在接收到客戶端發(fā)送的第一I/O后,會(huì)為該第一I/O設(shè)置來源標(biāo)記,且操作系統(tǒng)中的調(diào)度器為不同的客戶端發(fā)送的第一I/O設(shè)置不同的來源標(biāo)記,該來源標(biāo)記用于標(biāo)識(shí)組I/O中的所有的第二I/O屬于同一個(gè)調(diào)度域,該調(diào)度域用于表示組I/O中所有的第二I/O來自同一客戶端。比如:客戶端1發(fā)送了第一I/O1,客戶端2發(fā)送了第一I/O2,操作系統(tǒng)中的調(diào)度器接收到這兩個(gè)I/O時(shí),會(huì)為第一I/O1設(shè)置用于表示該第一I/O1來源于客戶端1的來源標(biāo)記“1”、為第一I/O2設(shè)置用于表示該第一I/O2來源于客戶端2的來源標(biāo)記“2”。當(dāng)然,可以想到的是,當(dāng)組I/O中的第二I/O只有一個(gè)時(shí),來源標(biāo)記用于標(biāo)識(shí)組I/O中的第二I/O來源于的調(diào)度域。在實(shí)際實(shí)現(xiàn)時(shí),來源標(biāo)記可以為預(yù)設(shè)的字符或者字符串,還可以為預(yù)設(shè)的代碼段,本實(shí)施例不作限定。
可選的,當(dāng)?shù)谝籌/O為刷盤I/O、非直接寫I/O或者非直接讀I/O時(shí),cache在將第一I/O返回到操作系統(tǒng)之后,會(huì)統(tǒng)計(jì)該第一I/O的開銷,并將該開銷加入到該第一I/O的來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷。
其中,開銷用于指示第一I/O的處理速率,第一I/O的處理速率可以通過每秒傳輸?shù)恼鬃止?jié)數(shù)(Million Bytes Per Second,MBPS)、每秒進(jìn)行讀寫操作的次數(shù)(Input/Output Per Second,IOPS)、延遲(latency)等衡量指標(biāo)來表示,本實(shí)施例不對(duì)第一I/O的處理速率的衡量指標(biāo)作限定。
當(dāng)?shù)谝籌/O為刷盤I/O、非直接寫I/O或者非直接讀I/O時(shí),通過cache統(tǒng)計(jì)第一I/O具有的來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷,使得終端不僅可以在塊層統(tǒng)計(jì)每個(gè)I/O的開銷,還會(huì)考慮到第一I/O直接從cache返回的情況,統(tǒng)計(jì)這些第一I/O的開銷,將這些第一I/O的開銷加入到對(duì)應(yīng)的客戶端的開銷中,解決了終端只在塊層統(tǒng)計(jì)每個(gè)I/O的開銷,導(dǎo)致終端統(tǒng)計(jì)I/O的開銷不準(zhǔn)確的問題,提高了終端統(tǒng)計(jì)每個(gè)I/O的開銷的準(zhǔn)確性。
步驟202中,文件系統(tǒng)解析第一I/O得到組I/O。
其中,組I/O中每個(gè)I/O之間均存在依賴關(guān)系,依賴關(guān)系是指組I/O中的每個(gè)I/O讀取或者寫入的數(shù)據(jù)均與第一I/O讀取或者寫入的數(shù)據(jù)有關(guān)。組I/O中可以包括該第一I/O;也可以包括根據(jù)第一I/O轉(zhuǎn)化得到的第二I/O,比如:文件系統(tǒng)接收到的第一I/O為寫I/O,該文件系統(tǒng)將該寫I/O轉(zhuǎn)化為一個(gè)讀I/O和一個(gè)寫I/O,此時(shí),轉(zhuǎn)化后的讀I/O和寫I/O為第二I/O;還可以包括第一I/O引發(fā)的內(nèi)部I/O,比如:文件系統(tǒng)接收到的第一I/O為讀I/O,并生成了一個(gè)用于讀取該讀I/O請(qǐng)求讀取的文件的文件屬性的讀I/O,此時(shí),生成的讀I/O即為第一I/O引發(fā)的內(nèi)部I/O。其中,在一些實(shí)現(xiàn)中,第二I/O也被稱為派生I/O,本實(shí)施例不對(duì)第二I/O的名稱作限定。
步驟203中,文件系統(tǒng)為組I/O中的每個(gè)I/O設(shè)置依賴標(biāo)記,并識(shí)別組I/O中的第二I/O,為組I/O中的第二I/O設(shè)置來源標(biāo)記。
其中,依賴標(biāo)記用于標(biāo)識(shí)組I/O中每個(gè)I/O之間的依賴關(guān)系,文件系統(tǒng)為組I/O中的每個(gè)I/O設(shè)置依賴標(biāo)記時(shí),會(huì)為組I/O中的每個(gè)I/O設(shè)置相同的依賴標(biāo)記,該依賴標(biāo)記可以為預(yù)設(shè)的字符或者字符串,還可以為預(yù)設(shè)的代碼段,本實(shí)施例不作限定。其中,相同的依賴標(biāo)記是指不同的I/O的依賴標(biāo)記具有相同的標(biāo)志位,也可以是指不同的I/O的依賴標(biāo)記具有相同代碼段,本實(shí)施例不作限定。比如,組I/O中的I/O1、I/O2、I/O3、I/O4,對(duì)應(yīng)的依賴標(biāo)記分別為11、12、13、14,其中,各個(gè)依賴標(biāo)記的首位為標(biāo)志位,尾位用于表示處理順序。由于這四個(gè)I/O的依賴標(biāo)記的標(biāo)志位相同,因此,I/O1、I/O2、I/O3、I/O4具有相同的依賴標(biāo)記。
文件系統(tǒng)為組I/O中的第二I/O設(shè)置來源標(biāo)記,包括:獲取操作系統(tǒng)發(fā)送的第一I/O的來源標(biāo)記,將該來源標(biāo)記復(fù)制到每個(gè)第二I/O中。此時(shí),調(diào)度域可以用于表示組I/O中所有的第二I/O來自同一個(gè)文件。
步驟204中,塊層根據(jù)來源標(biāo)記和依賴標(biāo)記對(duì)組I/O中的每個(gè)I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù)。
塊層中的調(diào)度器根據(jù)來源標(biāo)記和依賴標(biāo)記對(duì)組I/O中的每個(gè)I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù),包括:塊層中的調(diào)度器將組I/O中具有依賴標(biāo)記和來源標(biāo)記的第二I/O加入排序隊(duì)列,將具有依賴標(biāo)記但不具有來源標(biāo)記的I/O加入控制隊(duì)列;塊層獲取預(yù)存的QoS;根據(jù)QoS和依賴標(biāo)記對(duì)排序隊(duì)列中的第二I/O進(jìn)行排序;根據(jù)并發(fā)數(shù)閾值和并發(fā)數(shù)比例關(guān)系,對(duì)排序隊(duì)列中的第二I/O和控制隊(duì)列中的I/O進(jìn)行調(diào)度以訪問存儲(chǔ)設(shè)備中的數(shù)據(jù),其中,并發(fā)數(shù)比例關(guān)系是存儲(chǔ)設(shè)備同時(shí)處理來自排序隊(duì)列的第二I/O的總數(shù)量與來自控制隊(duì)列的I/O的總數(shù)量之間的比例關(guān)系。比如:存儲(chǔ)設(shè)備的并發(fā)數(shù)閾值為300,并發(fā)數(shù)比例關(guān)系為2:1,則塊層將第二排序隊(duì)列中前200個(gè)I/O下發(fā)至存儲(chǔ)設(shè)備進(jìn)行處理,將第一控制隊(duì)列中的100個(gè)內(nèi)部I/O下發(fā)至存儲(chǔ)設(shè)備進(jìn)行處理。
其中,QoS是組I/O中的第二I/O的來源標(biāo)記對(duì)應(yīng)的客戶端的QoS,且該QoS在客戶端發(fā)送第一I/O之前已經(jīng)從客戶端發(fā)送到了塊層的調(diào)度器中。
塊層中的調(diào)度器在對(duì)組I/O中的第二I/O進(jìn)行排序時(shí),可以使用SFQ算法,還可以使用WFQ算法,還可以使用mClock算法,本實(shí)施例不作限定。
需要說明的是,文件系統(tǒng)可能不定期地生成與該第一I/O不具有依賴關(guān)系的內(nèi)部I/O,比如:用于進(jìn)行數(shù)據(jù)校驗(yàn)的I/O、用于進(jìn)行數(shù)據(jù)備份的I/O、用于進(jìn)行批量事務(wù)下發(fā)的I/O等。這些內(nèi)部I/O既不具有來源標(biāo)記也不具有依賴標(biāo)記,塊層會(huì)將這些既不具有來源標(biāo)記也不具有依賴標(biāo)記的內(nèi)部I/O也加入到控制隊(duì)列中。
可選的,文件系統(tǒng)中的調(diào)度器在將組I/O調(diào)度至塊層之前,會(huì)根據(jù)依賴標(biāo)記對(duì)組I/O中的第二I/O進(jìn)行排序,并將組I/O中具有依賴標(biāo)記但不具有來源標(biāo)記的I/O加入該文件系統(tǒng)中的控制隊(duì)列中。這樣,文件系統(tǒng)將組I/O調(diào)度至塊層包括兩種情況,在第一種情況下,文件系統(tǒng)未生成具有依賴標(biāo)記但不具有來源標(biāo)記的I/O,即,與第一I/O具有依賴關(guān)系的內(nèi)部I/O;在第二種情況下,文件系統(tǒng)生成了具有依賴標(biāo)記但不具有來源標(biāo)記的I/O。下面將對(duì)這兩種情況分別進(jìn)行描述。
第一種情況:
文件系統(tǒng)中的調(diào)度器根據(jù)依賴標(biāo)記對(duì)組I/O的每個(gè)I/O進(jìn)行排序,并將排序后的組I/O調(diào)度至塊層,塊層接收該組I/O。此時(shí),塊層不會(huì)接收到具有依賴標(biāo)記但不具有來源標(biāo)記的I/O。
需要說明的是,文件系統(tǒng)中的調(diào)度器在將組I/O調(diào)度至塊層時(shí),可能會(huì)將文件系統(tǒng)生成的既不具有依賴標(biāo)記也不具有來源標(biāo)記的內(nèi)部I/O一起調(diào)度至塊層,塊層會(huì)將該既不具有依賴標(biāo)記也不具有來源標(biāo)記的內(nèi)部I/O加入到塊層中的控制隊(duì)列中。文件系統(tǒng)中的調(diào)度器在根據(jù)依賴關(guān)系對(duì)一組I/O中具有相同依賴標(biāo)記的每個(gè)I/O進(jìn)行排序時(shí),可以使用SFQ算法,還可以使用WFQ算法,還可以使用mClock算法,本實(shí)施例不作限定。
第二種情況:文件系統(tǒng)中的調(diào)度器優(yōu)先調(diào)度組I/O中的第二I/O,或者,文件系統(tǒng)中的調(diào)度器優(yōu)先調(diào)度組I/O中具有依賴標(biāo)記但不具有來源標(biāo)記的I/O,本實(shí)施例以文件系統(tǒng)中的調(diào)度器優(yōu)先調(diào)度組I/O中的第二I/O為例進(jìn)行說明。
文件系統(tǒng)中的調(diào)度器根據(jù)依賴關(guān)系對(duì)組I/O中的第二I/O進(jìn)行排序;將與該組I/O中具有依賴標(biāo)記但不具有來源標(biāo)記的內(nèi)部I/O加入文件系統(tǒng)中的控制隊(duì)列;向塊層調(diào)度排序后的第二I/O后,接收塊層返回的已向存儲(chǔ)設(shè)備調(diào)度的第二I/O,向塊層調(diào)度文件系統(tǒng)中的控制隊(duì)列中的具有依賴標(biāo)記但不具有來源標(biāo)記的內(nèi)部I/O。
此時(shí),塊層會(huì)在接收組I/O中的第二I/O,并將該第二I/O調(diào)度至存儲(chǔ)設(shè)備之后才會(huì)接收到該組I/O中具有依賴標(biāo)記但不具有來源標(biāo)記的內(nèi)部I/O,并將該具有依賴標(biāo)記但不具有來源標(biāo)記的內(nèi)部I/O加入到塊層的控制隊(duì)列中。
可選的,塊層在接收到存儲(chǔ)設(shè)備返回的I/O時(shí),會(huì)統(tǒng)計(jì)具有相同來源標(biāo)記的不同I/O的開銷之和,將該開銷之和確定為該來源標(biāo)記對(duì)應(yīng)的調(diào)度域的開銷。
綜上所述,本發(fā)明實(shí)施例提供的I/O調(diào)度方法,通過文件系統(tǒng)為對(duì)第一I/O進(jìn)行解析得到的組I/O設(shè)置依賴標(biāo)記,將具有該依賴標(biāo)記的組I/O調(diào)度至塊層,使得塊層可以根據(jù)不同的I/O之間是否具有相同的依賴標(biāo)記,確定出不同的I/O之間是否存在依賴關(guān)系,解決了塊層無法確定多個(gè)I/O之間是否存在依賴關(guān)系,在多個(gè)I/O之間存在依賴關(guān)系時(shí),沒有按照該依賴關(guān)系向存儲(chǔ)設(shè)備調(diào)度該多個(gè)I/O,導(dǎo)致塊層調(diào)度I/O不準(zhǔn)確,文件系統(tǒng)的功能失效的問題,達(dá)到了提高塊層調(diào)度I/O的準(zhǔn)確性的效果。
另外,通過文件系統(tǒng)為組I/O中的第二I/O設(shè)置來源標(biāo)記,使得終端在統(tǒng)計(jì)每個(gè)I/O的開銷時(shí),可以將具有相同來源標(biāo)記的第二I/O作為同一調(diào)度域的開銷進(jìn)行統(tǒng)計(jì),解決了塊層只能分別統(tǒng)計(jì)每個(gè)I/O的開銷,或者,只能統(tǒng)計(jì)所有I/O的開銷,無法統(tǒng)計(jì)每個(gè)調(diào)度域的I/O的開銷的問題,達(dá)到了明確每個(gè)調(diào)度域的I/O的開銷的效果。
另外,由于刷盤I/O或非直接寫I/O通常會(huì)導(dǎo)致文件系統(tǒng)生成批量的回寫操作,導(dǎo)致存儲(chǔ)設(shè)備處理I/O的壓力較大,因此,當(dāng)?shù)谝籌/O為刷盤I/O或非直接寫I/O時(shí),通過操作系統(tǒng)根據(jù)塊層未向存儲(chǔ)設(shè)備調(diào)度的I/O的數(shù)量將第一I/O發(fā)送到cache,使得操作系統(tǒng)在存儲(chǔ)設(shè)備可能有空閑的資源處理第一I/O時(shí),才向cache下發(fā)該第一I/O,達(dá)到了減輕存儲(chǔ)設(shè)備處理I/O的壓力的效果。
另外,由于通常第二I/O是需要返回給客戶端的I/O,即,第二I/O的開銷是面向用戶的開銷,因此,通過塊層根據(jù)來源標(biāo)記和依賴標(biāo)記區(qū)分組I/O中的第二I/O,并根據(jù)QoS對(duì)第二I/O進(jìn)行排序,使得塊層在向存儲(chǔ)設(shè)備調(diào)度所有I/O時(shí),只需使得第二I/O的開銷滿足用戶設(shè)置的QoS即可,即,存儲(chǔ)設(shè)備只需優(yōu)先處理第二I/O即可,解決了塊層根據(jù)QoS對(duì)所有的I/O進(jìn)行排序,向存儲(chǔ)設(shè)備調(diào)度該所有I/O,造成存儲(chǔ)設(shè)備處理I/O的壓力較大的問題,減輕了存儲(chǔ)設(shè)備處理I/O的壓力。
請(qǐng)參考圖3,其示出了本發(fā)明一個(gè)實(shí)施例提供的一種I/O調(diào)度裝置的框圖。該I/O調(diào)度裝置可以通過軟件、硬件或者兩者的結(jié)合實(shí)現(xiàn)成為終端的全部或者一部分。該I/O調(diào)度裝置可以包括:接收單元310、解析單元320、設(shè)置單元330、調(diào)度單元340。
接收單元310,用于實(shí)現(xiàn)上述步驟201的功能。
解析單元320,用于實(shí)現(xiàn)上述步驟202的功能。
設(shè)置單元330,用于實(shí)現(xiàn)上述步驟203的功能。
調(diào)度單元340,用于實(shí)現(xiàn)上述步驟204的功能。
相關(guān)細(xì)節(jié)可結(jié)合參考圖2所述的方法實(shí)施例。
需要說明的是,上述的接收單元310、解析單元320、設(shè)置單元330、調(diào)度單元340可以通過終端中的處理器來實(shí)現(xiàn)。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。
本領(lǐng)域普通技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
在本申請(qǐng)所提供的實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,可以僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。