亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種虛擬化IO性能優(yōu)化方法及系統(tǒng)與流程

文檔序號:12596577閱讀:643來源:國知局
一種虛擬化IO性能優(yōu)化方法及系統(tǒng)與流程

本發(fā)明涉及虛擬化技術(shù)領(lǐng)域,更具體地說,涉及一種基于virtio_blk的虛擬化IO性能優(yōu)化方法及系統(tǒng)。



背景技術(shù):

隨著互聯(lián)網(wǎng)時代信息、數(shù)據(jù)爆炸式增長,也帶動了存儲市場需求的不斷增長和變化。為了更好的滿足不同客戶的需求(如同時提供nas和san服務(wù)),統(tǒng)一存儲的概念也應(yīng)運而生,基于虛擬化平臺實現(xiàn)統(tǒng)一存儲也成為主流技術(shù)之一。虛擬化平臺主要包括CPU虛擬化、內(nèi)存虛擬化以及IO虛擬化。其中CPU虛擬化、內(nèi)存虛擬化技術(shù)已經(jīng)可以通過硬件的方式去實現(xiàn),實現(xiàn)技術(shù)已經(jīng)很成熟。因此,IO虛擬化成為虛擬機IO性能最核心的技術(shù),virtio應(yīng)運而生。virtio一套是基于半虛擬化平臺的IO虛擬化框架,該框架支持各種設(shè)備,如網(wǎng)絡(luò)設(shè)備、SCSI設(shè)備,而virtio_blk就是用來提供塊設(shè)備服務(wù)的。

因此,如何基于virtio_blk提高虛擬化IO性能,是本領(lǐng)域技術(shù)人員需要解決的問題。



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

本發(fā)明的目的在于提供一種基于virtio_blk的虛擬化IO性能優(yōu)化方法及系統(tǒng),以實現(xiàn)提高IO性能。

為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術(shù)方案:

一種基于virtio_blk的虛擬化IO性能優(yōu)化方法,包括:

接收到bio請求時,通過BASE_BIO模塊將bio請求存入目標(biāo)隊列;

當(dāng)所述目標(biāo)隊列保存的bio請求數(shù)目大于預(yù)定閾值時,檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求;

若存在,則將相鄰請求封裝為virtblk_requet,并執(zhí)行kick操作;若不存在,則將每個bio請求封裝為對應(yīng)的virtblk_request,并執(zhí)行kick操作。

其中,檢測到所述目標(biāo)隊列保存的bio請求存在相鄰請求之后,還包括:

按照預(yù)定規(guī)則,將相鄰請求動態(tài)移動到所述目標(biāo)隊列的前端。

其中,所述按照預(yù)定規(guī)則,將相鄰請求動態(tài)移動到所述目標(biāo)隊列的前端,包括:

根據(jù)檢測到的每個相鄰請求的請求數(shù)目,設(shè)定每個相鄰請求的優(yōu)先級,并根據(jù)每個相鄰請求的優(yōu)先級,動態(tài)調(diào)整每個相鄰請求在所述目標(biāo)隊列的保存位置。

其中,檢測到所述目標(biāo)隊列保存的bio請求不存在相鄰請求之后,還包括:

設(shè)置與每個bio請求對應(yīng)的計時器;

若檢測到計時器超時,則將與超時的計數(shù)器對應(yīng)的bio請求的處理優(yōu)先級設(shè)置為最高。

其中,所述檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求,包括:

檢測所述目標(biāo)隊列保存的bio請求是否存在位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的一者的bio請求;

若存在,則將位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的bio請求作為一組相鄰請求。

一種基于virtio_blk的虛擬化IO性能優(yōu)化系統(tǒng),包括:

Bio請求存入模塊,用于接收到bio請求時,通過BASE_BIO模塊將bio請求存入目標(biāo)隊列;

