在缓冲区内配置大CoS
您可使用 命令与 buffer-size-temporal
命令组合配置非常大的延迟 q-pic-large-buffer
缓冲区。与 buffer-size temporal
结合使用的选项可以创建 q-pic-large-buffer
接口上一个或多个队列的超大延迟缓冲区分配。
如果配置的缓冲区大小过低,转发类的缓冲区大小将默认为 9192,并显示以下日志消息:"fwdd_cos_set_delay_bandwidth:队列:16 延迟缓冲区大小 (1414) 过低,设置为默认 9192。"
Configuring Large Delay Buffers
以下配置适用于以下示例:
Example: Simple Configuration Using Four Queues
此配置为四个队列的每一个分配 12,500,000 字节的缓冲区。为避免超过延迟缓冲区计算的限制,此初始示例没有接口整形速率、时间表传输速率或时间表缓冲区大小百分比配置。
指定四个队列每一个的最大 4 秒延迟缓冲区:
[edit]
set class-of-service schedulers be-Scheduler0 buffer-size temporal 4m
set class-of-service schedulers video-Scheduler1 buffer-size temporal 4m
set class-of-service schedulers voice-Scheduler2 buffer-size temporal 4m
set class-of-service schedulers nc-Scheduler3 buffer-size temporal 4m
在部分
buffer-size temporal
或所有队列上指定使用隐式(默认)或显式传输速率百分比作为这些队列的时间值缓冲区大小百分比。由于没有明确指定的传输速率百分比,因此可将 100% 除以配置的队列数(在时间表图中配置时间表的队列),以获得隐式(默认)每队列传输速率百分比。每个队列都获得 100% /4 = 25% 的隐式(默认)传输速率。在这种情况下,指定每个队列上的最大 4 秒延迟 接口上无整形速率,且无隐式(默认)每队列传输速率为 25%,接口上所有时间 4m 队列的总缓冲区 = 4 秒 * 100,000,000 个最大接口 bps/8 位/字节 = 4 秒 * 12,500,000 字节 = 50,000,000 字节。指定时间 4m 的每个队列获取 25% * 50,000,000 = 12,500,000 字节。
为接口添加 4 Mbps 的整形速率:
[edit]
set class-of-service interfaces ge-0/0/3 unit 201 shaping-rate 4m
接口上所有时间 4m 队列的总缓冲区 = 4 秒 * 4,000,000 bps 整形速率/8 位/字节 = 4 秒 * 500,000 字节 = 2,000,000 字节。因此,指定时间 4m 的每个队列接收 25% * 2,000,000 = 500,000 字节。
buffer-size temporal
在任意接口transmit-rate percent
buffer-size percent
队列上使用时,如果同时在任何接口队列上使用 命令、命令或命令,则缓冲区大小计算将变得更复杂,并且可能达到可用队列深度的限制。/var/log/messages
如果配置尝试超过可用内存,则提交时,文件中将出现两条系统日志消息,接口服务类配置将被忽略,接口服务类配置将恢复为双队列默认值:
Mar 11 11:02:10.239 elma-n4 elma-n4 COSMAN_FWDD: queue mem underflow for ge-0/0/3 Mar 11 11:02:10.240 elma-n4 elma-n4 cosman_compute_install_sched_params: Failed to compute scheduler params for ge-0/0/3.Hence retaining defaults
在同时 buffer-size temporal
配置 和 transmit-rate percent
buffer-size percent
或 或 两者时,必须监控系统日志以查看是否达到了可用队列深度限制。
Example: Using buffer-size temporal with Explicit transmit-rate percent Commands
要向全部四个队列添加显式传输速率:
[edit]set class-of-service schedulers be-Scheduler0 transmit-rate percent 10
set class-of-service schedulers video-Scheduler1 transmit-rate percent 25
set class-of-service schedulers voice-Scheduler2 transmit-rate percent 25
set class-of-service schedulers nc-Scheduler3 transmit-rate percent 40
例如,如果接口整形为 4 Mbps,则队列的传输速率百分比为 10 意味着特定队列的带宽共享为 0.4 Mbps。队列被分配了总缓冲区的 2,000,000 字节中的部分,可用于此接口上的时间队列,与传输速率成正比。四个队列分别获得 200,000、500,000、500,000 和 800,000 字节的延迟缓冲区。
为避免超过队列深度限制buffer-size temporal
transmit rate percent
buffer-size percent
buffer-size temporal
并触发系统日志消息和默认配置行为,在使用 和 以及 其他(非时间)队列配置队列时,必须遵循以下配置规则:当将接口上的一个或多个队列配置为 时,显式配置的传输速率百分比和其他非时间队列的总和明确配置的缓冲区大小百分比不得超过 100 百分比。
如果时间队列传输速率百分比总和和非时间队列 缓冲区大小百分比超过 100queue mem underflow
Failed to compute scheduler params
%,则和系统日志消息显示在消息日志中,接口的显式配置的 CLI CoS 配置将被忽略,接口将恢复为双队列默认 CoS 配置。
在 buffer-size temporal
队列上指定时 transmit-rate percent
,如果在同一队列上配置,则配置的队列深度基于指定的获取的队列部分带宽 transmit-rate percent
。
除了使用缓冲区大小时间为一个或多个队列指定的时间延迟时间之外,还会自动为整个接口计算另一个延迟时间。此接口延迟时间跨所有非时间队列分配,与隐式(默认)或显式传输速率百分比成正比。如果未 q-pic-large-buffer
启用,接口延迟时间默认为 100 毫秒。如表 1 所示,启用 q-pic-large-buffer
时,接口延迟时间根据接口的已配置整形速率计算。由于上文示例中配置的整形速率为 4 Mbps (> 2,048,000 bps),因此配置的接口延迟时间为 100 msec。
配置的整形速率 (bps) |
接口延迟时间 (msec) 启用 q-pic-large-buffer 时用于非时间队列 |
默认延迟时间 使用 (msec) 无 q-pic-large-buffer |
---|---|---|
64,000-255,999 |
4000 |
100 |
256,000 - 511,999 |
2000 |
100 |
512,000 - 102,3999 |
1000 |
100 |
1,024,000 - 2,047,999 |
500 |
100 |
>= 2,048,000 |
100 |
100 |
此示例正确计算了时间队列和非时间队列的延迟缓冲区限制:
替代
buffer-size percent
队列buffer-size temporal
0 和 1:[edit]
delete class-of-service schedulers be-Scheduler0 buffer-size temporal 4m
delete class-of-service schedulers video-Scheduler1 buffer-size temporal 4m
set class-of-service schedulers be-Scheduler0 buffer-size percent 10
set class-of-service schedulers video-Scheduler1 buffer-size percent 25
这将删除硬指定的 4 秒缓冲时间要求,并将其替换为非时间队列总接口延迟时间的 10% (或 25%) 的成正比限制。这两种情况下,队列深度均基于特定队列的接口带宽份额计算。总接口非时间队列内存 = 整形速率 * 接口延迟时间(表 1) = 4 Mbps * 0.1 秒 = 500,000 字节/秒 * 0.1 秒 = 50,000 字节, 因此队列 0 和 1 分别获得 10% * 50,000 = 5000 字节和 25% * 50,000 = 12,500 字节延迟缓冲区。
在
buffer-size temporal
队列 2 和 3 上配置:[edit]
set class-of-service schedulers voice-Scheduler2 buffer-size temporal 4m
set class-of-service schedulers voice-Scheduler2 transmit-rate percent 25
set class-of-service schedulers nc-Scheduler3 buffer-size temporal 4m
set class-of-service schedulers nc-Scheduler3 transmit-rate percent 40
队列 2 和 3 仍分别获得 500,000 和 800,000 字节的延迟缓冲区,这两者之前计算得出的。此配置会默认以下规则:时间队列传输速率百分比(25% + 40% = 65%)以及非时间队列缓冲区大小百分比(10% + 25% = 35%) 之和不超过 100%(65% + 35% <= 100%)。
以下示例超过延迟缓冲区限制,将触发系统日志消息和默认双队列服务类行为。
将非时间队列的缓冲区大小百分比从 25% 提高至 26% 1:
[edit]
set class-of-service schedulers video-Scheduler1 buffer-size percent 26
这违反非时间队列缓冲区大小百分比(10% + 26% = 36%)以及时间队列传输速率百分比(25% + 40% = 65%) 现在超过 100% (36% + 65% = 101%)的配置规则。因此,文件中将出现以下两条系统日志 /var/log/messages
消息:
Mar 23 18:08:23 elma-n4 elma-n4 COSMAN_FWDD: %PFE-3: queue mem underflow for ge-0/0/3 q_num(3) Mar 23 18:08:23 elma-n4 elma-n4 cosman_compute_install_sched_params: %PFE-3: Failed to compute scheduler params for ge-0/0/3.Hence retaining defaults
超过延迟缓冲区限制时,CLI 配置的服务等级设置将被使用,并且会为接口分配默认服务等级配置(默认时间表图)。它使用两个队列:转发类尽力服务(队列 0)的传输速率为 95% 和缓冲区大小百分比 95,转发类网络控制(队列 3)的传输速率百分比为 5 和缓冲区大小百分比 5。
queue 0: 1,187,500 Bytes queue 1: 9,192 Bytes queue 2: 9,192 Bytes queue 3: 62,500 Bytes