目录

简介

先决条件

要求

使用的组件

规则

概述

低端平台（Cisco 1600、2500 及 4000 系列路由器）

高端平台（路由处理器，交换处理器，硅交换处理器及路由/交换处理器）

基于粒子的平台

缓冲区调节

保留构造缓冲区

缓冲区泄漏

相关信息

简介

本文档概述了基于当前平台进行缓冲区调节，同时还介绍了有关 show buffers 命令的一般信息。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您是在真实网络上操作，请确保您在使用任何命令前已经了解其潜在影响。

规则

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

概述

通过缓冲区调节，您可以修改路由器从其可用内存中分配缓冲区的方式，还可以防止在临时突发流量期间数据包丢失。

若要确定是否需要调节路由器的缓冲区，请使用 show interfaces 和 show buffers 命令。

如果您有show interfaces 和show buffers 命令的输出，或show technical-support （从启用模式）的输出，则可以使用Cisco CLI Analyzer显示潜在问题和修复方法。要使用思科 CLI 分析器，您必须是注册客户、已登录并已启用 JavaScript。

以下是 show interfaces 命令输出的示例：

Output queue 0/40, 1041 drops; input queue 0/75, 765 drops

35252345 packets input, 547082589 bytes, 940 no buffer

- 输入和输出下降的原因在于输入和输出队列由突发流量所占据。这与缓冲区问题无关，而是与过程交换性能的局限性有关。

- “无缓冲区”表示由于没有空闲的缓冲区来复制数据包而被丢弃的数据包数目。

使用 show buffers 命令，可以查看与接口的最大传输单元 (MTU) 相对应的缓冲区大小：

Middle buffers, 600 bytes (total 150, permanent 25):

147 in free list (10 min, 150 max allowed)

61351931 hits, 137912 misses, 51605 trims, 51730 created

91652 failures (0 no memory)

下表说明了该输出：

关键字

描述

总数

池中缓冲区的总数，包括使用和未使用的缓冲区。

永久

池中已分配缓冲区的恒定数量。这些缓冲区始终位于池中，不会被清理掉。

in free list

池中当前可免费使用的缓冲区数量。

最小值

路由器应尝试保留“in free list”中的最小缓冲区数。 如果“in free list”中的缓冲区数量降到“min”值以下，路由器应尝试为该池创建更多的缓冲区。

max allowed

“in free list”中所允许的最大缓冲区数量。 如果“in free list”中的缓冲区数量大于“max allowed”值，路由器应尝试减少池中的缓冲区。

命中

从可用列表中成功分配的缓冲区数量。

丢失

请求缓冲区的次数，但在可用列表中无任何缓冲区可用，或者可用列表中的缓冲区数低于“min”缓冲区数。

TRIMS

当“in free list”中的缓冲区数超过“max allowed”的缓冲区数时从池中排除的缓冲区数。

创建

在“in free list”中的缓冲区数低于“min”时在池中创建的缓冲区数。

no memory

路由器尝试新建缓冲区（但由于路由器中可用内存不足而无法创建）的次数。

故障

中断期间向请求者提供缓冲区这一操作出现失败的次数（请记住：路由器可在进程交换级创建新的缓冲区，因此仅在存在“内存不足”的情况下才会出现“失败”）。 “failures”数表示由于缓冲区短缺而被丢弃的数据包数。

路由器如何处理缓冲区

“in free list”中的缓冲区数即为可用缓冲区数。当缓冲区请求传入时，系统会分配“in free list”中的缓冲区。

使用 IOS 缓冲区的两个主要原因如下：

- 处理在路由器上终止的流量。

- 数据包通过进程进行交换。

如果没有可用的缓冲区，并且启用了快速交换，则存在缓冲失败并会丢弃数据包。当缓冲池管理器进程检测到缓冲失败时，它会“创建”一个新的缓冲区来避免以后出现失败情况。

如果“in free list”中的缓冲区数等于“max allowed”值，路由器不会创建新的缓冲区。如果路由器中的内存不足，无法创建新的缓冲区，则会记录为“no memory”。 如果“in free list”中的缓冲区数大于“max allowed”数，则路由器会“trims”其中一些多余的缓冲区。

只需关注“failures”数量和“no memory”这两方面的情况即可。失败也许会发生，但过一会就会趋于稳定。路由器根据需要创建或排除缓冲区，以使失败数趋于稳定。如果失败数继续增加，可能有必要进行缓冲区调节。

如果由于内存不足而无法创建新的缓冲区，请查找是否存在缓冲区泄漏，或更常见的内存问题。缓冲区并不是以快速交换方式创建的，因此，如果路由器尝试快速交换数据包，并且没有可用的缓冲区，则数据包会被丢弃，同时会报告失败。在缓冲池管理器下一次运行时，会创建新的缓冲区。

