Mininet系列實驗(五):Mininet設置帶寬之簡單性能測試

1.實驗目的

該實驗通過Mininet學習python自定義拓撲實現,可在python腳本文件中設計任意想要的拓撲,簡單方便,並通過設置交換機和主機之間鏈路的帶寬、延遲及丟包率,測試主機之間的性能。在實驗過程中,可以瞭解以下方面的知識:

  • Python腳本實現自定義拓撲
  • 設置鏈路的帶寬、延遲及丟包率
  • iperf測試主機間的帶寬性能

2.實驗原理

進一步研究SDN架構的特性,應用創新提供可定義的網絡平臺,在基於OpenFlow的mininet仿真軟件的基礎上,實現SDN架構的仿真。基於Mininet仿真軟件構造,模擬SND網絡架構中的交換機以及主機,提出的仿真方法和搭建的平臺可爲SDN架構的研究提供有效的技術支撐。Mininet 是一個輕量級軟件定義網絡和測試平臺;它採用輕量級的虛擬化技術使一個單一的系統看起來像一個完整的網絡運行想過的內核系統和用戶代碼,也可簡單理解爲 SDN 網絡系統中的一種基於進程虛擬化平臺,它支持 OpenFlow、OpenvSwith 等各種協議,Mininet 也可以模擬一個完整的網絡主機、鏈接和交換機在同一臺計算機上且有助於互動開發、測試和演示,尤其是那些使用 OpenFlow 和 SDN 技術;同時也可將此進程虛擬化的平臺下代碼遷移到真實的環境中。

3.實驗內容

實現一個單個交換機的拓撲,添加一個交換機,和N個主機到網絡中。交換機和主機之間的每個鏈路能夠設置帶寬、延遲時間、以及丟包率。創建一個包含一個交換機和四個主機的網絡,使用iperf測試主機之間的帶寬。
拓撲圖如下所示:

Mininet腳本設置帶寬實現簡單性能測試 圖1

1.在mininet/custom下創建並編輯checkmininet.py

#!/usr/bin/python
# 調用mininet的模塊
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
# 創建一個基於Topo類的“單交換機拓撲”類
class SingleSwitchTopo(Topo):
    "Single switch connected to n hosts."
    # 定義構造函數(其中**opts代表的是關於網絡一些選項的字典)
    def __init__(self, n=2, **opts):
        # 調用父類函數
        Topo.__init__(self, **opts)
        # 添加s1交換機
        switch = self.addSwitch('s1')
        for h in range(n):
            #每個主機佔50/n%的CPU
            host = self.addHost('h%s' % (h + 1), cpu=.5/n)
            #10 Mbps, 5ms 延遲, 0% 丟包, 1000 字節的大小
            self.addLink(host, switch, bw=10, delay='5ms', loss=0, max_queue_size=1000, use_htb=True)
 
def perfTest():
    "Create network and run simple performance test"
    # 創建4個主機的單交換機拓撲
    topo = SingleSwitchTopo(n=4)
    # 調用Mininet()的函數設置拓撲,主機,以及鏈路
    net = Mininet(topo=topo,host=CPULimitedHost, link=TCLink)
    net.start()
    print "Dumping host connections"
    dumpNodeConnections(net.hosts)
    print "Testing network connectivity"
    net.pingAll()
    print "Testing bandwidth between h1 and h4"
    h1, h4 = net.get('h1', 'h4')
    net.iperf((h1, h4))
    net.stop()
 
if __name__=='__main__':
    setLogLevel('info')
    perfTest()

這是效果圖:

總結:

1.更能看懂腳本了

2.瞭解了帶寬性能的測試方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章