Scheduling and Traffic Shaping 學習筆記(一)

hello_oldman發表於2024-03-31

Time-Aware Shaping

參考:https://inet.omnetpp.org/docs/showcases/tsn/trafficshaping/timeawareshaper/doc/index.html

目標:

  時間感知整形的工作原理是將時間劃分為固定的間隔或視窗,並根據幀的優先順序在這些視窗內排程幀的傳輸。透過在單獨的視窗中傳送優先順序較高的幀來給予優先順序,而在剩餘時間中傳送優先順序較低的幀。

建模:

  1.概覽

  時間感知整形(TAS)及其實現,即時間感知整形器,利用分時多重進接(TDMA)方案在其自己分配的傳輸時間視窗中傳送不同優先順序的業務流。這使得延遲有界,因為較低優先順序的幀無法容納較高優先順序的幀。

  note:時間感知整形可以與802.1Qbu幀搶佔相結合。這可以提高頻寬利用率,因為原本不適合可用時間視窗的幀可以分段傳送。

  note:gate排程可能是一個複雜的問題,尤其是在較大的網路中。在INET中,各種閘門排程配置器可以自動完成這項任務。

  在INET中,時間感知整形由Iee8021qTimeAwareShaper模組實現。這是一個佇列模組,可以配置為取代模組化乙太網介面(如LayeredEthernetInterface)的MAC子模組中的預設簡單佇列。

  Ieee8021qTimeAwareShaper實現如下:

  note:關於整形器中的交通流的一些注意事項:

1)幀由分類器根據某種機制(預設為PCP)進行分類,併傳送到其中一個佇列

2)閘門根據配置的時間表開啟和關閉

3)當從時間感知整形器中提取分組時,末端的優先順序排程器透過開啟的門從第一個可用佇列中提取幀。

4)gate用顏色指示其狀態(綠色表示開啟,紅色表示關閉)

透過將hasEgressTrafficShaping引數設定為true,可以將時間感知整形功能新增到TsnSwitch。此設定將交換機中所有乙太網介面中的預設佇列替換為Iee8021qTimeAwareShaper

2. 視覺化門時間表

  條形圖的橫軸為時間,當前時間由中心的垂直虛線表示。閘門明細表顯示為條形圖上的彩色編碼塊。綠色方塊表示開啟,紅色方塊表示關閉的門狀態。塊隨著模擬時間向右移動,因此當前時間在中心,過去在左側,未來在右側。因此,視覺化顯示了閘門當前是開啟還是關閉,以及它將來何時會改變狀態。

  可以透過將視覺化工具的displayGates引數設定為true來啟用視覺化。預設情況下,它顯示網路中的所有門,但可以使用gateFilter引數縮小範圍。例如,下圖顯示了同一介面中的兩個門:

  3.配置

  拓撲圖如下:

  在這個模擬中,我們希望關注時間感知整形器是如何工作的,並避免網路其他部分產生任何意外的流量整形影響(例如流量受到鏈路頻寬的限制)。我們的目標是流量只在整形器中更改,而在從源應用程式到目標應用程式的其他地方相對不變。

  客戶端中的兩個應用程式建立兩個不同優先順序的資料流:影片和盡力而為。這兩個類別的資料速率分別在40Mbps和20Mbps的平均標稱值附近波動。請注意,此流量不會使連結飽和。此外,有時流的資料速率在給定的時間段內可以更高,因為它是由具有上述平均值的分佈指定的。這個多餘的流量被保持在整形器中,以將流量限制在標稱值:

  

# client applications
*.client.numApps = 2
*.client.app[*].typename = "UdpSourceApp"
*.client.app[0].display-name = "best effort"
*.client.app[1].display-name = "video"
*.client.app[*].io.destAddress = "server"
*.client.app[0].io.destPort = 1000
*.client.app[1].io.destPort = 1001
*.client.app[*].source.packetLength = 1000B - 54B # 54B = 8B (UDP) + 20B (IP) + 14B (ETH MAC) + 4B (ETH FCS) + 8B (ETH PHY)
*.client.app[0].source.productionInterval = exponential(200us) # ~40Mbps
*.client.app[1].source.productionInterval = exponential(400us) # ~20Mbps

# server applications
*.server.numApps = 2
*.server.app[*].typename = "UdpSinkApp"
*.server.app[0].io.localPort = 1000
*.server.app[1].io.localPort = 1001

  注意:

