本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法和裝置。
背景技術(shù):
半虛擬化網(wǎng)卡內(nèi)核加速模塊(vhost-net)是基于內(nèi)核的虛擬機(jī)(KVM,Kernel-based Virtual Machine)的重要組件,vhost-net模塊可以提升KVM虛擬機(jī)網(wǎng)絡(luò)約30%的性能。
現(xiàn)有技術(shù)中,對(duì)于vhost-net模塊升級(jí)時(shí),需要將虛擬機(jī)關(guān)機(jī),移除原vhost-net模塊后,插入新的vhost-net模塊,再重新啟動(dòng)虛擬機(jī)。這種vhost-net模塊的升級(jí)方式必須暫時(shí)關(guān)閉虛擬機(jī),關(guān)閉期間會(huì)造成服務(wù)中斷,對(duì)于服務(wù)提供商和客戶都會(huì)帶來(lái)不良影響。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)的一個(gè)目的是提供一種半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法和裝置。
根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法,包括:
將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸;
移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊;
插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊;
將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸。
根據(jù)本申請(qǐng)的另一個(gè)方面,提供了一種半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置,包括:
第一模塊,用于將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切換至 用戶態(tài)進(jìn)行傳輸;
第二模塊,用于移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊;
第三模塊,用于插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊;
第四模塊,用于將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸。
與現(xiàn)有技術(shù)相比,本申請(qǐng)?jiān)趯?duì)半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行升級(jí)時(shí),首先將網(wǎng)絡(luò)流量由內(nèi)核態(tài)切換至用戶態(tài)進(jìn)行傳輸,然后將升級(jí)后的半虛擬化網(wǎng)卡內(nèi)核加速模塊插入系統(tǒng),再將原先由用戶態(tài)轉(zhuǎn)發(fā)的網(wǎng)絡(luò)流量切換回內(nèi)核態(tài)由新的半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行轉(zhuǎn)發(fā),不需要中斷服務(wù),網(wǎng)絡(luò)流量在內(nèi)核態(tài)和用戶態(tài)之間的切換不會(huì)造成虛擬機(jī)網(wǎng)絡(luò)流量的波動(dòng),實(shí)現(xiàn)半虛擬化網(wǎng)卡內(nèi)核加速模塊的升級(jí)對(duì)于用戶而言是無(wú)法感知的,不會(huì)影響用戶體驗(yàn)。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1示出根據(jù)本申請(qǐng)一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置的結(jié)構(gòu)示意圖;
圖2示出根據(jù)本申請(qǐng)又一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置的結(jié)構(gòu)示意圖;
圖3示出根據(jù)本申請(qǐng)一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法的流程示意圖;
圖4示出根據(jù)本申請(qǐng)又一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法的流程示意圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)描述。
圖1示出根據(jù)本申請(qǐng)一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置 的結(jié)構(gòu)示意圖。如圖1所示,該半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置1包括:第一模塊11、第二模塊12、第三模塊13和第四模塊14。
其中,第一模塊11,用于將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸;第二模塊12,用于移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊;第三模塊13,用于插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊;第四模塊14,用于將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸。
在此,半虛擬化網(wǎng)卡內(nèi)核加速模塊可以采用KVM虛擬化的vhost-net模塊,vhost-net模塊用于機(jī)器虛擬器(QEMU)半虛擬化網(wǎng)卡(virtio-net)加速。第一半虛擬化網(wǎng)卡內(nèi)核加速模塊是指升級(jí)前的vhost-net模塊,第二半虛擬化網(wǎng)卡內(nèi)核加速模塊是指升級(jí)后新的vhost-net模塊。第一模塊11將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸。在用戶態(tài)下,虛擬機(jī)在發(fā)送或接收數(shù)據(jù)包時(shí),首先陷入內(nèi)核態(tài),然后再返回到用戶態(tài)的QEMU(機(jī)器虛擬器)進(jìn)程進(jìn)行處理,最后通過(guò)虛擬以太網(wǎng)網(wǎng)絡(luò)設(shè)備(TAP設(shè)備)經(jīng)由網(wǎng)橋、物理網(wǎng)卡進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送或接收。在將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行轉(zhuǎn)發(fā)后,第二模塊12可以移除舊的vhost-net模塊,而網(wǎng)絡(luò)服務(wù)不被中斷。此后第三模塊13插入新的vhost-net模塊。第四模塊14將用戶態(tài)進(jìn)行轉(zhuǎn)發(fā)的網(wǎng)絡(luò)流量切換至內(nèi)核態(tài)由升級(jí)后新的vhost-net模塊進(jìn)行傳輸。內(nèi)核態(tài)下,虛擬機(jī)陷入內(nèi)核態(tài)后,不需要再返回到用戶態(tài),而由新的vhost-net模塊的內(nèi)核線程進(jìn)行處理,通過(guò)虛擬以太網(wǎng)網(wǎng)絡(luò)設(shè)備(TAP設(shè)備)經(jīng)由網(wǎng)橋、物理網(wǎng)卡進(jìn)行數(shù)據(jù)包的發(fā)送或接收。通過(guò)用戶態(tài)和內(nèi)核態(tài)的互相切換,從而實(shí)現(xiàn)了在移除舊的vhost-net模塊并插入新的升級(jí)后的vhost-net模塊時(shí),不會(huì)中斷網(wǎng)絡(luò)服務(wù)。
圖2示出根據(jù)本申請(qǐng)又一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置的結(jié)構(gòu)示意圖。如圖2所示,該半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)裝置1包括:第一模塊11、第二模塊12、第三模塊13和第四模塊14。
其中,第一模塊11,用于將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸;第二模塊12,用于移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊;第三模塊13,用于插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊;第四 模塊14,用于將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸。
在此,半虛擬化網(wǎng)卡內(nèi)核加速模塊可以采用KVM虛擬化的vhost-net模塊,vhost-net模塊用于機(jī)器虛擬器(QEMU)半虛擬化網(wǎng)卡(virtio-net)加速。第一半虛擬化網(wǎng)卡內(nèi)核加速模塊是指升級(jí)前舊的vhost-net模塊,第二半虛擬化網(wǎng)卡內(nèi)核加速模塊是指升級(jí)后新的vhost-net模塊。第一模塊11將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸。在用戶態(tài)下,虛擬機(jī)在發(fā)送或接收數(shù)據(jù)包時(shí),首先陷入內(nèi)核態(tài),然后再返回到用戶態(tài)的QEMU進(jìn)程進(jìn)行處理,最后通過(guò)虛擬以太網(wǎng)網(wǎng)絡(luò)設(shè)備(TAP設(shè)備)經(jīng)由網(wǎng)橋、物理網(wǎng)卡進(jìn)行數(shù)據(jù)包的發(fā)送或接收。在將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行轉(zhuǎn)發(fā)后,第二模塊12可以移除舊的vhost-net模塊,而網(wǎng)絡(luò)服務(wù)不被中斷。此后第三模塊13插入新的vhost-net模塊。第四模塊14將用戶態(tài)進(jìn)行轉(zhuǎn)發(fā)的網(wǎng)絡(luò)流量切換至內(nèi)核態(tài)由升級(jí)后新的vhost-net模塊進(jìn)行傳輸。內(nèi)核態(tài)下,虛擬機(jī)陷入內(nèi)核態(tài)后,不需要再返回到用戶態(tài),而由新的vhost-net模塊的內(nèi)核線程進(jìn)行處理,通過(guò)TAP設(shè)備(虛擬以太網(wǎng)網(wǎng)絡(luò)設(shè)備)經(jīng)由網(wǎng)橋、物理網(wǎng)卡進(jìn)行數(shù)據(jù)包的發(fā)送或接收。通過(guò)用戶態(tài)和內(nèi)核態(tài)的互相切換,從而實(shí)現(xiàn)了在移除舊的vhost-net模塊并插入新的升級(jí)后的vhost-net模塊時(shí),不會(huì)中斷網(wǎng)絡(luò)服務(wù)。
具體地,第一模塊11包括:第一一子模塊111、第一二子模塊112和第一三子模塊113。
其中,第一一子模塊111,用于機(jī)器虛擬器進(jìn)程獲取共享內(nèi)存的使用狀態(tài)。第一二子模塊112,用于所述機(jī)器虛擬器進(jìn)程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。第一三子模塊113,用于停止所述第一半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程的輪詢。
在此,第一一子模塊111使QEMU進(jìn)程獲取共享內(nèi)存(vring)的使用狀態(tài),第一二子模塊112使QEMU進(jìn)程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。第一三子模塊113停止舊的vhost-net模塊內(nèi)核線程在TAP設(shè)備上的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的輪詢(poll),將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行處理,為移除舊的vhost-net模塊做好準(zhǔn)備。其中, 共享內(nèi)存用于緩存收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包,每個(gè)半虛擬化網(wǎng)卡對(duì)應(yīng)一個(gè)vhost-net模塊內(nèi)核線程。
可選地,第二模塊12還用于:清理第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的資源。
在此,第二模塊12釋放機(jī)器虛擬器中用于描述舊的vhost-net模塊的數(shù)據(jù)結(jié)構(gòu)內(nèi)存,這些數(shù)據(jù)結(jié)構(gòu)及其他代碼用于將vhost-net模塊以設(shè)備的形式呈現(xiàn)給機(jī)器虛擬機(jī)使用。此后,第二模塊12關(guān)閉舊的vhost-net模塊的用戶態(tài)接口導(dǎo)出設(shè)備的句柄(/dev/vhost-net),以徹底移除舊的vhost-net模塊。
可選地,第三模塊13還用于:初始化第二半虛擬化網(wǎng)卡內(nèi)核加速模塊的資源。
在此,在插入新的vhost-net模塊后,第三模塊13打開(kāi)新的vhost-net模塊的用戶態(tài)接口導(dǎo)出設(shè)備的句柄,并調(diào)用用戶態(tài)下QEMU接口,在內(nèi)存中初始化描述新的vhost-net模塊的數(shù)據(jù)結(jié)構(gòu)。
具體地,第四模塊14包括:第四一子模塊141、第四二子模塊142、第四三子模塊143和第四四子模塊144。
其中,第四一子模塊141,用于第二半虛擬化網(wǎng)卡內(nèi)核加速模塊創(chuàng)建內(nèi)核線程;第四二子模塊142,用于第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程獲取共享內(nèi)存的使用狀態(tài);第四三子模塊143,用于第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收;第四四子模塊144,用于開(kāi)啟所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程的輪詢。
在此,第四一子模塊141使初始化后的新的vhost-net模塊創(chuàng)建內(nèi)核線程;第四二子模塊142使新的vhost-net模塊創(chuàng)建的內(nèi)核線程獲取共享內(nèi)存(vring)的使用狀態(tài);第四四子模塊144開(kāi)啟新的vhost-net模塊內(nèi)核線程在TAP設(shè)備上的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的輪詢(poll)。第四三子模塊143使新的vhost-net模塊內(nèi)核線程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。此后,獲取共享內(nèi)存使用狀態(tài)的內(nèi)核線程依照共享內(nèi)存、TAP設(shè)備、網(wǎng)橋及物理網(wǎng)卡的順序?qū)W(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行接收和發(fā)送。
圖3示出根據(jù)本申請(qǐng)一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法的流程示意圖。如圖3所示,該半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法包括:
步驟S301,將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸;
步驟S302,移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊;
步驟S303,插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊;
步驟S304,將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸。
在此,半虛擬化網(wǎng)卡內(nèi)核加速模塊可以采用KVM虛擬化的vhost-net模塊,vhost-net模塊用于機(jī)器虛擬器(QEMU)半虛擬化網(wǎng)卡(virtio-net)加速。第一半虛擬化網(wǎng)卡內(nèi)核加速模塊是指升級(jí)前舊的vhost-net模塊,第二半虛擬化網(wǎng)卡內(nèi)核加速模塊是指升級(jí)后新的vhost-net模塊。步驟S301將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸。在用戶態(tài)下,虛擬機(jī)在發(fā)送或接收數(shù)據(jù)包時(shí),首先陷入內(nèi)核態(tài),然后再返回到用戶態(tài)的QEMU進(jìn)程進(jìn)行處理,最后通過(guò)TAP設(shè)備經(jīng)由網(wǎng)橋、物理網(wǎng)卡進(jìn)行數(shù)據(jù)包的發(fā)送或接收。在將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行轉(zhuǎn)發(fā)后,可以移除舊的vhost-net模塊而網(wǎng)絡(luò)服務(wù)不被中斷。此后插入新的vhost-net模塊。將用戶態(tài)進(jìn)行轉(zhuǎn)發(fā)的網(wǎng)絡(luò)流量切換至內(nèi)核態(tài)由升級(jí)后新的vhost-net模塊進(jìn)行傳輸。內(nèi)核態(tài)下,虛擬機(jī)陷入內(nèi)核態(tài)后,不需要再返回到用戶態(tài),而由新的vhost-net模塊內(nèi)核線程進(jìn)行處理,通過(guò)TAP設(shè)備經(jīng)由網(wǎng)橋、物理網(wǎng)卡進(jìn)行數(shù)據(jù)包的發(fā)送或接收。通過(guò)用戶態(tài)和內(nèi)核態(tài)的互相切換,從而實(shí)現(xiàn)了在移除舊的vhost-net模塊并插入新的升級(jí)后的vhost-net模塊時(shí),不會(huì)中斷網(wǎng)絡(luò)服務(wù)。
具體地,步驟S301將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行傳輸包括:
步驟S3011,機(jī)器虛擬器進(jìn)程獲取共享內(nèi)存的使用狀態(tài);
步驟S3012,所述機(jī)器虛擬器進(jìn)程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。
具體地,步驟S301將第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的網(wǎng)絡(luò)流量切 換至用戶態(tài)進(jìn)行傳輸還包括:
步驟S3013,停止所述第一半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程的輪詢。
在此,停止舊的vhost-net模塊內(nèi)核線程在TAP設(shè)備上的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的輪詢(poll),開(kāi)啟QEMU進(jìn)程對(duì)TAP設(shè)備上的可收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的輪詢,并且控制QEMU進(jìn)程獲取共享內(nèi)存(vring)的使用狀態(tài),由QEMU進(jìn)程處理切換后的網(wǎng)絡(luò)流量的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包,將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行處理,為移除舊的vhost-net模塊做好準(zhǔn)備。其中,共享內(nèi)存用于緩存網(wǎng)絡(luò)數(shù)據(jù)包。
具體地,步驟S302,移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊還包括:
清理第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的資源。
在此,釋放機(jī)器虛擬器中用于描述舊的vhost-net模塊的數(shù)據(jù)結(jié)構(gòu)內(nèi)存,這些數(shù)據(jù)結(jié)構(gòu)及其他代碼用于將vhost-net模塊以設(shè)備的形式呈現(xiàn)給機(jī)器虛擬機(jī)使用。此后,關(guān)閉舊的vhost-net模塊的用戶態(tài)接口導(dǎo)出設(shè)備的句柄(/dev/vhost-net),以徹底移除舊的vhost-net模塊。
具體地,步驟S303,插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊還包括:
初始化第二半虛擬化網(wǎng)卡內(nèi)核加速模塊的資源。
在此,在插入新的vhost-net模塊后,打開(kāi)新的vhost-net模塊的用戶態(tài)接口導(dǎo)出設(shè)備的句柄,并調(diào)用用戶態(tài)下QEMU接口,在內(nèi)存中初始化描述新的vhost-net模塊的數(shù)據(jù)結(jié)構(gòu)。
具體地,步驟S304,將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸包括:
步驟S3041,所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊創(chuàng)建內(nèi)核線程;
步驟S3042,所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程獲取共享內(nèi)存的使用狀態(tài);
步驟S3043,所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。
具體地,步驟S304將用戶態(tài)進(jìn)行傳輸?shù)木W(wǎng)絡(luò)流量切換至第二半虛擬化網(wǎng)卡內(nèi)核加速模塊進(jìn)行傳輸還包括:
步驟S3044,開(kāi)啟所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程的輪詢。
在此,新的vhost-net模塊創(chuàng)建內(nèi)核線程并控制該內(nèi)核線程獲取當(dāng)前共享內(nèi)存(vring)的使用狀態(tài),并且新的vhost-net模塊開(kāi)啟內(nèi)核線程在TAP設(shè)備上的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的輪詢(poll),以將用戶態(tài)轉(zhuǎn)發(fā)的網(wǎng)絡(luò)流量切換至新的vhost-net模塊。此后,獲取共享內(nèi)存使用狀態(tài)的內(nèi)核線程依照共享內(nèi)存、TAP設(shè)備、網(wǎng)橋及物理網(wǎng)卡的順序?qū)W(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行接收和發(fā)送。
圖4示出根據(jù)本申請(qǐng)又一個(gè)方面的半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法的流程示意圖。如圖4所示,該半虛擬化網(wǎng)卡內(nèi)核加速模塊升級(jí)方法包括:
步驟S401,停止所述第一半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程的輪詢。
在此,停止舊的vhost-net模塊的內(nèi)核線程在TAP設(shè)備上的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的poll(輪詢)。
步驟S402,機(jī)器虛擬器進(jìn)程獲取共享內(nèi)存的使用狀態(tài)。
在此,開(kāi)啟QEMU進(jìn)程對(duì)TAP設(shè)備上的可收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的poll(輪詢),并且控制QEMU進(jìn)程獲取共享內(nèi)存(vring)的使用狀態(tài)。
步驟S403,機(jī)器虛擬器進(jìn)程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。
在此,由QEMU進(jìn)程處理切換后的網(wǎng)絡(luò)流量的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包,將舊的vhost-net模塊的網(wǎng)絡(luò)流量切換至用戶態(tài)進(jìn)行處理,為移除舊的vhost-net模塊做好準(zhǔn)備。
步驟S404,移除第一半虛擬化網(wǎng)卡內(nèi)核加速模塊并清理第一半虛擬化網(wǎng)卡內(nèi)核加速模塊的資源。
在此,釋放機(jī)器虛擬器中用于描述舊的vhost-net模塊的數(shù)據(jù)結(jié)構(gòu)內(nèi)存,這些數(shù)據(jù)結(jié)構(gòu)及其他代碼用于將vhost-net模塊以設(shè)備的形式呈現(xiàn)給機(jī)器虛擬機(jī)使用。此后,關(guān)閉舊的vhost-net模塊的用戶態(tài)接口導(dǎo)出設(shè)備的句柄(/dev/vhost-net),以徹底移除舊的vhost-net模塊。
步驟S405,插入第二半虛擬化網(wǎng)卡內(nèi)核加速模塊并初始化第二半虛擬 化網(wǎng)卡內(nèi)核加速模塊的資源。
在此,在插入新的vhost-net模塊后,打開(kāi)新的vhost-net模塊的用戶態(tài)接口導(dǎo)出設(shè)備的句柄,并調(diào)用用戶態(tài)下QEMU接口,在內(nèi)存中初始化描述新的vhost-net模塊的數(shù)據(jù)結(jié)構(gòu)。
步驟S406,所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊創(chuàng)建內(nèi)核線程。
步驟S407,所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程獲取共享內(nèi)存的使用狀態(tài)。
在此,新的vhost-net模塊創(chuàng)建內(nèi)核線程,內(nèi)核線程獲取共享內(nèi)存使用狀態(tài)。
步驟S408,開(kāi)啟所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程的輪詢。
在此,開(kāi)啟新的vhost-net模塊內(nèi)核線程在TAP設(shè)備上的收/發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的poll(輪詢)。
步驟S409,所述第二半虛擬化網(wǎng)卡內(nèi)核加速模塊內(nèi)核線程控制對(duì)共享內(nèi)存中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和/或接收。
在此,將用戶態(tài)轉(zhuǎn)發(fā)的網(wǎng)絡(luò)流量切換至新的vhost-net模塊,依照共享內(nèi)存、TAP設(shè)備、網(wǎng)橋及物理網(wǎng)卡的順序?qū)W(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行接收和發(fā)送。
需要注意的是,本申請(qǐng)可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(ASIC)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本申請(qǐng)的軟件程序可以通過(guò)處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請(qǐng)的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤(pán)及類似設(shè)備。另外,本申請(qǐng)的一些步驟或功能可采用硬件來(lái)實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。
另外,本申請(qǐng)的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時(shí),通過(guò)該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請(qǐng)的方法和/或技術(shù)方案。而調(diào)用本申請(qǐng)的方法的程序指令,可能被存儲(chǔ)在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過(guò)廣播或其他信號(hào)承載媒體中 的數(shù)據(jù)流而被傳輸,和/或被存儲(chǔ)在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲(chǔ)器中。在此,根據(jù)本申請(qǐng)的一個(gè)實(shí)施例包括一個(gè)裝置,該裝置包括用于存儲(chǔ)計(jì)算機(jī)程序指令的存儲(chǔ)器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時(shí),觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請(qǐng)的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本申請(qǐng)不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請(qǐng)的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請(qǐng)。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請(qǐng)的范圍由所附權(quán)利要求而不是上述說(shuō)明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請(qǐng)內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過(guò)軟件或者硬件來(lái)實(shí)現(xiàn)。第一,第二等詞語(yǔ)用來(lái)表示名稱,而并不表示任何特定的順序。