相鄰請求檢測模塊,用于當(dāng)所述目標(biāo)隊列保存的bio請求數(shù)目大于預(yù)定閾值時,檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求;若存在,則觸發(fā)第一封裝模塊;若不存在,則觸發(fā)第二封裝模塊;

所述第一封裝模塊,用于將相鄰請求封裝為virtblk_requet;

所述第二封裝模塊,用于將每個bio請求封裝為對應(yīng)的virtblk_request;

執(zhí)行模塊,用于對封裝后的virtblk_requet執(zhí)行kick操作。

其中,還包括:

動態(tài)調(diào)整模塊,用于按照預(yù)定規(guī)則,將相鄰請求動態(tài)移動到所述目標(biāo)隊列的前端。

其中,所述動態(tài)調(diào)整模塊根據(jù)檢測到的每個相鄰請求的請求數(shù)目,設(shè)定每個相鄰請求的優(yōu)先級,并根據(jù)每個相鄰請求的優(yōu)先級,動態(tài)調(diào)整每個相鄰請求在所述目標(biāo)隊列的保存位置。

其中,還包括:

計時器設(shè)置模塊,用于設(shè)置與每個bio請求對應(yīng)的計時器;

處理優(yōu)先級調(diào)整模塊,用于檢測到計時器超時,則將與超時的計數(shù)器對應(yīng)的bio請求的處理優(yōu)先級設(shè)置為最高。

其中,所述相鄰請求檢測模塊通過檢測所述目標(biāo)隊列保存的bio請求是否存在位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的一者的bio請求;若存在,則將位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的bio請求作為一組相鄰請求。

通過以上方案可知,本發(fā)明實施例提供的一種基于virtio_blk的虛擬化IO性能優(yōu)化方法及系統(tǒng),包括:接收到bio請求時,通過BASE_BIO模塊將bio請求存入目標(biāo)隊列;當(dāng)所述目標(biāo)隊列保存的bio請求數(shù)目大于預(yù)定閾值時,檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求;若存在,則將相鄰請求封裝為virtblk_requet,并執(zhí)行kick操作;若不存在,則將每個bio請求封裝為對應(yīng)的virtblk_request,并執(zhí)行kick操作。

可見,在本實施例中,BASE_BIO模塊是以IO最小單位bio為粒度進(jìn)行的從客戶機到宿主機的IO轉(zhuǎn)發(fā),實現(xiàn)客戶機IO路徑的最短化;將相鄰請求封裝為virtblk_requet,可以在執(zhí)行kick操作時,讓qemu一次處理多個bio請求,減少了kick執(zhí)行的次數(shù),將更多的計算資源用于IO的處理,使得virtio_blk的IO路徑更加簡潔清晰,從而客戶機IO路徑的最短化,也縮短了virtio_blk整個IO路徑,大大降低了客戶機到宿主機的IO響應(yīng)延遲,提高了系統(tǒng)整體的IOPS性能。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明實施例公開的一種基于virtio_blk的虛擬化IO性能優(yōu)化方法流程示意圖;

圖2為本發(fā)明實施例公開的Virtio_blk IO路徑圖;

圖3為本發(fā)明實施例公開的BASE_BIO模塊IO路徑圖;

圖4為本發(fā)明實施例公開的一種基于virtio_blk的虛擬化IO性能優(yōu)化系統(tǒng)結(jié)構(gòu)框圖。

具體實施方式

下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。

本發(fā)明實施例公開了一種基于virtio_blk的虛擬化IO性能優(yōu)化方法及系統(tǒng),以實現(xiàn)提高IO性能。

參見圖1,本發(fā)明實施例提供的一種基于virtio_blk的虛擬化IO性能優(yōu)化方法,包括:

S101、接收到bio請求時,通過BASE_BIO模塊將bio請求存入目標(biāo)隊列;

S102、當(dāng)所述目標(biāo)隊列保存的bio請求數(shù)目大于預(yù)定閾值時,檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求;

