本發(fā)明涉及數(shù)據(jù)中心網(wǎng)絡(luò)中的網(wǎng)絡(luò)資源分配技術(shù)領(lǐng)域,特別涉及一種動(dòng)態(tài)帶寬分配系統(tǒng)及分配方法。
背景技術(shù):
隨著許多云平臺(tái)的出現(xiàn),云計(jì)算越來越受到企業(yè)的歡迎。像CPU和內(nèi)存資源一樣,對(duì)應(yīng)用來說,網(wǎng)絡(luò)帶寬也是一種十分重要的資源,然而當(dāng)前云數(shù)據(jù)中心的網(wǎng)絡(luò)是由許多不相關(guān)的用戶以盡最大努力的方式共享的,這樣不能保證用戶獲得公平的網(wǎng)絡(luò)份額。因此,如何對(duì)網(wǎng)絡(luò)資源進(jìn)行分配,以使用戶獲得公平的網(wǎng)絡(luò)帶寬,保證用戶的應(yīng)用具有可預(yù)期的網(wǎng)絡(luò)性能,成為云數(shù)據(jù)中心亟待解決的問題。
當(dāng)前,研究人員提出了許多的網(wǎng)絡(luò)分配方案。其中,通過為用戶的虛擬機(jī)預(yù)留固定帶寬的方式可以保證應(yīng)用的網(wǎng)絡(luò)性能,但是這會(huì)造成網(wǎng)絡(luò)資源的低利用率,因?yàn)樘摂M機(jī)的網(wǎng)絡(luò)需求是不斷變化的。還有許多方案提出根據(jù)網(wǎng)絡(luò)的狀態(tài)變化,動(dòng)態(tài)的調(diào)整虛擬機(jī)的帶寬。然而,這些方案大多是在主機(jī)端為虛擬機(jī)分配帶寬,而且主機(jī)多是采用試探的方式增加或減少虛擬機(jī)的帶寬。這是因?yàn)橹鳈C(jī)僅知道非常少的網(wǎng)絡(luò)狀態(tài)信息,它們并不能明確計(jì)算出各虛擬機(jī)當(dāng)前公平的帶寬。然而采用試探的方式調(diào)整帶寬,主機(jī)需要迭代很多次才能得到公平的分配。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種動(dòng)態(tài)帶寬分配系統(tǒng)及分配方法,能夠準(zhǔn)確的計(jì)算出各虛擬機(jī)對(duì)的新的公平帶寬,并實(shí)時(shí)地控制各虛擬機(jī)對(duì)的數(shù)據(jù)發(fā)送速率。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種動(dòng)態(tài)帶寬分配系統(tǒng),所述系統(tǒng)構(gòu)建在軟件定義網(wǎng)絡(luò)的不同控制器上,所述系統(tǒng)包括虛擬機(jī)監(jiān)控模塊、帶寬分配模塊以及速率控制模塊,其中:所述虛擬機(jī)監(jiān)控模塊以虛擬機(jī)對(duì)作為監(jiān)控實(shí)體,所述虛擬機(jī)對(duì)包括源虛擬機(jī)和目的虛擬機(jī);所述虛擬機(jī)監(jiān)控模塊實(shí)時(shí)監(jiān)控各個(gè)虛擬機(jī)對(duì)的狀態(tài),所述狀態(tài)包括活躍態(tài)和非活躍態(tài);當(dāng)虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化時(shí),通知所述帶寬分配模塊為所述虛擬機(jī)對(duì)的源虛擬機(jī)分配帶寬;所述帶寬分配模塊用于為處于活躍態(tài)的虛擬機(jī)對(duì)計(jì)算公平的帶寬;所述帶寬分配模塊還用于將處于非活躍態(tài)的虛擬機(jī)對(duì)的帶寬份額按照預(yù)設(shè)策略分配給其他處于活躍態(tài)的虛擬機(jī)對(duì);所述速率控制模塊通過設(shè)置OpenFlow交換機(jī)的meter表項(xiàng)來控制虛擬機(jī)對(duì)的發(fā)送速率;當(dāng)所述帶寬分配模塊計(jì)算出狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)的新帶寬時(shí),所述速率控制器更改與狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)相對(duì)應(yīng)的交換機(jī)的meter表項(xiàng)。
進(jìn)一步地,所述帶寬分配模塊包括鏈路管理子模塊和虛擬機(jī)管理子模塊,其中,所述鏈路管理子模塊用于在各鏈路上進(jìn)行帶寬分配;所述虛擬機(jī)管理子模塊用于管理各個(gè)虛擬機(jī)對(duì)的信息,并在不同鏈路之間同步帶寬分配數(shù)據(jù)。
進(jìn)一步地,所述虛擬機(jī)管理子模塊還用于維護(hù)虛擬機(jī)對(duì)的信息,所述信息包括虛擬機(jī)對(duì)的狀態(tài)、虛擬機(jī)對(duì)的通信路徑包含的鏈路,以及虛擬機(jī)對(duì)當(dāng)前在各鏈路上分別獲得的帶寬;當(dāng)有虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化時(shí),通知所述鏈路管理子模塊;同步各鏈路對(duì)每個(gè)虛擬機(jī)對(duì)的帶寬分配數(shù)據(jù)。
進(jìn)一步地,所述鏈路管理子模塊用于基于預(yù)設(shè)帶寬分配方法以及事件進(jìn)行帶寬分配,所述鏈路管理子模塊為每條鏈路維護(hù)一個(gè)事件池,當(dāng)一條鏈路上有事件發(fā)生時(shí),發(fā)生事件的鏈路的舊帶寬分配處于非公平狀態(tài),所述鏈路管理子模塊在發(fā)生事件的鏈路上重新進(jìn)行帶寬分配。
為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種動(dòng)態(tài)帶寬分配方法,所述方法包括:利用虛擬機(jī)監(jiān)控模塊實(shí)時(shí)監(jiān)控各個(gè)虛擬機(jī)對(duì)的狀態(tài),所述虛擬機(jī)對(duì)包括源虛擬機(jī)和目的虛擬機(jī),所述狀態(tài)包括活躍態(tài)和非活躍態(tài);當(dāng)虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化時(shí),通知帶寬分配模塊為所述虛擬機(jī)對(duì)的源虛擬機(jī)分配帶寬;利用所述帶寬分配模塊為處于活躍態(tài)的虛擬機(jī)對(duì)計(jì)算公平的帶寬并將處于非活躍態(tài)的虛擬機(jī)對(duì)的帶寬份額按照預(yù)設(shè)策略分配給其他處于活躍態(tài)的虛擬機(jī)對(duì);利用速率控制模塊通過設(shè)置OpenFlow交換機(jī)的meter表項(xiàng)來控制虛擬機(jī)對(duì)的發(fā)送速率;當(dāng)所述帶寬分配模塊計(jì)算出狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)的新帶寬時(shí),利用所述速率控制器更改與狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)相對(duì)應(yīng)的交換機(jī)的meter表項(xiàng)。
進(jìn)一步地,所述方法還包括:利用所述帶寬分配模塊為鏈路重新進(jìn)行帶寬分配,其中,所述鏈路為狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)經(jīng)過的鏈路。
進(jìn)一步地,利用所述帶寬分配模塊為鏈路重新進(jìn)行帶寬分配具體包括:初始化所述鏈路的剩余帶寬;計(jì)算所述鏈路上帶寬還未滿足需求的處于活躍態(tài)的虛擬機(jī)對(duì)的權(quán)重和;根據(jù)所述剩余帶寬和所述權(quán)重和,計(jì)算所述鏈路的單位權(quán)重剩余帶寬;根據(jù)各個(gè)虛擬機(jī)對(duì)的權(quán)重,為所述各個(gè)虛擬機(jī)對(duì)分別分配新帶寬;當(dāng)虛擬機(jī)對(duì)的新帶寬大于預(yù)設(shè)帶寬上限時(shí),將所述新帶寬重新設(shè)置為所述預(yù)設(shè)帶寬上限,并且收回多余的帶寬,并將收回的帶寬添加到所述鏈路的剩余帶寬中;當(dāng)所述鏈路的剩余帶寬不為零時(shí),將所述鏈路的剩余帶寬分配給帶寬未滿足需求的虛擬機(jī)對(duì);當(dāng)所述鏈路上處于活躍態(tài)的虛擬機(jī)對(duì)的數(shù)量與帶寬需求已經(jīng)滿足的虛擬機(jī)對(duì)的數(shù)量相同時(shí),停止帶寬分配的過程。
進(jìn)一步地,所述方法還包括:為虛擬機(jī)對(duì)的每條鏈路維護(hù)一個(gè)事件池,其中,當(dāng)一條鏈路上有事件發(fā)生時(shí),發(fā)生事件的鏈路的舊帶寬分配處于非公平狀態(tài);在發(fā)生事件的鏈路上重新進(jìn)行帶寬分配。
進(jìn)一步地,在發(fā)生事件的鏈路上重新進(jìn)行帶寬分配具體包括:針對(duì)所述鏈路上發(fā)生的事件類型,對(duì)所述鏈路上發(fā)生的事件進(jìn)行預(yù)處理;采用預(yù)設(shè)動(dòng)態(tài)帶寬分配算法在已選的鏈路上進(jìn)行帶寬分配;根據(jù)各個(gè)虛擬機(jī)對(duì)的帶寬分配情況,判定是否生成與所述虛擬機(jī)對(duì)相關(guān)的帶寬分配事件,以及確定生成的事件的類型。
進(jìn)一步地,所述帶寬分配模塊包括鏈路管理子模塊和虛擬機(jī)管理子模塊;相應(yīng)地,根據(jù)各個(gè)虛擬機(jī)對(duì)的帶寬分配情況,判定是否生成與所述虛擬機(jī)對(duì)相關(guān)的帶寬分配事件,以及確定生成的事件的類型具體包括:判斷所述虛擬機(jī)管理子模塊是否需要關(guān)于虛擬機(jī)對(duì)的帶寬分配應(yīng)答,如果需要?jiǎng)t生成Rate-reply-v 事件,并將所述Rate-reply-v事件返回至所述虛擬機(jī)管理子模塊;重新進(jìn)行帶寬分配的虛擬機(jī)對(duì)獲得的新帶寬是否大于之前分配的舊帶寬,如果是,則生成Rate-increase-v事件,并將所述Rate-increase-v事件返回所述虛擬機(jī)管理子模塊;判斷所述新帶寬是否小于所述舊帶寬,如果是,則生成Rate-decrease-v事件,并將所述Rate-decrease-v事件返回所述虛擬機(jī)管理子模塊;其中,所述Rate-reply-v事件、Rate-increase-v事件以及Rate-decrease-v事件為虛擬機(jī)對(duì)上預(yù)先定義的事件。
由上可見,本發(fā)明利用虛擬機(jī)監(jiān)控模塊維護(hù)的網(wǎng)絡(luò)中各虛擬機(jī)對(duì)的狀態(tài)視圖,由帶寬分配模塊采用基于鏈路最大-最小公平的動(dòng)態(tài)帶寬分配方法在處于非公平狀態(tài)的鏈路上進(jìn)行帶寬分配,并通過設(shè)置交換機(jī)上各虛擬機(jī)對(duì)的meter表項(xiàng)的速率參數(shù)來控制它們的發(fā)送速率。為了提高帶寬分配的效率,帶寬分配模塊每次只處理一條鏈路上的帶寬分配。因?yàn)閹挿峙淠K知道一條鏈路上的所有信息,包括鏈路存在哪些活躍虛擬機(jī)對(duì),活躍虛擬機(jī)對(duì)的權(quán)重,活躍虛擬機(jī)對(duì)的瓶頸鏈路帶寬信息,因此,它可以快速準(zhǔn)確計(jì)算出各虛擬機(jī)對(duì)的公平帶寬分配。同時(shí),上述帶寬分配方法是分布式的,可以有多個(gè)工作進(jìn)程同時(shí)在不同的鏈路上進(jìn)行帶寬分配,這極大的提高了帶寬分配的效率。另外,帶寬分配模塊包括鏈路管理子模塊和虛擬機(jī)管理子模塊,它們協(xié)作完成不同鏈路之間的帶寬分配信息同步,從而保證了整個(gè)網(wǎng)絡(luò)帶寬分配的公平性,提高了網(wǎng)絡(luò)的帶寬利用率。
附圖說明
圖1是本發(fā)明中動(dòng)態(tài)帶寬分配系統(tǒng)的結(jié)構(gòu)示例圖;
圖2是本發(fā)明中交換機(jī)的流表示例圖;
圖3是本發(fā)明中虛擬機(jī)監(jiān)控模塊的示例圖;
圖4是本發(fā)明中速率控制模塊的示例圖;
圖5是本發(fā)明中帶寬分配模塊的示例圖;
圖6是本發(fā)明中帶寬分配模塊中虛擬機(jī)管理子模塊的示例圖;
圖7是本發(fā)明中虛擬機(jī)管理子模塊一個(gè)worker的工作流程圖;
圖8是本發(fā)明中動(dòng)態(tài)帶寬分配方法流程圖;
圖9是本發(fā)明中帶寬分配完成后針對(duì)各虛擬機(jī)對(duì)的事件生成流程圖;
圖10是本發(fā)明中虛擬機(jī)管理子模塊關(guān)于不同事件的處理示例圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)中的技術(shù)方案,下面將結(jié)合本申請(qǐng)實(shí)施方式中的附圖,對(duì)本申請(qǐng)實(shí)施方式中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施方式僅僅是本申請(qǐng)一部分實(shí)施方式,而不是全部的實(shí)施方式?;诒旧暾?qǐng)中的實(shí)施方式,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施方式,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
本申請(qǐng)?zhí)峁┮环N動(dòng)態(tài)帶寬分配系統(tǒng),所述系統(tǒng)構(gòu)建在軟件定義網(wǎng)絡(luò)的不同控制器上,所述系統(tǒng)包括虛擬機(jī)監(jiān)控模塊、帶寬分配模塊以及速率控制模塊,其中:所述虛擬機(jī)監(jiān)控模塊以虛擬機(jī)對(duì)作為監(jiān)控實(shí)體,所述虛擬機(jī)對(duì)包括源虛擬機(jī)和目的虛擬機(jī);所述虛擬機(jī)監(jiān)控模塊實(shí)時(shí)監(jiān)控各個(gè)虛擬機(jī)對(duì)的狀態(tài),所述狀態(tài)包括活躍態(tài)和非活躍態(tài);當(dāng)虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化時(shí),通知所述帶寬分配模塊為所述虛擬機(jī)對(duì)的源虛擬機(jī)分配帶寬;
所述帶寬分配模塊用于為處于活躍態(tài)的虛擬機(jī)對(duì)計(jì)算公平的帶寬;所述帶寬分配模塊還用于將處于非活躍態(tài)的虛擬機(jī)對(duì)的帶寬份額按照預(yù)設(shè)策略分配給其他處于活躍態(tài)的虛擬機(jī)對(duì);
所述速率控制模塊通過設(shè)置OpenFlow交換機(jī)的meter表項(xiàng)來控制虛擬機(jī)對(duì)的發(fā)送速率;當(dāng)所述帶寬分配模塊計(jì)算出狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)的新帶寬時(shí),所述速率控制器更改與狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)相對(duì)應(yīng)的交換機(jī)的meter表項(xiàng)。
在本實(shí)施方式中,所述帶寬分配模塊包括鏈路管理子模塊和虛擬機(jī)管理子模塊,其中,所述鏈路管理子模塊用于在各鏈路上進(jìn)行帶寬分配;所述虛擬機(jī)管理子模塊用于管理各個(gè)虛擬機(jī)對(duì)的信息,并在不同鏈路之間同步帶寬分配數(shù)據(jù)。
在本實(shí)施方式中,所述虛擬機(jī)管理子模塊還用于維護(hù)虛擬機(jī)對(duì)的信息,所述信息包括虛擬機(jī)對(duì)的狀態(tài)、虛擬機(jī)對(duì)的通信路徑包含的鏈路,以及虛擬機(jī)對(duì)當(dāng)前在各鏈路上分別獲得的帶寬;當(dāng)有虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化時(shí),通知所述鏈路管理子模塊;同步各鏈路對(duì)每個(gè)虛擬機(jī)對(duì)的帶寬分配數(shù)據(jù)。
在本實(shí)施方式中,所述鏈路管理子模塊用于基于預(yù)設(shè)帶寬分配方法以及事件進(jìn)行帶寬分配,所述鏈路管理子模塊為每條鏈路維護(hù)一個(gè)事件池,當(dāng)一條鏈路上有事件發(fā)生時(shí),發(fā)生事件的鏈路的舊帶寬分配處于非公平狀態(tài),所述鏈路管理子模塊在發(fā)生事件的鏈路上重新進(jìn)行帶寬分配。
本發(fā)明還提供一種動(dòng)態(tài)帶寬分配方法,所述方法包括:
利用虛擬機(jī)監(jiān)控模塊實(shí)時(shí)監(jiān)控各個(gè)虛擬機(jī)對(duì)的狀態(tài),所述虛擬機(jī)對(duì)包括源虛擬機(jī)和目的虛擬機(jī),所述狀態(tài)包括活躍態(tài)和非活躍態(tài);當(dāng)虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化時(shí),通知帶寬分配模塊為所述虛擬機(jī)對(duì)的源虛擬機(jī)分配帶寬;
利用所述帶寬分配模塊為處于活躍態(tài)的虛擬機(jī)對(duì)計(jì)算公平的帶寬并將處于非活躍態(tài)的虛擬機(jī)對(duì)的帶寬份額按照預(yù)設(shè)策略分配給其他處于活躍態(tài)的虛擬機(jī)對(duì);
利用速率控制模塊通過設(shè)置OpenFlow交換機(jī)的meter表項(xiàng)來控制虛擬機(jī)對(duì)的發(fā)送速率;當(dāng)所述帶寬分配模塊計(jì)算出狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)的新帶寬時(shí),利用所述速率控制器更改與狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)相對(duì)應(yīng)的交換機(jī)的meter表項(xiàng)。
在本實(shí)施方式中,所述方法還包括:
利用所述帶寬分配模塊為鏈路重新進(jìn)行帶寬分配,其中,所述鏈路為狀態(tài)發(fā)生變化的虛擬機(jī)對(duì)經(jīng)過的鏈路。
在本實(shí)施方式中,利用所述帶寬分配模塊為鏈路重新進(jìn)行帶寬分配具體包括:
初始化所述鏈路的剩余帶寬;
計(jì)算所述鏈路上帶寬還未滿足需求的處于活躍態(tài)的虛擬機(jī)對(duì)的權(quán)重和;
根據(jù)所述剩余帶寬和所述權(quán)重和,計(jì)算所述鏈路的單位權(quán)重剩余帶寬;
根據(jù)各個(gè)虛擬機(jī)對(duì)的權(quán)重,為所述各個(gè)虛擬機(jī)對(duì)分別分配新帶寬;
當(dāng)虛擬機(jī)對(duì)的新帶寬大于預(yù)設(shè)帶寬上限時(shí),將所述新帶寬重新設(shè)置為所述預(yù)設(shè)帶寬上限,并且收回多余的帶寬,并將收回的帶寬添加到所述鏈路的剩余帶寬中;
當(dāng)所述鏈路的剩余帶寬不為零時(shí),將所述鏈路的剩余帶寬分配給帶寬未滿足需求的虛擬機(jī)對(duì);
當(dāng)所述鏈路上處于活躍態(tài)的虛擬機(jī)對(duì)的數(shù)量與帶寬需求已經(jīng)滿足的虛擬機(jī)對(duì)的數(shù)量相同時(shí),停止帶寬分配的過程。
在本實(shí)施方式中,所述方法還包括:
為虛擬機(jī)對(duì)的每條鏈路維護(hù)一個(gè)事件池,其中,當(dāng)一條鏈路上有事件發(fā)生時(shí),發(fā)生事件的鏈路的舊帶寬分配處于非公平狀態(tài);
在發(fā)生事件的鏈路上重新進(jìn)行帶寬分配。
在本實(shí)施方式中,在發(fā)生事件的鏈路上重新進(jìn)行帶寬分配具體包括:
針對(duì)所述鏈路上發(fā)生的事件類型,對(duì)所述鏈路上發(fā)生的事件進(jìn)行預(yù)處理;
采用預(yù)設(shè)動(dòng)態(tài)帶寬分配算法在已選的鏈路上進(jìn)行帶寬分配;
根據(jù)各個(gè)虛擬機(jī)對(duì)的帶寬分配情況,判定是否生成與所述虛擬機(jī)對(duì)相關(guān)的帶寬分配事件,以及確定生成的事件的類型。
在本實(shí)施方式中,所述帶寬分配模塊包括鏈路管理子模塊和虛擬機(jī)管理子模塊;相應(yīng)地,根據(jù)各個(gè)虛擬機(jī)對(duì)的帶寬分配情況,判定是否生成與所述虛擬機(jī)對(duì)相關(guān)的帶寬分配事件,以及確定生成的事件的類型具體包括:
判斷所述虛擬機(jī)管理子模塊是否需要關(guān)于虛擬機(jī)對(duì)的帶寬分配應(yīng)答,如果需要?jiǎng)t生成Rate-reply-v事件,并將所述Rate-reply-v事件返回至所述虛擬機(jī)管理子模塊;
重新進(jìn)行帶寬分配的虛擬機(jī)對(duì)獲得的新帶寬是否大于之前分配的舊帶寬,如果是,則生成Rate-increase-v事件,并將所述Rate-increase-v事件返回所述虛擬機(jī)管理子模塊;
判斷所述新帶寬是否小于所述舊帶寬,如果是,則生成Rate-decrease-v事件,并將所述Rate-decrease-v事件返回所述虛擬機(jī)管理子模塊;
其中,所述Rate-reply-v事件、Rate-increase-v事件以及Rate-decrease-v事件為虛擬機(jī)對(duì)上預(yù)先定義的事件。
具體地,請(qǐng)參閱圖1,帶寬分配系統(tǒng)構(gòu)建在控制器上,系統(tǒng)主要包括三個(gè)模塊:帶寬分配模塊,虛擬機(jī)監(jiān)控模塊和速率控制模塊。其中,虛擬機(jī)監(jiān)控模塊監(jiān)測(cè)網(wǎng)絡(luò)中各虛擬機(jī)對(duì)的狀態(tài),帶寬分配模塊負(fù)責(zé)為各個(gè)虛擬機(jī)對(duì)計(jì)算公平的帶寬分配,而速率控制模塊則根據(jù)帶寬分配模塊計(jì)算的帶寬來控制各虛擬機(jī)對(duì)的發(fā)送速率。在本實(shí)施方式中采用分布式帶寬分配方案,帶寬分配系統(tǒng)由多個(gè)子系統(tǒng)構(gòu)成,分別安裝在不同的控制器上,這樣可以提高系統(tǒng)的可擴(kuò)展性和帶寬分配效率。
請(qǐng)參閱圖2。一個(gè)虛擬機(jī)對(duì)的數(shù)據(jù)流會(huì)經(jīng)過若干個(gè)OpenFlow交換機(jī),在每個(gè)交換機(jī)上為該虛擬機(jī)建立了一個(gè)流表項(xiàng)。每個(gè)流表項(xiàng)的匹配字段為源IP和目的IP,屬于一個(gè)虛擬機(jī)對(duì)的所有數(shù)據(jù)流都會(huì)匹配到同一個(gè)流表項(xiàng)上,交換機(jī)按照匹配字段轉(zhuǎn)發(fā)數(shù)據(jù)包。每個(gè)流表項(xiàng)會(huì)連接一個(gè)meter表項(xiàng),用于限制虛擬機(jī)對(duì)的數(shù)據(jù)發(fā)送速率。
請(qǐng)參閱圖3,虛擬機(jī)監(jiān)控模塊采用sflow技術(shù)來監(jiān)測(cè)虛擬機(jī)對(duì)的狀態(tài),在每個(gè)交換機(jī)中配置一個(gè)sflow代理,在監(jiān)控模塊中配置一個(gè)sflow收集器。Sflow代理以預(yù)設(shè)的頻率(如1/100)對(duì)數(shù)據(jù)包隨機(jī)采樣,并將采樣的數(shù)據(jù)包頭發(fā)送到sflow收集器。Sflow收集器根據(jù)收到的數(shù)據(jù)包頭,可以計(jì)算出各虛擬機(jī)對(duì)的數(shù)據(jù)發(fā)送速率。當(dāng)一個(gè)虛擬機(jī)對(duì)的數(shù)據(jù)發(fā)送速率超過一個(gè)閾值,就表明虛擬機(jī)對(duì)的狀態(tài)為活躍狀態(tài),否則為非活躍狀態(tài)。當(dāng)有虛擬機(jī)對(duì)的狀態(tài)發(fā)生變化,虛擬機(jī)監(jiān)控模塊會(huì)通知帶寬分配模塊。
請(qǐng)參閱圖4,速率控制模塊通過設(shè)置交換機(jī)的meter表項(xiàng)來控制虛擬機(jī)對(duì)的發(fā)送速率。當(dāng)帶寬分配模塊為虛擬機(jī)對(duì)分配的帶寬發(fā)生變化時(shí),速率控制器就會(huì)更改相應(yīng)交換機(jī)的meter表項(xiàng)。我們?cè)谔摂M機(jī)對(duì)的第一跳交換機(jī)設(shè)置它的meter表項(xiàng),meter表項(xiàng)有一個(gè)速率參數(shù),當(dāng)虛擬機(jī)對(duì)的發(fā)送速率超過這個(gè)速率參數(shù),它就會(huì)將超過的數(shù)據(jù)丟棄。
請(qǐng)參閱圖5,寬帶分配模塊負(fù)責(zé)為活躍的虛擬機(jī)對(duì)分配帶寬。它包括兩個(gè)子模塊:鏈路管理子模塊和虛擬機(jī)管理子模塊。鏈路管理子模塊負(fù)責(zé)在鏈路上進(jìn)行帶寬分配,而虛擬機(jī)管理子模塊負(fù)責(zé)管理虛擬機(jī)對(duì)的信息,并在各鏈路上同步帶寬分配信息。
虛擬機(jī)管理子模塊和鏈路管理子模塊都是基于事件進(jìn)行工作的。發(fā)生在虛擬機(jī)對(duì)上的事件共有五種:Flow-start-v、Flow-end-v、Rate-increase-v、Rate-decrease-v、Rate-reply-v。其中,前兩種是虛擬機(jī)監(jiān)控模塊發(fā)送的虛擬機(jī)對(duì)狀態(tài)變化事件,后兩種是鏈路管理子模塊發(fā)送的帶寬分配事件。發(fā)生在鏈路上的事件有4種:Flow-start-l、Flow-end-l、Rate-increase-l、Rate-decrease-l。當(dāng)鏈路發(fā)生這些事件后,它們的狀態(tài)會(huì)變?yōu)榉枪綘顟B(tài),需要重新進(jìn)行帶寬分配。
請(qǐng)參閱圖6,鏈路管理子模塊為每一條鏈路維護(hù)了一個(gè)事件池,發(fā)生在這條鏈路的事件都會(huì)放到它的事件池中。當(dāng)一條鏈路的事件池不為空時(shí),這條鏈路的帶寬分配就處于非公平狀態(tài)。鏈路管理子模塊有多個(gè)woker,一個(gè)worker每次選擇一條處于非公平狀態(tài)的鏈路,對(duì)鏈路重新進(jìn)行帶寬分配,并生成帶寬分配時(shí)間發(fā)送給虛擬機(jī)管理子模塊。
請(qǐng)參閱圖7,該worker每次選擇一個(gè)處于非公平狀態(tài)的鏈路進(jìn)行帶寬分配,工作流程包括以下步驟:
1)對(duì)發(fā)生在該鏈路上的事件進(jìn)行預(yù)處理。
2)采用基于鏈路最大-最小公平的動(dòng)態(tài)帶寬分配算法在已選的鏈路上進(jìn)行帶寬分配。
3)根據(jù)各個(gè)虛擬機(jī)對(duì)的帶寬分配情況,決定是否生成關(guān)于該虛擬機(jī)對(duì)的帶寬分配事件,以及生成何種類型的事件,并將生成的事件交給虛擬機(jī)管理子模塊。
具體的,步驟1)對(duì)發(fā)生在該鏈路上的事件進(jìn)行預(yù)處理,下面是這四種事件的預(yù)處理方式:
11)Flow-start-l事件,在引發(fā)此事件的虛擬機(jī)對(duì)上設(shè)置待回復(fù)標(biāo)志,當(dāng)帶寬分配完成后,生成Rate-reply-v事件。在為該虛擬機(jī)分配帶寬時(shí),不存在帶寬上限r(nóng)bot。
12)Flow-end-l事件,在進(jìn)行帶寬分配時(shí),不再為產(chǎn)生該事件的虛擬機(jī)對(duì)分配帶寬。
13)Rate-increase-l事件,在引發(fā)此事件的虛擬機(jī)對(duì)上設(shè)置待回復(fù)標(biāo)志,當(dāng)帶寬分配完成后,生成Rate-reply-v事件。在為該虛擬機(jī)對(duì)分配帶寬時(shí),它的帶寬上限是Rate-increase-l事件附帶的帶寬rbot。
14)Rate-decrease-l事件,在為產(chǎn)生該事件的虛擬機(jī)對(duì)分配帶寬時(shí),它的帶寬上限是Rate-decrease-l附帶的帶寬rbot。
請(qǐng)參閱圖8,步驟2)中帶寬分配算法主要包括以下步驟:
21)初始化鏈路的剩余帶寬Rl=Cl。
22)計(jì)算出鏈路l上還未滿足的活躍虛擬機(jī)對(duì)的權(quán)重和,其中,Γ表示鏈路l上的活躍虛擬機(jī)對(duì),Φ表示帶寬需求已經(jīng)得到滿足的虛擬機(jī)對(duì)集合。如果Φ=Γ,表明所有虛擬機(jī)對(duì)都得到滿足,則算法結(jié)束。
23)計(jì)算鏈路的單位權(quán)重剩余帶寬δ=Rl/wsum。
24)根據(jù)各虛擬機(jī)對(duì)的權(quán)重來增加它們的帶寬,對(duì)于每一個(gè)未滿足的活躍虛擬機(jī)對(duì)i,增加它的帶寬
25)對(duì)于每個(gè)虛擬機(jī)對(duì)i,如果它有一個(gè)帶寬上限而且步驟24)為它分配的新帶寬大于那么要將設(shè)置為并且收回多出的帶寬,添加到鏈路的剩余帶寬中然后將虛擬機(jī)對(duì)i加入到需求滿足的虛擬機(jī)對(duì)集合Φ中。而如果虛擬機(jī)對(duì)i并沒有上限,則不做處理。
26)經(jīng)過步驟25),如果鏈路的剩余帶寬Rl不等于零,那么需要將Rl分配給仍未滿足的虛擬機(jī)對(duì),跳回步驟22);否則,算法結(jié)束。
請(qǐng)參閱圖9,對(duì)于每個(gè)虛擬機(jī)對(duì),處理過程主要包括以下步驟:
31)虛擬機(jī)管理子模塊是否需要關(guān)于虛擬機(jī)對(duì)i的帶寬分配應(yīng)答,如果需要?jiǎng)t生成Rate-reply-v事件,并返回。
32)新分配中虛擬機(jī)對(duì)i獲得的帶寬是否大于舊分配中虛擬機(jī)對(duì)i獲得的帶寬如果是,則生成Rate-increase-v事件,并返回。
33)是否小于如果是,則生成Rate-decrease-v事件。返回。
請(qǐng)參閱圖10。虛擬機(jī)管理子模塊有三個(gè)功能,一是維護(hù)虛擬機(jī)對(duì)的信息,包括各虛擬機(jī)對(duì)的狀態(tài),各虛擬機(jī)對(duì)的通信路徑包括的鏈路,以及它們當(dāng)前在各鏈路上分別獲得的帶寬;二是當(dāng)有虛擬機(jī)的狀態(tài)發(fā)生變化,通知鏈路管理子模塊;三是同步各鏈路對(duì)每個(gè)虛擬機(jī)對(duì)的帶寬分配。其中后面兩個(gè)任務(wù),是通過事件處理例程來實(shí)現(xiàn)的。發(fā)生在虛擬對(duì)上的事件共有5種:Flow-start-v、Flow-end-v、Rate-increase-v、Rate-decrease-v、Rate-reply-v。其中,前2種事件是由虛擬機(jī)監(jiān)控模塊引起的,后3種是由鏈路管模塊引起的。下面詳細(xì)介紹這5種事件產(chǎn)生的原因及處理方法:
1)Flow-start-v事件,該事件由虛擬機(jī)監(jiān)控模塊產(chǎn)生的,它檢測(cè)到一個(gè)虛擬機(jī)對(duì)的狀態(tài)變?yōu)榛钴S狀態(tài)。虛擬機(jī)管理子模塊會(huì)將Flow-start-l事件放入該虛擬機(jī)對(duì)的3條鏈路的事件池中,請(qǐng)求鏈路管理子模塊為該虛擬機(jī)對(duì)分配帶寬,見圖10(a)。
2)Flow-end-v事件,該事件也是有虛擬機(jī)監(jiān)控模塊產(chǎn)生的,它檢測(cè)到一個(gè)虛擬機(jī)對(duì)的狀態(tài)變?yōu)榉腔钴S狀態(tài)。虛擬機(jī)管理子模塊會(huì)將Flow-end-l事件放入該虛擬機(jī)對(duì)的3條鏈路的事件池中,請(qǐng)求鏈路管理子模塊為該虛擬機(jī)對(duì)分配帶寬,見圖10(b)。
3)Rate-increase-v事件,當(dāng)虛擬機(jī)對(duì)的瓶頸鏈路在一次帶寬分配中可以為它分配更多的帶寬時(shí),會(huì)產(chǎn)生該事件。虛擬機(jī)管理子模塊會(huì)將Rate-increase-l事件放入其他非瓶頸鏈路的事件池中,請(qǐng)求各鏈路為該虛擬機(jī)對(duì)增加帶寬,見圖10(c)。需要注意的是,部分非瓶頸鏈路可能并不能增加那么多的帶寬,那么能增加的帶寬最少的鏈路會(huì)成為該虛擬機(jī)對(duì)的新瓶頸鏈路。
4)Rate-decrease-v事件,當(dāng)虛擬機(jī)對(duì)的一條鏈路在一次帶寬分配后可以為它分配的帶寬減少是,會(huì)產(chǎn)生該事件。虛擬機(jī)管理子模塊會(huì)將Rate-decrease-l事件放入其他鏈路的事件池中,其他鏈路會(huì)收回減少的帶寬,見圖10(d)。這時(shí),該鏈路會(huì)成為虛擬機(jī)對(duì)的新瓶頸鏈路。
5)Rate-reply-v事件,對(duì)于發(fā)生了上面的事件1)和事件3)的虛擬機(jī)對(duì)來說,都需要各鏈路回復(fù)它們?yōu)樵撎摂M機(jī)對(duì)分配的帶寬。當(dāng)一個(gè)虛擬機(jī)對(duì)收到所有的回復(fù)后,它會(huì)選擇最小的帶寬作為發(fā)送帶寬,并向其他鏈路的事件池中放置Rate-decrease-l事件。
由上可見,本發(fā)明利用虛擬機(jī)監(jiān)控模塊維護(hù)的網(wǎng)絡(luò)中各虛擬機(jī)對(duì)的狀態(tài)視圖,由帶寬分配模塊采用基于鏈路最大-最小公平的動(dòng)態(tài)帶寬分配方法在處于非公平狀態(tài)的鏈路上進(jìn)行帶寬分配,并通過設(shè)置交換機(jī)上各虛擬機(jī)對(duì)的meter表項(xiàng)的速率參數(shù)來控制它們的發(fā)送速率。為了提高帶寬分配的效率,帶寬分配模塊每次只處理一條鏈路上的帶寬分配。因?yàn)閹挿峙淠K知道一條鏈路上的所有信息,包括鏈路存在哪些活躍虛擬機(jī)對(duì),活躍虛擬機(jī)對(duì)的權(quán)重,活躍虛擬機(jī)對(duì)的瓶頸鏈路帶寬信息,因此,它可以快速準(zhǔn)確計(jì)算出各虛擬機(jī)對(duì)的公平帶寬分配。同時(shí),上述帶寬分配方法是分布式的,可以有多個(gè)工作進(jìn)程同時(shí)在不同的鏈路上進(jìn)行帶寬分配,這極大的提高了帶寬分配的效率。另外,帶寬分配模塊包括鏈路管理子模塊和虛擬機(jī)管理子模塊,它們協(xié)作完成不同鏈路之間的帶寬分配信息同步,從而保證了整個(gè)網(wǎng)絡(luò)帶寬分配的公平性,提高了網(wǎng)絡(luò)的帶寬利用率。
上面對(duì)本申請(qǐng)的各種實(shí)施方式的描述以描述的目的提供給本領(lǐng)域技術(shù)人員。其不旨在是窮舉的、或者不旨在將本發(fā)明限制于單個(gè)公開的實(shí)施方式。如上所述,本申請(qǐng)的各種替代和變化對(duì)于上述技術(shù)所屬領(lǐng)域技術(shù)人員而言將是顯而易見的。因此,雖然已經(jīng)具體討論了一些另選的實(shí)施方式,但是其它實(shí)施方式將是顯而易見的,或者本領(lǐng)域技術(shù)人員相對(duì)容易得出。本申請(qǐng)旨在包括在此已經(jīng)討論過的本發(fā)明的所有替代、修改、和變化,以及落在上述申請(qǐng)的精神和范圍內(nèi)的其它實(shí)施方式。
本說明書中的各個(gè)實(shí)施方式均采用遞進(jìn)的方式描述,各個(gè)實(shí)施方式之間相同相似的部分互相參見即可,每個(gè)實(shí)施方式重點(diǎn)說明的都是與其他實(shí)施方式的不同之處。
雖然通過實(shí)施方式描繪了本申請(qǐng),本領(lǐng)域普通技術(shù)人員知道,本申請(qǐng)有許多變形和變化而不脫離本申請(qǐng)的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本申請(qǐng)的精神。