实例1:启用了QoS并使用了缺省参数
本例中的所有输出通过show int queueing int gig 1/1命令进行配置。该命令提供了输入调度的其它信息。但是本文仅说明输出调度,该输出被删节。
想一想如果QoS全面启用且几分钟后使用所有默认参数,会发生什么:
nelix#show queueing int gig 1/1
Interface GigabitEthernet1/1 queueing strategy: Weighted Round-Robin
Port QoS is enabled
Trust state: trust DSCP
Default cos is 0
Transmit queues [type = 1p2q2t]:
Queue Id Scheduling Num of thresholds
-----------------------------------------
1 WRR low 2
2 WRR high 2
3 Priority 1
WRR bandwidth ratios: 100[queue 1] 255[queue 2]
queue-limit ratios: 90[queue 1] 5[queue 2]
queue random-detect-max-thresholds
----------------------------------
1 40[1] 100[2]
2 40[1] 100[2]
queue thresh cos-map
---------------------------------------
1 1 0 1
1 2 2 3
2 1 4
2 2 6 7
3 1 5
Packets dropped on Transmit:
BPDU packets: 0
queue thresh dropped [cos-map]
---------------------------------------------------
1 1 149606424 [0 1 ]
1 2 0 [2 3 ]
2 1 16551394 [4 ]
2 2 4254446 [6 7 ]
3 1 0 [5 ]
从上面的输出可看出默认值包括:
队列1的WRR加权:100/(100+255)= 28%
队列2的WRR加权:255/(255+100)= 72%
缓冲共享:队列1得到90%,队列2得到5%,绝对优先队列得到5%
低优先级WRR队列中的大部分数据包被丢弃,但仍有一些因为双重阈值插入在高优先级WRR队列中。总共有(149606424 + 16551394 + 4254446)=
170412264个数据包被丢弃。这些丢弃的数据包按以下方式分布:
149606424/170412264 = 88%丢弃在队列1(CoS 0 和1的第一阈值数据包)
16551394/170412264 = 10%丢弃在队列1(CoS 4的第一阈值数据包)
4254446/170412264 = 2%丢弃在队列2(CoS 6或7的第二阈值数据包)
注意: 绝对优先队列中没有看到丢弃。
实例2:修改WRR加权
如前面的例子所示,队列2中的数据包仍然被丢弃。修改WRR加权向队列2提供更多带宽。现在队列1将清出4%的时间,队列2将清出96%的时间:
show run int gig 1/1
interface GigabitEthernet1/1
no ip address
wrr-queue bandwidth 10 255
mls qos trust dscp
switchport
switchport mode access
end
nelix#show queueing int gig 1/1
Interface GigabitEthernet1/1 queueing strategy: Weighted Round-Robin
Port QoS is enabled
Trust state: trust DSCP
Default cos is 0
Transmit queues [type = 1p2q2t]:
Queue Id Scheduling Num of thresholds
-----------------------------------------
1 WRR low 2
2 WRR high 2
3 Priority 1
WRR bandwidth ratios: 10[queue 1] 255[queue 2]
queue-limit ratios: 90[queue 1] 5[queue 2]
queue random-detect-max-thresholds
----------------------------------
1 40[1] 100[2]
2 40[1] 100[2]
queue thresh cos-map
---------------------------------------
1 1 0 1
1 2 2 3
2 1 4
2 2 6 7
3 1 5
Packets dropped on Transmit:
BPDU packets: 0
queue thresh dropped [cos-map]
---------------------------------------------------
1 1 2786205 [0 1 ]
1 2 0 [2 3 ]
2 1 11363 [4 ]
2 2 69 [6 7 ]
3 1 0 [5 ]
从以上输出可见,队列2丢弃的百分比现在大大减少。总共2797637的丢弃分布如下:
2786205/2797637 = 99.591%丢弃在队列1(CoS 0和1的数据包)
11363/2797637 = 0.408%丢弃在队列1(CoS 4的第一阈值数据包)
69/2797637 = 0.001%丢弃在队列2(CoS 6和7的第二阈值数据包)
使用各种WRR加权可以确保队列2得到更多QoS。
实例3:其它WRR加权修改
我们可对WRR加权作出更大的修改。在以下范例输出中,仅向队列1提供了0.39%的加权:
show run int gig 1/1
interface GigabitEthernet1/1
no ip address
wrr-queue bandwidth 1 255
mls qos trust dscp
switchport
switchport mode access
end
nelix#show queueing int gig 1/1
Interface GigabitEthernet1/1 queueing strategy: Weighted Round-Robin
Port QoS is enabled
Trust state: trust DSCP
Default cos is 0
Transmit queues [type = 1p2q2t]:
Queue Id Scheduling Num of thresholds
-----------------------------------------
1 WRR low 2
2 WRR high 2
3 Priority 1
WRR bandwidth ratios: 1[queue 1] 255[queue 2]
queue-limit ratios: 90[queue 1] 5[queue 2]
queue random-detect-max-thresholds
----------------------------------
1 40[1] 100[2]
2 40[1] 100[2]
queue thresh cos-map
---------------------------------------
1 1 0 1
1 2 2 3
2 1 4
2 2 6 7
3 1 5
Packets dropped on Transmit:
BPDU packets: 0
queue thresh dropped [cos-map]
---------------------------------------------------
1 1 2535315 [0 1 ]
1 2 0 [2 3 ]
2 1 705 [4 ]
2 2 73 [6 7 ]
3 1 0 [5 ]
即使增加了WRR加权,队列2中的数据包仍被丢弃。但是,并非很多数据包被丢弃。队列2中只有0.03%的丢包。
实例4:修改队列极限缓冲区分配
如实例2和3所示,尽管WRR百分比能确保不会出现如此多的丢弃,但在队列2中仍然有丢弃的数据包。在队列2中仍有第二阈值的数据包被丢弃。这说明,当我们到达设定为100%的第二阈值且发现队列饱和时,数据包仍被丢弃。
为了改善这个情况,对队列极限作出更改(分配给各队列的缓冲区大小)。在以下实例中,队列1的队列极限设定为70%,队列2为15%,绝对优先队列为15%:
show run gig 1/1
interface GigabitEthernet1/1
no ip address
wrr-queue bandwidth 1 255
wrr-queue queue-limit 70 15
mls qos trust dscp
switchport
switchport mode access
end
nelix#show queueing int gig 1/1
Interface GigabitEthernet1/1 queueing strategy: Weighted Round-Robin
Port QoS is enabled
Trust state: trust DSCP
Default cos is 0
Transmit queues [type = 1p2q2t]:
Queue Id Scheduling Num of thresholds
-----------------------------------------
1 WRR low 2
2 WRR high 2
3 Priority 1
WRR bandwidth ratios: 1[queue 1] 255[queue 2]
queue-limit ratios: 70[queue 1] 15[queue 2]
queue random-detect-max-thresholds
----------------------------------
1 40[1] 100[2]
2 40[1] 100[2]
queue thresh cos-map
---------------------------------------
1 1 0 1
1 2 2 3
2 1 4
2 2 6 7
3 1 5
Receive queues [type = 1p1q4t]:
Queue Id Scheduling Num of thresholds
-----------------------------------------
1 Standard 4
2 Priority 1
queue tail-drop-thresholds
--------------------------
1 100[1] 100[2] 100[3] 100[4]
queue thresh cos-map
---------------------------------------
1 1 0 1
1 2 2 3
1 3 4
1 4 6 7
2 1 5
Packets dropped on Transmit:
BPDU packets: 0
queue thresh dropped [cos-map]
---------------------------------------------------
1 1 154253046 [0 1 ]
1 2 0 [2 3 ]
2 1 0 [4 ]
2 2 0 [6 7 ]
3 1 0 [5 ]
现在,仅在队列1中存在丢弃情况。
采用输出调度减少延迟以及抖动
上述实例表明,实施输出调度的益处在于:万一输出端口出现超量预订,可以避免IP话音(VoIP)或者关键任务的话音丢弃。超量预订在正常网络中并不经常出现(特别是千兆链路上)。超量预订一般只在流量高峰期间发生或在特定短时期内流量突发的情况下发生。
即使没有任何超量预订,输出调度也能在端到端实施QoS的网络中提供极大的帮助。使用输出调度将有助于减少延迟及抖动。以下是输出调度如何帮助减少延迟和抖动的实例。
减少延迟
当数据包在等待传输时如果被“丢失”在各个交换机的缓冲区中,数据包的延迟会增加。例如,一个CoS为5的小型话音数据包在出现大量拥堵或者正在进行巨量文件传输时从端口发出。如果该输出端口不具有任何QoS,且假定该小型话音数据包的队列位于10个大型的1500字节数据包之后,您可以很容易地计算出发送10个大型数据包的千兆速度时间:
120微秒内发送(10 x 1500 x 8)= 120000位
如果该数据包在网络中穿行时需要通过八或九个交换机,则可能产生1毫秒的延迟时间。这只是对网络中通过交换机的输出队列延迟所进行的计算。
注意: 如果您需要让同样的10个大型数据包在10M接口上排队(例如有一个连接IP电话和一台PC机),所产生的延迟将为:
120毫秒内发送(10 x 1500 x 8)= 120000比特
实施输出调度将确保CoS为5的话音数据包被放入绝对优先队列,这样就能在CoS小于5的数据包之前得到发送。由此可减少延迟。
减少抖动
使用输出调度的另一个重要好处就是减少抖动。抖动是可以在同一信息流内的数据包中观察到的延迟变化。以下是输出调度如何来减少抖动的实例情况。
.gif)
在上述情况中,有两个业务流需要在同一个端口发送:
一条话音流从10M以太网端口进入。
一条FTP流从1千兆以太网的上行链路进入。
两个业务流通过同一个输出端口离开交换机。本例说明当没有使用输出调度时可能发生的情况。所有大型数据包可能在两个话音数据包之间交织,在从同一业务流中接收话音数据包时产生抖动。当交换机传送大型数据包时,接收数据包1以及数据包N+1之间,存在一个更大的延迟。但是,N+1和N+2之间的延迟可以忽略不计。这导致了话音业务流中的抖动。可以通过使用绝对优先队列轻而易举地避免该问题的发生。请确保话音数据包的CoS值映射至绝对优先队列。
结论
在本文中,通过对几个实例的研究,您已经了解到在运行混合模式的Catalyst 6000上如何对输出队列调度进行配置以及如何进行故障排除。您还看到在支持话音业务的大部分网络中,使用输出调度有以下好处:
在输出端口产生超量预订的情况下,可以避免重要业务被丢弃。
减少延迟。
减少抖动。
出处:互联网 |