日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
數(shù)據(jù)中心兩種常用流量模型運用mininet的實現(xiàn)

編者按:在網(wǎng)絡(luò)性能評估中一個巨大的挑戰(zhàn)就是如何生成真實的網(wǎng)絡(luò)流量,還好可以通過程序來創(chuàng)造人工的網(wǎng)絡(luò)流量,通過建立測試環(huán)境來模擬真實的狀況。本文就以數(shù)據(jù)中心網(wǎng)絡(luò)為目標(biāo)場景,來在mininet仿真環(huán)境中盡可能地還原數(shù)據(jù)中心內(nèi)部的真實流量情況。目前有兩種常用的流量模型:

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)埇橋區(qū)免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

  • 隨機模型:主機向在網(wǎng)絡(luò)中的另一任意主機以等概率發(fā)送數(shù)據(jù)包
  • 概率模型:在網(wǎng)絡(luò)中,編號為m的主機分別以概率Pt 、Pa 、Pc 、向主機編號為(m+i)、(m+j)、(m+k)的主機發(fā)送數(shù)據(jù)包

我們使用mininet中的iperf工具在網(wǎng)絡(luò)中生成UDP流量,iperf客戶端傳送數(shù)據(jù)流到iperf的服務(wù)端,由服務(wù)端接收并記錄相關(guān)信 息。mininet自帶控制臺可供使用的命令雖然已經(jīng)比較豐富,但卻并未給出較為明確的API接口來支持用戶自定義命令。在諸如數(shù)據(jù)中心這樣復(fù)雜、網(wǎng)絡(luò)節(jié) 點較多的仿真環(huán)境中做一些批處理的工作就需要非常大的,比如通過iperf在所有主機之間發(fā)生流量。所以我們需要將自定義命令添加到mininet中,在 mininet中完成新命令的拓展。

一、 mininet功能拓展

在mininet中進行功能拓展主要分為3步:
1. 修改mininet/net.py: net模塊實現(xiàn)Mininet類,是仿真平臺mininet的主體類,該類完成節(jié)點添加配置、網(wǎng)絡(luò)基本功能和一些選項功能的實現(xiàn)。我們需要將我們自定義的函數(shù)定義在該類中。

 
 
  1. class Mininet(object):
    def function(self,**kwargs):
    #function code

2. 修改mininet/cli.py: cli模塊定義了CLI類,為米你呢他提供命令行接口,用于解析用戶輸入的命令,之前定義的自定義命令需要在CLI類中通過注冊函數(shù)注冊這條自定義命令。

 
 
  1. class CLI(Cmd):
    def do_function(self,line):
    #do_function code

完成命令注冊與綁定。

3. 修改bin/mn: 在完成命令注冊與綁定后,需要在mininet執(zhí)行解釋器中注冊命令與對應(yīng)執(zhí)行函數(shù)的映射關(guān)系。

 
 
  1. ALTSPELLING = {'pingall':'pingAll',
    'pingpair':'pingPair',
    'iperfudp':'iperfUdp',
    'function':'function'}

net.py和cli.py均在mininet/mininet目錄,mn文件在在mininet/bin目錄中。在代碼修改完成后需要重新編譯安裝一遍mininet,即運行:

 
 
  1. $~/mininet/util/install.sh -n

二、 兩種流量模型在mininet中的實現(xiàn)

2.1 隨機模型

任意一臺主機以等概率隨機地向另外一臺主機發(fā)起一條UDP數(shù)據(jù)流。

修改mininet/net.py

首先,先在兩個主機之間進行iperf測試,并且在server端記錄,實現(xiàn)iperf_single函數(shù):

 
 
  1. def iperf_single( self,hosts=None, udpBw='10M', period=60, port=5001):
            """Run iperf between two hosts using UDP.
               hosts: list of hosts; if None, uses opposite hosts
               returns: results two-element array of server and client speeds"""
            if not hosts:
                return
            else:
                assert len( hosts ) == 2
            client, server = hosts
            filename = client.name[1:] + '.out'
            output( '*** Iperf: testing bandwidth between ' )
            output( "%s and %s\n" % ( client.name, server.name ) )
            iperfArgs = 'iperf -u '
            bwArgs = '-b ' + udpBw + ' '
            print "***start server***"
            server.cmd( iperfArgs + '-s -i 1' + ' > /home/zg/log/' + filename + '&')
            print "***start client***"
            client.cmd(
                iperfArgs + '-t '+ str(period) + ' -c ' + server.IP() + ' ' + bwArgs
                +' > /home/zg/log/' + 'client' + filename +'&')

著為mininet添加自定義命令iperfmulti,依次為每一臺主機隨機選擇另一臺主機作為iperf的服務(wù)器端,通過調(diào)用 iperf_single,自身以客戶端身份按照指定參數(shù)發(fā)送UDP流,服務(wù)器生成的報告以重定向的方式輸出到文件中,使用iperfmulti命令,主 機隨機地向另一臺主機發(fā)起一條恒定帶寬的UDP數(shù)據(jù)流。

 
 
  1. def iperfMulti(self, bw, period=60):
        base_port = 5001
        server_list = []
        client_list = [h for h in self.hosts]
        host_list = []
        host_list = [h for h in self.hosts]
     
        cli_outs = []
        ser_outs = []
     
        _len = len(host_list)
        for i in xrange(0, _len):
            client = host_list[i]
            server = client
            while( server == client ):
                server = random.choice(host_list)
            server_list.append(server)
            self.iperf_single(hosts = [client, server], udpBw=bw, period= period, port=base_port)
            sleep(.05)
            base_port += 1
     
        sleep(period)
        print "test has done"

