Scheduling and Traffic Shaping 学习笔记(一)

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接收到的流量基本一致。

posted @ 2024-03-31 14:54  hello_oldman  阅读(49)  评论(0编辑  收藏  举报