其中,所述檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求,包括:

檢測所述目標(biāo)隊列保存的bio請求是否存在位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的一者的bio請求;

若存在,則將位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的bio請求作為一組相鄰請求。

具體的,在本實施例中,對IO請求進(jìn)行排序,排序的原則是檢測是否有相鄰磁盤請求,比如若兩個bio請求位于同一扇區(qū)、磁道、柱面或者磁盤,則視為相鄰請求。

若存在,則執(zhí)行S103、將相鄰請求封裝為virtblk_requet,并執(zhí)行kick操作;

其中,檢測到所述目標(biāo)隊列保存的bio請求存在相鄰請求之后,還包括:

按照預(yù)定規(guī)則,將相鄰請求動態(tài)移動到所述目標(biāo)隊列的前端。

其中,所述按照預(yù)定規(guī)則,將相鄰請求動態(tài)移動到所述目標(biāo)隊列的前端,包括:

根據(jù)檢測到的每個相鄰請求的請求數(shù)目,設(shè)定每個相鄰請求的優(yōu)先級,并根據(jù)每個相鄰請求的優(yōu)先級,動態(tài)調(diào)整每個相鄰請求在所述目標(biāo)隊列的保存位置。

具體的,在本實施例中,若存在相鄰的IO請求,那么這些相鄰請求會被動態(tài)的移動到隊列的最前端,保證優(yōu)先處理,然后將這些IO請求的封裝為一個virtblk_requet,即把這些bio的內(nèi)存描述信息都轉(zhuǎn)化到vring中,執(zhí)行kick操作(通知qemu處理IO)。這樣做的目的讓qemu一次就可以處理多個bio請求,減少了kick執(zhí)行的次數(shù),將更多的計算資源用于IO的處理。

若不存在,則執(zhí)行S104、將每個bio請求封裝為對應(yīng)的virtblk_request,并執(zhí)行kick操作。

其中,檢測到所述目標(biāo)隊列保存的bio請求不存在相鄰請求之后,還包括:

設(shè)置與每個bio請求對應(yīng)的計時器;

若檢測到計時器超時,則將與超時的計數(shù)器對應(yīng)的bio請求的處理優(yōu)先級設(shè)置為最高。

具體的,在本實施例中對于單個的bio請求設(shè)置對應(yīng)的計時器,是為了防止大量順序讀寫少量隨機讀寫場景下,隨機的IO請求長時間得不到響應(yīng),造成系統(tǒng)整體性能下降。

具體的,在介紹本實施例的優(yōu)化方法之前,需要了解virtio_blk在客戶機的原始IO路徑。參見圖2為本實施例提供的Virtio_blk IO路徑圖,如圖2虛線1所示,IO經(jīng)過文件系統(tǒng)處理后以bio的形式提交給通用塊層;如圖2虛線2所示在基于請求的IO路徑中,多個相鄰的bio請求首先會被封裝到一個request結(jié)構(gòu),多個request會放到request隊列并經(jīng)過經(jīng)過內(nèi)核已支持的調(diào)度算法排序,經(jīng)過排序的請求會通過q->request_fn繼續(xù)向下,該函數(shù)已經(jīng)被具體的底層模塊實例化注冊。對于Virtio_blk前端驅(qū)動而言,其注冊的請求處理函數(shù)為virt_blk_request。該函數(shù)首先會將通用塊層的請求封裝為virtblk_request,具體實現(xiàn)原理為在virtblk_request結(jié)構(gòu)保存了通用塊層request中bio鏈表的首地址,接著會解析每一個bio中描述內(nèi)存數(shù)據(jù)的segment信息,包括起始地址、頁內(nèi)偏移、長度。最后,virt_blk_request函數(shù)會將這些segment信息轉(zhuǎn)化為virtio_queue中vring的信息,最后會通知qemu去處理此次IO請求。至此客戶機完成了一次IO請求提交。

