配置调度器缓冲区大小以管理出口拥塞
要控制输出阶段的拥塞,可以配置延迟缓冲带宽。延迟缓冲带宽提供数据包缓冲区空间,以吸收猝发流量,直至达到指定的延迟持续时间。指定的延迟缓冲区已满后,丢弃概率为 100% 的数据包将从缓冲区头部丢弃。
队列 0 到 7 的默认调度器传输速率为可用带宽总带宽的 95%、0%、0、0%、0%、0% 和 5%。
队列 0 到 7 的默认缓冲区大小百分比分别为可用缓冲区总数的 95%、0%、0%、0%、0%、0% 和 5%。每个队列的总可用缓冲区因 PIC 类型而异。
要配置缓冲区大小,请在[edit class-of-service schedulers scheduler-name]
层次结构级别包含语buffer-size
句:
[edit class-of-service schedulers scheduler-name] buffer-size (percent percentage | remainder | shared | temporal microseconds);
对于每个调度器,您可以将缓冲区大小配置为以下选项之一:
-
总缓冲区的百分比。每个队列的总缓冲区基于微秒,并且因路由设备类型而异。
-
剩余缓冲区可用。其余部分是未分配给其他队列的缓冲区百分比。
-
从接口的缓冲池共享。在 PTX 系列路由器上,将队列的缓冲区设置为高达接口缓冲区的 100%。此选项允许队列的缓冲区增长到接口缓冲区的 100%,当且仅当它是接口的唯一活动队列时。
-
时间值,以微秒为单位。对于时间设置,当排队算法排队超过计算出的字节数时,排队算法将开始丢弃数据包。此最大值是通过将队列的传输速率乘以配置的时间值来计算的。
注意:通常,默认时间缓冲区值与接口的速度或整形速率成反比。随着接口速度的提高,接口需要的缓冲区来保存数据越来越少,因为接口可以发送越来越多的数据。
由于用于配置临时缓冲区设置的可用硬件资源有限,因此建议尽可能使用通用临时缓冲区配置。
通常,您可以为端口调度器和分层调度器配置调度器缓冲区大小。对于端口调度器,Junos 会根据以下几点计算共享缓冲区大小:
-
如果配置了端口整形器,Junos 将根据端口整形器计算缓冲区大小。
-
如果未配置端口整形程序,Junos 将根据端口速度计算缓冲区大小。
对于分层调度程序,Junos 会根据以下几点计算共享缓冲区大小:
-
如果在逻辑接口上配置了整形器,Junos 将根据逻辑接口端口整形器计算缓冲区大小。
-
如果配置了端口整形器,但没有逻辑接口整形器,则 Junos 将基于端口整形器计算缓冲区大小。
-
如果未配置整形器,Junos 将根据端口速度计算缓冲区大小。
示例:配置调度程序的延迟缓冲区值
您可以为物理或逻辑接口分配一个由不同调度器(或队列)组成的调度器图。可以使用层次结构级别的和 buffer-size
语句[edit class-of-service schedulers scheduler-name]
将物理接口的大延迟缓冲区分发给不同的调度器(或队列)。transmit-rate
此示例显示了两个调度程序和 sched-best
sched-exped
,其延迟缓冲区大小分别配置为百分比(20%)和时间值(300,000 微秒)。 sched-best
调度程序的传输速率为 10%。 sched-exped
调度程序的传输速率为 20%。
sched-best
调度程序的延迟缓冲区是指定传输速率 10% 的两倍。假设sched-best
调度程序已分配给 T1 接口,则此调度程序将接收 T1 接口延迟缓冲区总 500,000 微秒的 20%。因此,调度程序接收 18,750 字节的延迟缓冲区:
available interface bandwidth * configured percentage buffer-size * maximum buffer = queue buffer 1.5 Mbps * 0.2 * 500,000 microseconds = 150,000 bits = 18,750 bytes
假设 sched-exped
将调度程序分配给 T1 接口,则此调度程序将接收 300,000 微秒的 T1 接口的 500,000 微秒延迟缓冲区,流量速率为 20%。因此,调度程序接收 11,250 字节的延迟缓冲区:
available interface bandwidth * configured percentage transmit-rate * configured temporal buffer-size = queue buffer 1.5 Mbps * 0.2 * 300,000 microseconds = 90,000 bits = 11,250 bytes
要配置此示例,请执行以下作:
示例:配置物理接口整形速率
通常,物理接口速度是计算延迟缓冲区大小的基础。但是,当您包含 shaping-rate
语句时,整形速率将成为计算延迟缓冲区大小的基础。
此示例将 T1 接口上的整形速率配置为 200 Kbps,这意味着 T1 接口带宽设置为 200 Kbps,而不是 1.5 Mbps。由于 200 Kbps 小于 4xDS0,因此此接口接收 4 秒的延迟缓冲区,或 800 Kbps 的流量,即整秒钟 800 KB。
完整配置
此示例显示了 FPC 插槽 0、PIC 插槽 0 中的通道化 OC12 IQ PIC 以及采用帧中继封装的通道化 T1 接口。它还显示了物理接口上的调度器图配置。
chassis { fpc 0 { pic 0 { q-pic-large-buffer; max-queues-per-interface 8; } } } interfaces { coc12-0/0/0 { partition 1 oc-slice 1 interface-type coc1; } coc1-0/0/0:1 { partition 1 interface-type t1; } t1-0/0/0:1:1 { encapsulation frame-relay; unit 0 { family inet { address 10.1.1.1/24; } dlci 100; } } } class-of-service { interfaces { t1-0/0/0:1:1 { scheduler-map smap-1; } } scheduler-maps { smap-1 { forwarding-class best-effort scheduler sched-best; forwarding-class expedited-forwarding scheduler sched-exped; forwarding-class assured-forwarding scheduler sched-assure; forwarding-class network-control scheduler sched-network; } } schedulers { sched-best { transmit-rate percent 40; buffer-size percent 40; } sched-exped { transmit-rate percent 30; buffer-size percent 30; } sched-assure { transmit-rate percent 20; buffer-size percent 20; } sched-network { transmit-rate percent 10; buffer-size percent 10; } } }
启用和禁用每个队列的动态内存分配
在 Junos OS 中,动态内存分配 (MAD) 是一种机制,当队列使用的带宽多于传输速率设置中分配的带宽时,该机制会动态调配额外的延迟缓冲区。借助这种额外的缓冲区,队列可以更轻松地吸收突发流量,从而避免数据包丢弃。仅当队列使用额外传输带宽时,MAD 机制才能配置额外的延迟缓冲区。这意味着,如果没有多余的传输带宽可用,队列可能会出现数据包丢弃的情况。
仅对于瞻博网络 MX 系列 5G 通用路由平台和 EX 系列以太网交换机,除非为给定队列的延迟缓冲区配置了临时设置,否则会启用 MAD 机制。MAD 机制对于转发类传输不受延迟影响的流量特别有用,因为这些类的首要要求是实现最大带宽利用率。相比之下,对于延迟敏感型流量,您可能希望禁用 MAD 机制,因为较大的延迟缓冲区不是最佳选择。
MAD 支持取决于 FPC 和数据包转发引擎,而非 PIC。没有模块化端口集中器 (MPC) 和 IQ、IQ2、IQ2E 或 IQE PIC 支持 MAD。
要在支持的硬件上启用 MAD 机制,请执行以下作:
[edit class-of-service schedulers scheduler-name]
层次结构级别包括语buffer-size percent
句:
[edit class-of-service schedulers scheduler-name] user@host# set buffer-size percent percentage
分配给任何队列的最小缓冲区为 18,432 字节。如果队列配置为缓冲区大小小于 18,000,则队列将保留 18,432 字节的缓冲区大小。
如果需要,可以配置大于配置传输速率的缓冲区大小。如果有足够的多余带宽可用,缓冲区可以容纳超过配置传输速率的数据包突发。例如:
class-of-service { schedulers { sched-best { transmit-rate percent 20; buffer-size percent 30; } } }
如前所述,您可以使用临时延迟缓冲区配置禁用队列上的 MAD 机制,从而限制延迟缓冲区的大小。但是,临时队列的有效缓冲区延迟不仅受缓冲区大小值的限制,还受关联的丢弃配置文件的限制。如果丢弃配置文件在填充级别小于 100% 时指定丢弃概率为 100%,则有效最大缓冲区延迟小于缓冲区大小设置。这是因为丢弃配置文件指定队列在队列的延迟缓冲区 100% 满之前丢弃数据包。
此类配置可能类似于以下示例:
class-of-service { drop-profiles { plp-high { fill-level 70 drop-probability 100; } plp-low { fill-level 80 drop-probability 100; } } schedulers { sched { buffer-size temporal 500000; drop-profile-map loss-priority low protocol any drop-profile plp-low; drop-profile-map loss-priority high protocol any drop-profile plp-high; transmit-rate percent 20; } } }
特定于平台的缓冲区大小配置行为
使用 功能浏览器 确认平台和版本对缓冲区大小配置的支持。
使用下表查看您的平台特定于平台的行为:
平台 | 差异 |
---|---|
ACX7000 系列路由器 |
|
PTX 系列路由器 | PTX 系列路由器支持 |