低端平台（Cisco 1600、2500 及 4000 系列路由器）

快速交换数据包和通过进程交换的数据包共享相同的缓冲区。这些缓冲区位于共享内存中。对于 Cisco 1600 和 2500 系列路由器，共享内存位于动态 RAM (DRAM) 中，对于 Cisco 4000、4500 和 4700 系列路由器，共享内存位于共享 RAM (SRAM) 中。

show memory 命令的前几行显示您所拥有的共享内存量、当前使用量及其最低点。在某数据包无法进行快速交换时，该数据包的指针会插入到进程交换输入队列中，但不会复制数据包本身。

以下是低端平台 (Cisco 4500) 上 show buffers 命令的输出：

router# show buffers

Buffer elements:

471 in free list (500 max allowed)

870696495 hits, 0 misses, 0 created

Public buffer pools:

Small buffers, 104 bytes (total 50, permanent 50):

49 in free list (20 min, 150 max allowed)

27301678 hits, 23 misses, 20 trims, 20 created

0 failures (0 no memory)

Middle buffers, 600 bytes (total 150, permanent 25):

147 in free list (10 min, 150 max allowed)

61351931 hits, 137912 misses, 51605 trims, 51730 created

91652 failures (0 no memory)

Big buffers, 1524 bytes (total 67, permanent 50):

67 in free list (5 min, 150 max allowed)

46293638 hits, 455 misses, 878 trims, 895 created

0 failures (0 no memory)

VeryBig buffers, 4520 bytes (total 96, permanent 10):

79 in free list (0 min, 100 max allowed)

11818351 hits, 246 misses, 98 trims, 184 created

243 failures (0 no memory)

Large buffers, 5024 bytes (total 10, permanent 0):

10 in free list (0 min, 10 max allowed)

4504003 hits, 873040 misses, 759543 trims, 759553 created

873040 failures (0 no memory)

Huge buffers, 18024 bytes (total 0, permanent 0):