*.client.app[*].source.packetLength = 1000B - 54B

  其中的54B是指傳輸層,網路層,鏈路層的包頭長度,留給應用層的就是1000B-54B的長度,保證整個分組長為1000B。

  我們為兩個UDP應用程式設定了不同的目的埠,以便以後可以透過目的埠將資料包分配給流。

  在客戶端中,我們希望將來自兩個應用程式的資料包分類為兩個不同的流量類別:盡力而為和影片。為此,我們在客戶端中使用流標識,根據目的埠將資料包分配給命名流(“盡力而為”和“影片”)。根據流名稱,我們使用流編碼,使用PCP編號(Priority Code Point,三位的優先順序值)將流分配給流量類別。

  透過將其hasOutgoingStreams引數設定為true,可以在TsnDevice中啟用流標識和流編碼功能。我們在客戶中這樣做:

# enable outgoing streams
*.client.hasOutgoingStreams = true

  此設定將StreamIdentifierLayer和StreamCoderLayer子模組新增到客戶端的橋接層:

  流識別符號根據過濾器表示式匹配資料包,並將請求標籤附加到匹配的資料包。請求標記包含指定流的名稱。我們配置流識別符號以根據目標UDP埠分配流:

# client stream identification
*.client.bridging.streamIdentifier.identifier.mapping = [{stream: "best effort", packetFilter: expr(udp.destPort == 1000)},
                                                         {stream: "video", packetFilter: expr(udp.destPort == 1001)}]

  流編碼器將802.1q標籤請求附加到分組。在這裡,我們可以配置如何對802.1q報頭中的各種流進行編碼,例如使用VLAN ID或PCP編號。我們將盡力而為流分配給PCP 0,將影片流分配給PCP4:

# client stream encoding
*.client.bridging.streamCoder.encoder.mapping = [{stream: "best effort", pcp: 0},
                                                 {stream: "video", pcp: 4}] 

  鏈路層中的Iee8021qProtocol模組向分組新增802.1q報頭,並根據請求標籤設定PCP欄位。

  流量整形發生在交換機的傳出網路介面中,兩個流都經過該介面。我們在交換機中啟用出口流量整形:

# enable egress traffic shaping
*.switch.hasEgressTrafficShaping = true

  此設定將預設佇列替換為交換機中所有介面的MAC層中的Iee8021qTimeAwareShaper模組。

  讓我們配置時間表。預設情況下,Iee8021qTimeAwareShaper有八個流量類,但我們只使用兩個。為了將整形器中的資料速率限制在40Mbps和20Mbps,我們配置時間表,使盡力而為的流量類別可以在40%的時間內傳輸,影片流量類別在20%的時間內傳送:

# time-aware traffic shaping
*.switch.eth[*].macLayer.queue.numTrafficClasses = 2
*.switch.eth[*].macLayer.queue.*[0].display-name = "best effort"
*.switch.eth[*].macLayer.queue.*[1].display-name = "video"
*.switch.eth[*].macLayer.queue.transmissionGate[0].offset = 0ms
*.switch.eth[*].macLayer.queue.transmissionGate[0].durations = [4ms, 6ms] # period is 10
*.switch.eth[*].macLayer.queue.transmissionGate[1].offset = 6ms
*.switch.eth[*].macLayer.queue.transmissionGate[1].durations = [2ms, 8ms]

  整形器將流量限制在標稱值以內。多餘的業務被臨時儲存在相應業務類別的MAC層子佇列中。

  4. 結果

  下圖顯示了一個門開一個門關的時間。(門0關閉而,門1開啟)

  4.1 data rate of client application and traffic shaper incoming traffic

  

  在流量整形器中,相同流的資料速率更高,因為測量包括協議報頭以及應用資料。這兩個流量類別是從客戶端混合傳送到交換機的,因此它們會相互影響(例如,盡力而為的幀可能必須等待影片幀完成傳輸)。

  4.2 the data rate of the incoming and outgoing traffic in the shaper

    可見,整形器將資料速率限制為指定值。

  4.3 sequence chart

  

   資料包由客戶端以隨機間隔傳送。然而,它們是由交換機根據配置的門排程轉發的(在第一個週期中,0-4ms:盡力而為,4-6ms:影片,6-10ms:關閉)。請注意,第一個週期中佇列中的資料包比第二個週期中的要少,因此交換機傳送的流量不會在第一個週期完全填滿傳送視窗。

  4.4 queue lengths of the traffic classes

  4.5 transmitting state and the gate states of the time-aware shaper

  下一個圖表顯示了時間感知整形器的傳輸狀態和門狀態。兩個門的開啟週期是背靠背的,發射器60%的時間處於活動狀態,總流量為60Mbps。請注意,傳輸狀態圖顯示為橙色,但狀態實際上在傳輸和不傳輸之間快速波動。

  4.6 the gate state of the transmission gates, the transmitting state of the outgoing network interface, and the queue lengths

  4.7 outgoing data rate of the traffic shaper, and the incoming data rate of the applications in the server

  

  TAS shaper出口流量和server接收到的流量基本一致。

相關文章