通过配置调度器缓冲区大小来管理出口接口上的拥塞
要控制输出级上的拥塞,可以配置延迟缓冲区带宽。延迟缓冲区带宽提供数据包缓冲区空间,以吸收截至指定延迟持续时间的突发流量。指定延迟缓冲区满载后,丢弃概率为 100% 的数据包将从缓冲区的前端丢弃。
队列 0 到 7 的默认调度器传输速率为总可用带宽的 95%、0、0、0、0 和 5%。
队列 0 到 7 的默认缓冲区大小百分比为占可用缓冲区总数的 95%、0、0、0、0 和 5%。每个队列的总可用缓冲区因 PIC 类型而异。
要配置缓冲区大小,请在 buffer-size
层级添加语句 [edit class-of-service schedulers scheduler-name]
:
[edit class-of-service schedulers scheduler-name] buffer-size (percent percentage | remainder | shared | temporal microseconds);
对于每个调度器,您可以将缓冲区大小配置为以下其中一个:
总缓冲区的百分比。每个队列的总缓冲区基于微秒,并因路由设备类型而异,如 表 1 所示。
剩余可用缓冲区。剩余部分是未分配给其他队列的缓冲区百分比。例如,如果将 40% 的延迟缓冲区分配给队列 0,则允许队列 3 保留 5% 的默认分配,并将剩余的分配分配给队列 7,那么队列 7 会使用大约 55% 的延迟缓冲区。
从接口的缓冲区池共享。在 PTX 系列路由器上,将队列缓冲区设置为接口缓冲区的 100%。此选项允许队列的缓冲区增长到接口缓冲区的 100% 之大,前提是并且仅当它是接口的唯一活动队列时。
一个时间值,以微秒为单位。对于时间设置,当队列算法对队列的字节数超过计算得出的字节数时,会开始丢弃数据包。此最大值是通过将队列的传输速率乘以配置的时间值计算得出的。每个队列的缓冲区大小时间值因路由设备类型而异,如 表 1 所示。最大值适用于逻辑接口,而不是每个队列。
注意:通常,默认的时间缓冲区值与接口的速度或整形速率成反比。随着接口速度的提高,接口需要越来越少的缓冲区来保存数据,因为接口发送的数据越来越多。
路由设备 |
时间值范围 |
---|---|
M320 和 T 系列路由器 FPC,1 类和 2 类 |
1 到 80,000 微秒 |
M320 和 T 系列路由器 FPC,类型 3。所有 ES 卡(类型 1、2、3 和 4)。 |
1 到 50,000 微秒 对于总带宽超过 40 Gbps 的 PIC,可以为调度程序配置的最大时间缓冲区大小为 40,000 微秒,而非 50,000 微秒。 |
M120 路由器 FEB 和 MX 系列路由器无增强队列 DPC,以及 EX 系列交换机 |
1 到 100,000 微秒 |
M5、M7i、M10 和 M10i 路由器 FPC |
1 到 100,000 微秒 |
其他 M 系列路由器 FPC |
1 到 200,000 微秒 |
PTX 系列数据包传输路由器 |
1 到 100,000 微秒 |
所有路由器上的 IQ PIC |
1 到 100,000 微秒 |
支持大缓冲区大小 | |
所有路由器上的 IQ PIC |
1 到 500,000 微秒 |
千兆以太网 IQ VLAN |
|
整形速率高达 10 Mbps |
1 到 400,000 微秒 |
整形速率高达 20 Mbps |
1 到 300,000 微秒 |
整形速率高达 30 Mbps |
1 到 200,000 微秒 |
整形速率高达 40 Mbps |
1 至 150,000 微秒 |
整形速率超过 40 Mbps |
1 到 100,000 微秒 |
有关配置延迟缓冲区的更多信息,请参阅以下子主题:
为速度较慢的接口配置大延迟缓冲区
默认情况下,在通道化 IQ PIC 上配置的 T1、E1 和 NxDS0 接口和 DLCI 被限制为 100,000 微秒的延迟缓冲区。(IQ PIC 上的默认平均数据包大小为 40 字节。)对于这些接口,可能需要配置更大的缓冲区大小,以防止拥塞和丢包。您可以对以下 PIC 进行上述操作:
通道化 IQ
4 端口 E3 IQ
千兆以太网 IQ 和 IQ2
较慢的接口收到大量突发流量时,会出现拥塞和丢包的情况。当较快的接口将流量传递到较慢的接口时就会发生这种情况,而当边缘设备从网络核心接收流量时,通常会发生这种情况。例如,100,000 微秒的 T1 延迟缓冲区只能吸收来自上游 OC3 接口的 5000 微秒突发流量的 20%。在这种情况下,80% 的突发流量被丢弃。
表 2 显示了吸收各种上游接口类型的典型突发大小所需的一些建议缓冲区大小。
突发长度 |
上游接口 |
下游接口 |
下行接口上的建议缓冲区 |
---|---|---|---|
5000 微秒 |
OC3 |
E1 或 T1 |
500,000 微秒 |
5000 微秒 |
E1 或 T1 |
E1 或 T1 |
100,000 微秒 |
1000 微秒 |
T3 |
E1 或 T1 |
100,000 微秒 |
为了确保流量在 E1、T1 N和 xDS0 接口及 DCI 上正确排队传输,您可以配置大于默认最大值的缓冲区大小。要配置更大的缓冲区大小:
q-pic-large-buffer (large-scale | small-scale)
层次结构级别包括语句[edit chassis fpc slot-number pic pic-number]
。
[edit} user@host# edit chassis fpc slot-number pic pic-number user@host# set q-pic-large-buffer large-scale
如果指定选项 large-scale
,则功能支持更多接口。如果指定 small-scale
,默认设置,则功能支持的接口数量较少。
在配置中包含语句 q-pic-large-buffer
时,更大的缓冲区显然可以分配给调度器队列。较大的缓冲区最大值因接口类型而异,如 表 3 所示。
平台、PIC 或接口类型 |
最大缓冲区大小 |
---|---|
未启用大缓冲区时 | |
M320 和 T 系列路由器 FPC,1 类和 2 类 |
80,000 微秒 |
M320 和 T 系列路由器 FPC,类型 3 |
50,000 微秒 |
其他 M 系列路由器 FPC |
200,000 微秒 |
所有路由器上的 IQ PIC |
100,000 微秒 |
支持大缓冲区大小 | |
通道化 T3 和通道化 OC3 DLCI — 最大大小因整形速率而异: |
|
整形速率从 64,000 到 255,999 bps |
4,000,000 微秒 |
整形速率从 256,000 到 511,999 bps |
2,000,000 微秒 |
整形速率从 512,000 到 1,023,999 bps |
1,000,000 微秒 |
整形速率从 1,024,000 到 2,048,000 bps |
500,000 微秒 |
整形速率从 2,048,001 bps 到 10 Mbps |
400,000 微秒 |
整形速率从 10,000,001 bps 到 20 Mbps |
300,000 微秒 |
整形速率从 20,000,001 bps 到 30 Mbps |
200,000 微秒 |
整形速率从 30,000,001 bps 到 40 Mbps |
150,000 微秒 |
整形速率从 40,000,001 bps 及以上 |
100,000 微秒 |
NxDS0 IQ 接口 — 最大大小因通道大小而异: |
|
1 个 DSO 到 3 个DS0 |
4,000,000 微秒 |
4 个 DSO 到 7 个DS0 |
2,000,000 微秒 |
8xDSO 至 15xDS0 |
1,000,000 微秒 |
16 个 DSO 到 32 个DS0 |
500,000 微秒 |
其他 IQ 接口 |
500,000 微秒 |
如果配置的延迟缓冲区大于新的最大值,则可以成功提交候选配置。但是,设置将被数据包转发组件拒绝,并会生成系统日志警告消息。
对于支持 DLCI 队列的接口,其配置的整形速率小于或等于物理接口带宽的 DLCI 支持大缓冲区。例如,当您在通道化 T3 IQ PIC 上配置帧中继 DLCI,并将整形速率配置为 1.5 Mbps 时,可分配给 DLCI 的延迟缓冲区为 500,000 微秒,相当于 T1 延迟缓冲区。有关 DLCI 队列的更多信息,请参阅 对 LCI 和 VLAN 应用调度器图和整形速率。
对于 NxDS0 接口,较大的缓冲区大小最高可达 4,000,000 微秒,具体取决于 xDS0 接口中的 NDS0 通道数量。对于通道较少且速度较慢 N的 xDS0 接口,延迟缓冲区可以相对大于通道数较快 N的 xDS0 接口的延迟缓冲区。 表 5 显示了这一点。
您可以将延迟缓冲区分配为百分比或时间值。生成的延迟缓冲区的计算方式取决于延迟缓冲区的配置方式,如 表 4 所示。
延迟缓冲区配置 |
公式 |
例子 |
---|---|---|
百分比 |
|
如果将 T1 接口上的队列配置为使用 30% 的可用延迟缓冲区,则队列将收到 28,125 字节的延迟缓冲区: sched-expedited { transmit-rate percent 30; buffer-size percent 30; }
|
时间 |
|
如果将 T1 接口上的队列配置为使用 500,000 微秒的延迟缓冲区,并将传输速率配置为 20%,则队列将收到 18,750 字节的延迟缓冲区: sched-best { transmit-rate percent 20; buffer-size temporal 500000; }
|
百分比,缓冲区大小大于传输速率 |
|
在此示例中,延迟缓冲区的分配是传输速率的两倍。如果队列的传输速率不能超过分配的传输速率,则最大延迟缓冲区延迟可高达 500,000 微秒的两倍。 sched-extra-buffer { transmit-rate percent 10; buffer-size percent 20; } |
FRF.16 LSQ 捆绑包 |
对于总捆绑带宽< T1 带宽,延迟缓冲区速率为 1 秒。 对于总捆绑带宽 >= T1 带宽,延迟缓冲区速率为 200 毫秒 (ms)。 |
为 NxDS0 接口配置最大延迟缓冲区
由于 NxDS0 接口的带宽比 T1 或 E1 接口少,因此 xDS0 接口上的 N缓冲区大小可能相对较大,具体取决于组合的 DS0 通道数。最大延迟缓冲区大小使用以下公式计算:
Interface Speed * Maximum Delay Buffer Time = Delay Buffer Size
例如,1 个 DS0 接口的速度为每秒 64 千位 (Kbps)。在此速率下,最大延迟缓冲区时间为 4,000,000 微秒。因此,延迟缓冲区大小为 32 KB:
64 Kbps * 4,000,000 microseconds = 32 KB
表 5 显示了 1xDS0 到 32xDS0 接口的延迟缓冲区计算。
接口速度 |
延迟缓冲区大小 |
---|---|
1xDS0 至 4xDS0:最大延迟缓冲区时间为 4,000,000 微秒 | |
1xDS0:64 Kbps |
32 KB |
2xDS0:128 Kbps |
64 KB |
3xDS0:192 Kbps |
96 KB |
4xDS0 至 7xDS0:最大延迟缓冲区时间为 2,000,000 微秒 | |
4xDS0:256 Kbps |
64 KB |
5xDS0:320 Kbps |
80 KB |
6xDS0:384 Kbps |
96 KB |
7xDS0:448 Kbps |
112 KB |
8xDS0 至 15xDS0:最大延迟缓冲区时间为 1,000,000 微秒 | |
8xDS0:512 Kbps |
64 KB |
9xDS0:576 Kbps |
72 KB |
10xDS0:640 Kbps |
80 KB |
11xDS0:704 Kbps |
88 KB |
12xDS0:768 Kbps |
96 KB |
13xDS0:832 Kbps |
104 KB |
14xDS0:896vKbps |
112 KB |
15xDS0:960 Kbps |
120 KB |
16xDS0 至 32xDS0:最大延迟缓冲区时间为 500,000 微秒 | |
16xDS0:1024 Kbps |
64 KB |
17xDS0:1088 Kbps |
68 KB |
18xDS0:1152 Kbps |
72 KB |
19xDS0:1216 Kbps |
76 KB |
20xDS0:1280 Kbps |
80 KB |
21xDS0:1344 Kbps |
84 KB |
22xDS0:1408 Kbps |
88 KB |
23xDS0:1472 Kbps |
92 KB |
24xDS0:1536 Kbps |
96 KB |
25xDS0:1600 Kbps |
100 KB |
26xDS0:1664 Kbps |
104 KB |
27xDS0:1728 Kbps |
108 KB |
28xDS0:1792 Kbps |
112 KB |
29xDS0:1856 Kbps |
116 KB |
30xDS0:1920 Kbps |
120 KB |
31xDS0:1984 Kbps |
124 KB |
32xDS0:2048 Kbps |
128 KB |
示例:为较慢的接口配置大延迟缓冲区
示例:为调度程序配置延迟缓冲区值
您可以为物理接口或逻辑接口分配一个由不同调度器(或队列)组成的调度器图。物理接口的大延迟缓冲区可以在层次结构级别使用 transmit-rate
and buffer-size
语句 [edit class-of-service schedulers scheduler-name]
分布到不同的调度器(或队列)。
此示例显示了两个调度器, 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 接口,则此调度器接收 T1 接口 500,000 微秒的 300,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
语句时,整形速率将成为计算延迟缓冲区大小的基础。有关更多信息,请参阅 表 5。
此示例将 T1 接口上的整形速率配置为 200 Kbps,这意味着 T1 接口带宽设置为 200 Kbps,而不是 1.5 Mbps。由于 200 Kbps 小于 4xDS0,因此此接口会收到 4 秒的延迟缓冲区或 800 Kbps 的流量,即 800 KB(整秒)。
完整配置
此示例显示了 FPC 插槽 0 中的通道化 OC12 IQ PIC、PIC 插槽 0 和一个采用帧中继封装的通道化 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 机制才能配置额外的延迟缓冲区。这意味着,如果没有剩余的传输带宽可用,则队列可能会丢弃数据包。
仅限瞻博网络 M320 多服务边缘路由器、MX 系列 5G 通用路由平台、T 系列核心路由器和 EX 系列以太网交换机,除非为给定队列配置了延迟缓冲区的时间设置,否则将启用 MAD 机制。MAD 机制对于承载延迟免疫流量的转发类特别有用,这些类的主要要求是最大带宽利用率。相比之下,对于延迟敏感型流量,您可能希望禁用 MAD 机制,因为大延迟缓冲区不是最佳选择。
MAD 支持依赖于 FPC 和数据包转发引擎,而不是 PIC。所有 M320、MX 系列和 T 系列路由器以及 EX 系列交换机的 FPC 和数据包转发引擎都支持 MAD。无模块化端口集中器 (MPC) 和 IQ、IQ2、IQ2E 或 IQE PIC 支持 MAD。
在支持的硬件上启用 MAD 机制:
buffer-size percent
层次结构级别包括语句[edit class-of-service schedulers scheduler-name]
:
[edit class-of-service schedulers scheduler-name] user@host# set buffer-size percent percentage
分配给任何队列的最小缓冲区为 18,432 字节。如果队列配置为缓冲区大小小于 18K,则队列将保留 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; } } }