0 in free list (0 min, 4 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Interface buffer pools:

TokenRing0 buffers, 4516 bytes (total 48, permanent 48):

0 in free list (0 min, 48 max allowed)

3099742 hits, 9180771 fallbacks

16 max cache size, 1 in cache

TokenRing1 buffers, 4516 bytes (total 48, permanent 48):

0 in free list (0 min, 48 max allowed)

335172 hits, 403668 fallbacks

16 max cache size, 16 in cache

Serial1 buffers, 1524 bytes (total 96, permanent 96):

63 in free list (0 min, 96 max allowed)

33 hits, 0 fallbacks

0 max cache size, 0 in cache

Serial2 buffers, 1524 bytes (total 96, permanent 96):

63 in free list (0 min, 96 max allowed)

701370936 hits, 268 fallbacks

0 max cache size, 0 in cache

Serial3 buffers, 1524 bytes (total 96, permanent 96):

63 in free list (0 min, 96 max allowed)

33 hits, 0 fallbacks

0 max cache size, 0 in cache

Serial0 buffers, 4546 bytes (total 96, permanent 96):

28 in free list (0 min, 96 max allowed)

346854 hits, 5377043 fallbacks

32 max cache size, 27 in cache

接口缓冲池由接口用于输入/输出 (I/O)。 如果接口缓冲区可用列表中没有足够多的缓冲区，路由器会回退到公共缓冲池。回退不会影响性能。

高速缓存是一种软件操作，它可以绕过一些开销，从而加快为中断层驱动程序代码提供缓冲区的速度。

注意：通常，接口缓冲区不应调整。

高端平台（路由处理器，交换处理器，硅交换处理器及路由/交换处理器）

下面是高端平台上 show buffers 命令的输出：

Router# show buffers

Buffer elements:

498 in free list (500 max allowed)

326504974 hits, 0 misses, 0 created

Public buffer pools:

Small buffers, 104 bytes (total 150, permanent 150):

140 in free list (30 min, 250 max allowed)

564556247 hits, 148477066 misses, 16239797 trims, 16239797 created

29356200 failures (0 no memory)

Middle buffers, 600 bytes (total 120, permanent 120):

116 in free list (20 min, 200 max allowed)

319750574 hits, 85689239 misses, 9671164 trims, 9671164 created

26050704 failures (0 no memory)

Big buffers, 1524 bytes (total 100, permanent 100):

98 in free list (10 min, 300 max allowed)

20130595 hits, 14796572 misses, 251916 trims, 251916 created

11813639 failures (0 no memory)

VeryBig buffers, 4520 bytes (total 15, permanent 15):

14 in free list (5 min, 300 max allowed)

22966334 hits, 3477687 misses, 13113 trims, 13113 created

2840089 failures (0 no memory)

Large buffers, 5024 bytes (total 12, permanent 12):

12 in free list (0 min, 30 max allowed)

849034 hits, 1979463 misses, 1028 trims, 1028 created

1979456 failures (0 no memory)

Huge buffers, 18024 bytes (total 6, permanent 5):

4 in free list (2 min, 13 max allowed)

338440 hits, 1693496 misses, 1582 trims, 1583 created

1640218 failures (0 no memory)

标题池

公共缓冲池位于 DRAM，称为“系统缓冲区”。路由/交换处理器 (RSP) 上的共享内存称为“系统数据包内存 (MEMD)”，允许 2 MB 的内存空间。对于路由处理器 (RP) 和交换处理器 (SP)（或硅交换处理器 - SSP），系统缓冲区位于 RP，MEMD 位于 SP（或 SSP）。

在数据包传入时，它会由接收接口处理器（通用接口处理器 - VIP 除外）保存在 MEMD 中。 如果数据包无法被快速交换，整个数据包会被复制到 DRAM 的系统缓冲区中。因此，您在 show buffers 命令中看到的缓冲区是位于 DRAM 中的系统缓冲区。

show controllers cbus 命令显示 MEMD 中的接口缓冲区。此外，不建议调整接口缓冲区。在某数据包无法被快速交换并且无法复制到系统缓冲区时，该数据包会被丢弃，如果没有可用的系统缓冲区，则会计为一次失败。

基于粒子的平台

Cisco 3600 和 7200 系列路由器使用粒子。接口缓冲区是极小的缓冲区（称为粒子），数据包会被拆分到这些缓冲区中。当某数据包无法被快速交换时，路由器必须在一个系统缓冲区中重组该数据包，因为进程交换代码不能处理这些粒子。

以下是 Cisco 3600 上的 show buffers 命令的输出：

Router# show buffers

Buffer elements:

499 in free list (500 max allowed)

136440 hits, 0 misses, 0 created

Public buffer pools:

Small buffers, 104 bytes (total 50, permanent 50):

49 in free list (20 min, 150 max allowed)

4069435 hits, 141 misses, 73 trims, 73 created

52 failures (0 no memory)

Middle buffers, 600 bytes (total 25, permanent 25):

25 in free list (10 min, 150 max allowed)

628629 hits, 21 misses, 21 trims, 21 created

3 failures (0 no memory)

Big buffers, 1524 bytes (total 50, permanent 50):

50 in free list (5 min, 150 max allowed)

9145 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

VeryBig buffers, 4520 bytes (total 10, permanent 10):

10 in free list (0 min, 100 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Large buffers, 5024 bytes (total 0, permanent 0):

0 in free list (0 min, 10 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Huge buffers, 18024 bytes (total 0, permanent 0):

0 in free list (0 min, 4 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Interface buffer pools:

CD2430 I/O buffers, 1524 bytes (total 0, permanent 0):

0 in free list (0 min, 0 max allowed)

0 hits, 0 fallbacks

Header pools:

Header buffers, 0 bytes (total 265, permanent 256):

9 in free list (10 min, 512 max allowed)

253 hits, 3 misses, 0 trims, 9 created

0 failures (0 no memory)

256 max cache size, 256 in cache

Particle Clones:

1024 clones, 0 hits, 0 misses

Public particle pools:

F/S buffers, 256 bytes (total 384, permanent 384):

128 in free list (128 min, 1024 max allowed)

256 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

256 max cache size, 256 in cache

Normal buffers, 1548 bytes (total 512, permanent 512):

356 in free list (128 min, 1024 max allowed)

188 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

128 max cache size, 128 in cache

Private particle pools:

Ethernet0/0 buffers, 1536 bytes (total 96, permanent 96):

0 in free list (0 min, 96 max allowed)

96 hits, 0 fallbacks

96 max cache size, 64 in cache

Serial0/0 buffers, 1548 bytes (total 14, permanent 14):

0 in free list (0 min, 14 max allowed)

14 hits, 0 fallbacks

14 max cache size, 14 in cache

BRI0/0 buffers, 1548 bytes (total 14, permanent 14):

0 in free list (0 min, 14 max allowed)

14 hits, 0 fallbacks

14 max cache size, 14 in cache

BRI0/0:1 buffers, 1548 bytes (total 14, permanent 14):

0 in free list (0 min, 14 max allowed)

14 hits, 0 fallbacks

14 max cache size, 14 in cache

BRI0/0:2 buffers, 1548 bytes (total 14, permanent 14):

0 in free list (0 min, 14 max allowed)

14 hits, 0 fallbacks

14 max cache size, 14 in cache

TokenRing0/0 buffers, 1548 bytes (total 64, permanent 64):

0 in free list (0 min, 64 max allowed)

64 hits, 0 fallbacks

64 max cache size, 64 in cache

4 buffer threshold, 0 threshold transitions

专用粒子池由接口使用，不得对其进行调整。当可用列表中没有可用的缓冲区时，路由器会回退到公共粒子池。

标题缓冲区用于记录属于数据包的所有粒子的列表。

注意：系统缓冲区用于进程交换。对于 Cisco 3600，所有这些缓冲区都位于 DRAM 中的 I/O 内存中。您可以使用 memory-size iomem 命令指定 I/O 内存量。在 Cisco 7200 中，用于高带宽端口适配器 (PA) 的接口粒子缓冲池位于 SRAM 中。

缓冲区调节

下面是 show buffers 命令的示例：

Middle buffers, 600 bytes (total 150, permanent 25):

147 in free list (10 min, 150 max allowed)

61351931 hits, 137912 misses, 51605 trims, 51730 created

91652 failures (0 no memory)

在本示例中，中间缓冲区出现很多失败。因为它只表示 0.1% 的命中率，所以这不是严重问题。通过一些缓冲区调节工作可以轻松地减少失败数。

仅当数据包无法进行 CEF 交换时，才进行缓冲区调节。

根据路由器的体系结构，您所调节的缓冲区通常属于 I/O 内存（低端）或主内存（高端）。 在调节缓冲区之前，通过 show memory 命令的前几行首先检查可用 I/O 内存或主内存是否充足。

下面是一些您可以使用的常规值：

- 永久：提取池中缓冲区的总数，并增加约 20% 的缓冲区。

- 最低免费：将最小可用数设置约为池中分配缓冲区恒定数的 20-30%。

- 最大可用数：将最大可用数设置为大于恒定数与最小可用数之和的数字。

在上述缓冲区调节示例中，我们可以在全局配置模式中输入如下命令：

buffers middle permanent 180

buffers middle min-free 50

buffers middle max-free 230

通常，Cisco IOSÂ®软件会动态创建缓冲区，以便这些设置正常。然而，如果出现流量突发，路由器可能来不及创建新的缓冲区，失败数量可能会持续增加。请使用 buffers 命令更改默认缓冲池设置。确保在更改缓冲区值时要格外小心，因为不适当的缓冲区设置可能会影响系统的性能。如果要清除缓冲区计数器，则需要重新加载路由器。

流量突发有两种类型：

- 缓慢突发：在这种情况下，路由器有充足的时间新建缓冲区。增加最小可用缓冲区的数量。通过使用可用缓冲区，可以得到最小可用值，然后新建缓冲区。

- 快速突发：在快速流量突发的情况下，路由器来不及新建缓冲区，因此您应该使用可用缓存区。为此，请修改永久缓冲区的数量。

结论:如果在初始调节后，创建计数增加了，则增加最小可用值（慢速突发）。 如果失败计数增加，而不是创建计数增加（快速突发），则增加恒定值。

保留构造缓冲区

您可以输入 fabric buffer-reserve 命令来改进系统吞吐量以及保留 ASIC 缓冲区。

下列模块支持此命令：

- WS-X6704-10GE

- WS-X6748-SFP

- WS-X6748-GE-TX

- WS-X6724-SFP

配置有 Supervisor 引擎 32 的 Cisco 7600 系列路由器不支持此命令。

fabric buffer-reserve [high | low | medium | value]

注意：仅在Cisco TAC的指导下使用此命令。

此命令在以下常见情况下非常有用：

- 线路协议对于多个接口失效

- 在多个接口上看到超出限度

- 端口频繁地退出并加入 EtherChannel

- TestMacNotification 测试因线路卡上的 DFC 频繁失败

缓冲区泄漏

下面是 show buffers 命令输出的示例：

Big buffers, 1524 bytes (total 1556, permanent 50):

52 in free list (5 min, 150 max allowed)

43670437 hits, 5134 misses, 0 trims, 1506 created

756 failures (0 no memory)

此输出指示大缓冲池中的缓冲区泄漏。路由器中共有 1556 个大缓冲区，其中只有 52 个在可用列表中。某些内容占用了所有缓冲区，并且没有释放这些缓冲区。有关缓冲区泄漏的详细信息，请参阅排除缓冲区泄漏故障。

相关信息

- 排除内存问题

- 缓冲泄漏故障排除

- 基本的系统管理命令

- 修改系统缓冲区大小

- 技术支持 - Cisco Systems