简介
本文档概述了基于当前平台进行缓冲区调节,同时还介绍了有关 show buffers 命令的一般信息。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您是在真实网络上操作,请确保您在使用任何命令前已经了解其潜在影响。
规则
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
概述
通过缓冲区调节,您可以修改路由器从其可用内存中分配缓冲区的方式,还可以防止在临时突发流量期间数据包丢失。
若要确定是否需要调节路由器的缓冲区,请使用 show interfaces 和 show buffers 命令。
如果从Cisco设备上得到show interfaces和show buffers命令的输出,或者是得到show technical-support(从启用模式)的输出,您可以使用Cisco CLI分析器来显示潜在问题和解决方法。要使用思科 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 内存或主内存是否充足。
下面是一些您可以使用的常规值:
-
permanent:计算池中总缓冲区的数量并添加约20%。
-
min-free:将min-free设置为池中已分配缓冲区永久数量的20-30%左右。
-
max-free:将max-free设置为大于永久值和最小值的总和。
在上述缓冲区调节示例中,我们可以在全局配置模式中输入如下命令:
buffers middle permanent 180
buffers middle min-free 50
buffers middle max-free 230
通常,Cisco â IOSS®软件会动态创建缓冲区,以便这些设置可以正常使用。然而,如果出现流量突发,路由器可能来不及创建新的缓冲区,失败数量可能会持续增加。请使用 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]
注意:仅在思科TAC的指导下使用此命令。
此命令在以下常见情况下非常有用:
缓冲区泄漏
下面是 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 个在可用列表中。某些内容占用了所有缓冲区,并且没有释放这些缓冲区。有关缓冲区泄漏的详细信息,请参阅排除缓冲区泄漏故障。
相关信息