在上述virtio_blk的IO路徑中基于請求的IO路徑對于virtio框架沒有存在的意義,理由如下:

1、對virtblk_request的封裝其本質(zhì)是將通用塊層請求中bio的segment信息轉(zhuǎn)化為virtqueue中vring的信息,使用和不使用通用塊層請求對此次IO請求提交沒有影響;

2、雖然通用塊層會進(jìn)行request的合并排序,考慮到宿主機在實際刷寫磁盤的時候,每個IO都會經(jīng)歷宿主機的通用塊層,對于客戶機的這次合并排序,其作用是一致的,如果在客戶機中直接在通用塊上層進(jìn)行基于bio的virtblk_request封裝,避免了整個IO路徑的重復(fù)冗余;

3、bio是描述一次完整IO的最小單位,不可再劃分,因此不能再更高層次進(jìn)行轉(zhuǎn)發(fā)。

在本實施例中,通過開發(fā)BASE_BIO模塊來解決上述問題,BASE_BIO模塊是可配置安裝的內(nèi)核模塊,跟普通的內(nèi)核模塊一樣,既可以使用編譯后insmod加載該模塊的方式;也可以在將該模塊的源碼放置到內(nèi)核源碼樹中,編寫makefile文件,并在內(nèi)核配置選項中打開該選項的方式。客戶機內(nèi)核塊設(shè)備驅(qū)動初始化的流程中,當(dāng)有IO下發(fā)的時候,就會進(jìn)入BASE_BIO的業(yè)務(wù)流程。

如圖3中虛線3(BASE_BIO)所示當(dāng)bio通過q->make_request_fn進(jìn)行提交時,實際是對virtblk_make_request回調(diào)函數(shù)的調(diào)用,就進(jìn)入BASE_BIO模塊的處理流程。該模塊的功能主要包括:

1、將上層提交的bio請求暫存到一個隊列中,在隊列的長度到達(dá)閾值時,會對隊列中暫存的IO請求進(jìn)行排序。排序的原則是檢測是否有相鄰磁盤請求,比如若兩個bio請求位于同一扇區(qū)、磁道、柱面或者磁盤,則視為相鄰請求;

2、如果存在相鄰的IO請求,那么這些請求會被動態(tài)的移動到隊列的最前端,保證優(yōu)先處理,然后將這些IO請求的封裝為一個virtblk_requet,即把這些bio的內(nèi)存描述信息都轉(zhuǎn)化到vring中,執(zhí)行kick操作(通知qemu處理IO)。這樣做的目的讓qemu一次就可以處理多個bio請求,減少了kick執(zhí)行的次數(shù),將更多的計算資源用于IO的處理;

3、對于不存在相鄰的IO請求,那么一個bio對應(yīng)一個virtblk_request,然后通知qemu去處理;同時,需要為這類bio設(shè)置計時器,當(dāng)計時器超時后,這些bio的優(yōu)先級會被設(shè)置為最高,優(yōu)先被處理;這樣設(shè)計的目的是為了防止大量順序讀寫少量隨機讀寫場景下,隨機的IO請求長時間得不到響應(yīng),造成系統(tǒng)整體性能下降。

具體的,目前虛擬化IO性能優(yōu)化的方法有各種各樣的技術(shù),對于kvm虛擬化平臺,性能優(yōu)化最有效的方法就是縮短IO在虛擬機和宿主機、宿主機和底層存儲設(shè)備的IO路徑,因此,在本實施例中基于virtio塊設(shè)備IO虛擬化框架提出了的性能優(yōu)化方法,將相鄰的IO請求封裝為一個virtblk_request,這樣qemu一次就可以處理多個bio請求,減少了kick執(zhí)行的次數(shù),將更多的計算資源用于IO的處理,通過縮減虛擬機中的IO路徑,從而縮減了IO響應(yīng)延遲,提高虛擬化應(yīng)用場景下存儲系統(tǒng)的服務(wù)性能。