修改mininet/cli.py

 
 
  1. def do_iperfmulti( self, line ):
        """Multi iperf UDP test between nodes"""
        args = line.split()
        if len(args) == 1:
            udpBw = args[ 0 ]
            self.mn.iperfMulti(udpBw)
        elif len(args) == 2:
            udpBw = args[ 0 ]
            period = args[ 1 ]
            err = False
            self.mn.iperfMulti(udpBw, float(period))
        else:
            error('invalid number of args: iperfmulti udpBw period\n' +
                   'udpBw examples: 1M 120\n')

修改bin/mn

在mininet/bin目錄下修改mn文件,將iperfpb加入到對應(yīng)的列表中。

 
 
  1. ALTSPELLING = { 'pingall': 'pingAll',
                'pingpair': 'pingPair',
                'iperfudp': 'iperfUdp',
                'iperfUDP': 'iperfUdp',
                'iperfpb':'iperfPb' }

***,進入mininet/util目錄,重新編譯安裝mininet

 
 
  1. $~/mininet/util/install.sh -n

重啟mininet,輸入iperf,可用table補全iperfpb,從而可使用iperfpb進行流量隨機模型的測試。

#p#

2.2 概率模型

為mininet添加自定義命令iperfpb,依次為每一臺主機(編號為m)分別以概率Pt 、Pa 、Pc 向主機編號為(m+i)、(m+j)、(m+k)的主機發(fā)送數(shù)據(jù)包,通過調(diào)用iperf_single,自身以客戶端身份按照指定參數(shù)發(fā)送UDP流,服務(wù) 器生成的報告以重定向的方式輸出到文件中,使用iperfpb命令,主機按概率向其他被選擇的主機發(fā)起一條恒定帶寬的UDP數(shù)據(jù)流。

概率選擇函數(shù)

為完成以一定概率選擇主機,我們需要實現(xiàn)一個概率選擇函數(shù)randompick,這個函數(shù)可用于以不同的概率從一個列表中隨機地選擇一些元素。下面為randompick的實現(xiàn)過程:

 
 
  1. def random_pick( self, _list, probabilities):  
        x = random.uniform(0,1)  
        p = None
        cumulative_probability = 0.0  
        for item, item_probability in zip(_list, probabilities):  
            cumulative_probability += item_probability
            p = item
            if x < cumulative_probability:break
        return p

修改mininet/net.py

 
 
  1. base_port = 5001
  2. server_list = []
  3. client_list = []
  4. client_list = [h for h in self.hosts]
  5. cli_outs = []
  6. ser_outs = []
  7. host_list = []
  8. host_list = [h for h in self.hosts]
  9. pc = 1 - pt - pa
  10. p_list = [pt,pa,pc]
  11. _len = len(self.hosts)
  12. for key in xrange(_len):
  13. client = host_list[key]
  14. access_host = [host_list[(key+i)%_len],host_list[(key+j)%_len],host_list[(key+k)%_len]]
  15. server = self.random_pick(access_host,p_list)
  16. server_list.append(server)
  17. self.iperf_single(hosts = [client, server], udpBw=bw, port=base_port)
  18. sleep(.05)
  19. sleep(period)
  20. print "test has done"

修改mininet/cli.py

 
 
  1. def do_iperfpb(self, line):
    """Multi iperf UDP test with probablity"""
  2. args = line.split()
  3. if len(args) == 1:
  4. udpBw = args[ 0 ]
  5. self.mn.iperfMulti(udpBw)
  6. elif len(args) == 2:
  7. udpBw = args[ 0 ]
  8. period = args[ 1 ]
  9. err = False
  10. self.mn.iperfPb(udpBw, float(period))
  11. else:
  12. error('invalid number of args: iperfmulti udpBw period\n' +
  13. 'udpBw examples: 1M 120\n')

修改bin/mn

在mininet/bin目錄下修改mn文件,將iperfpb加入到對應(yīng)的列表中。

 
 
  1. ALTSPELLING = { 'pingall': 'pingAll',
  2. 'pingpair': 'pingPair',
  3. 'iperfudp': 'iperfUdp',
  4. 'iperfUDP': 'iperfUdp',

***,進入mininet/util目錄,重新編譯安裝mininet:

 
 
  1. $~/mininet/util/install.sh -n

重啟mininet,輸入iperf,可用table補全iperfpb,從而可使用iperfpb進行流量的概率模型的測試。

作者簡介:

張歌,2014/09-至今,北京郵電大學(xué)網(wǎng)絡(luò)技術(shù)研究院 網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室攻讀碩士研究生。


網(wǎng)頁名稱:數(shù)據(jù)中心兩種常用流量模型運用mininet的實現(xiàn)
當(dāng)前地址:http://www.5511xx.com/article/ccedsps.html