下面對本發(fā)明實施例提供的虛擬化IO性能優(yōu)化系統(tǒng)進(jìn)行介紹,下文描述的虛擬化IO性能優(yōu)化系統(tǒng)與上文描述的虛擬化IO性能優(yōu)化系統(tǒng)可以相互參照。

參見圖4,本發(fā)明實施例提供的一種基于virtio_blk的虛擬化IO性能優(yōu)化系統(tǒng),包括:

Bio請求存入模塊100,用于接收到bio請求時,通過BASE_BIO模塊將bio請求存入目標(biāo)隊列;

相鄰請求檢測模塊200,用于當(dāng)所述目標(biāo)隊列保存的bio請求數(shù)目大于預(yù)定閾值時,檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求;若存在,則觸發(fā)第一封裝模塊;若不存在,則觸發(fā)第二封裝模塊;

所述第一封裝模塊300,用于將相鄰請求封裝為virtblk_requet;

所述第二封裝模塊400,用于將每個bio請求封裝為對應(yīng)的virtblk_request;

執(zhí)行模塊500,用于對封裝后的virtblk_requet執(zhí)行kick操作。

基于上述技術(shù)方案,本方案還包括:

動態(tài)調(diào)整模塊,用于按照預(yù)定規(guī)則,將相鄰請求動態(tài)移動到所述目標(biāo)隊列的前端。

基于上述技術(shù)方案,所述動態(tài)調(diào)整模塊根據(jù)檢測到的每個相鄰請求的請求數(shù)目,設(shè)定每個相鄰請求的優(yōu)先級,并根據(jù)每個相鄰請求的優(yōu)先級,動態(tài)調(diào)整每個相鄰請求在所述目標(biāo)隊列的保存位置。

基于上述技術(shù)方案,本方案還包括:

計時器設(shè)置模塊,用于設(shè)置與每個bio請求對應(yīng)的計時器;

處理優(yōu)先級調(diào)整模塊,用于檢測到計時器超時,則將與超時的計數(shù)器對應(yīng)的bio請求的處理優(yōu)先級設(shè)置為最高。

基于上述技術(shù)方案,所述相鄰請求檢測模塊200通過檢測所述目標(biāo)隊列保存的bio請求是否存在位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的一者的bio請求;若存在,則將位于同一扇區(qū)、同一磁道、同一柱面或者同一磁盤中的bio請求作為一組相鄰請求。

本發(fā)明實施例提供的一種基于virtio_blk的虛擬化IO性能優(yōu)化方法及系統(tǒng),包括:接收到bio請求時,通過BASE_BIO模塊將bio請求存入目標(biāo)隊列;當(dāng)所述目標(biāo)隊列保存的bio請求數(shù)目大于預(yù)定閾值時,檢測所述目標(biāo)隊列保存的bio請求是否存在相鄰請求;若存在,則將相鄰請求封裝為virtblk_requet,并執(zhí)行kick操作;若不存在,則將每個bio請求封裝為對應(yīng)的virtblk_request,并執(zhí)行kick操作。

可見,在本實施例中,BASE_BIO模塊是以IO最小單位bio為粒度進(jìn)行的從客戶機到宿主機的IO轉(zhuǎn)發(fā),實現(xiàn)客戶機IO路徑的最短化;將相鄰請求封裝為virtblk_requet,可以在執(zhí)行kick操作時,讓qemu一次處理多個bio請求,減少了kick執(zhí)行的次數(shù),將更多的計算資源用于IO的處理,使得virtio_blk的IO路徑更加簡潔清晰,從而客戶機IO路徑的最短化,也縮短了virtio_blk整個IO路徑,大大降低了客戶機到宿主機的IO響應(yīng)延遲,提高了系統(tǒng)整體的IOPS性能。

本說明書中各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。

對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1