本文档说明如何排除Cisco 12000系列Internet路由器上show interfaces命令的输出显示越来越多的忽略错误的故障。它还提供故障排除提示,用于在执行插槽<slot#> show控制器(frfab | tofab)qm stat命令。在排除任何这些错误时,请验证计数器是否在递增,而不仅仅是历史值。
注意:如show interfaces输出所示,Cisco 12000系列Internet路由器上的输入丢弃故障排除中分别涉及越来越多的输入队列丢弃。
本文档需要了解Cisco 12000系列互联网路由器架构,特别是ToFab和FrFab队列。请参阅如何读取show controllers frfab的输出 | tofab queue命令以供参考。
本文档中的信息基于以下软件和硬件版本。
支持Cisco 12000系列互联网路由器的任何Cisco IOS®软件版本。通常是12.0S和12.0ST版本。
本文档涵盖所有Cisco 12000平台。这包括12008、12012、12016、12404、12410和12416。
本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您是在真实网络上操作,请确保您在使用任何命令前已经了解其潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
Cisco 12000系列互联网路由器使用分布式架构来确保最佳转发性能。为支持高转发速率,它在入站和出站线卡上都维护数据包缓冲区。这些数据包缓冲区大小不同,通常设计为支持最大传输单位(MTU)大小的帧。
在确定数据包的出站接口后,转发处理器会执行以下操作:
转发处理器向出站接口的虚拟输出队列发送带有关于分组(包括其在内存中的位置)的信息的指针。
线卡的调度程序向调度程序发出请求。调度程序发出授权,数据包从缓冲区内存通过交换矩阵发送到出站线卡。
出站线路卡缓冲数据包。
出站LC上的第3层处理器和相关的专用集成电路(ASIC)将数据包从接口传出。
如果出站接口超订用,它将开始缓冲超额数据包。在持续超订用期间,出站LC的传输队列将填满。在这种情况下,根据出站LC,会发生以下情况:
出站LC的引擎类型 | 对出站拥塞的响应 | 错误计数器 |
---|---|---|
引擎0和1 | 发送背压信号。入站接口开始缓冲过量数据包。 | 根据入站LC的L3转发引擎,show interfaces 命令输出中的忽略错误和/或execute-on slot <slot#> show controllers tofab QM stat 命令输出中的no mem drops。¹ |
引擎2、3、4 | 丢弃出口上的任何超额数据包。 | 出站LC上的execute-on slot <slot#> show controllers frfab QM stat命令输出中没有内存丢弃。 |
¹您将收到L3引擎0、1和2入口LC的忽略错误。但是,对于引擎2 LC上的4个、16个和更多端口,忽略的计数器不会增加。
在任何智能网络设备上,当一个或多个高速接口馈送相对低速的接口时,接口速率不匹配。由于低速出站接口无法像较快的入站接口将缓冲区发送到输出保持队列那样快速返回缓冲区,因此缓冲区返回的延迟会导致某种类型的丢弃。此数据包流打破了出站接口以缓冲区管理时间速率返回缓冲区的假设。
除接口速率不匹配外,当到达数据包的速率大于CPU可以处理的速率时,忽略的错误也会增加。此情况在Cisco 12000上非常罕见,通常由大量非常小的数据包或在LC上启用CPU密集型功能(如访问控制列表(ACL)或流量管制)而导致。这是引擎0 LC的情况,在软件中实施了许多功能。但是,在后续引擎上,几乎所有功能都在硬件中实现。例如,引擎3(IP服务引擎 — ISE)和引擎4+线卡专为边缘应用而设计,并在硬件中实施增强的IP服务(如服务质量 — QoS),不会影响性能。此硬件的示例包括1端口CHOC-48 ISE、4端口CHOC-12 ISE、16端口OC-3 POS ISE、4端口OC-12 POS ISE、1端口OC-48 POS ISE和1端口OC48个POS ISE。
当数据包到达入口线卡,并且没有适当大小的数据包缓冲区可用于处理此数据包时,忽略的计数器也可以递增。但是,此情况非常罕见,本文档不涉及此情况。
对于任何L3引擎类型,由输出接口超订用导致的忽略错误和无内存丢包的解决方案都相同 — 防止缓冲区耗竭。换句话说,我们需要一种机制来防止FrFab队列的填充。
简而言之,当数据包到达入口线卡(LC)且无法使用适当大小的数据包缓冲区来处理此数据包时,忽略的计数器将递增。因此,忽略的数据包通常不会指向Cisco IOS软件中的错误。
以下是Cisco 12000系列路由器上show interfaces 命令的输出示例,其中包含一个非空的忽略计数器:
router#show interfaces G3/0 GigabitEthernet3/0 is up, line protocol is up Hardware is GigMac GigabitEthernet, address is 0030.71f5.7980 (bia 0030.71f5.7980) MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec, rely 255/255, load 1/255 Encapsulation ARPA, loopback not set Keepalive not set Full-duplex mode, link type is force-up, media type is SX output flow-control is unsupported, input flow-control is unsupported ARP type: ARPA, ARP Timeout 04:00:00 Last input 00:00:00, output 00:00:00, output hang never Last clearing of "show interface" counters 00:00:07 Queueing strategy: fifo Output queue 0/40, 0 drops; input queue 0/75, 0 drops 5 minute input rate 99000 bits/sec, 74 packets/sec 5 minute output rate 104000 bits/sec, 68 packets/sec 478 packets input, 71057 bytes, 0 no buffer Received 19 broadcasts, 0 runts, 0 giants, 0 throttles 2 input errors, 2 CRC, 0 frame, 0 overrun, 25 ignored !--- Ignored counter is > 0. Ensure it is incrementing. 0 watchdog, 53 multicast, 0 pause input 541 packets output, 139133 bytes, 0 underruns 0 output errors, 0 collisions, 0 interface resets 0 babbles, 0 late collision, 0 deferred 0 lost carrier, 0 no carrier, 0 pause output 0 output buffer failures, 0 output buffers swapped out
当出站LC是引擎0或1时,它会向其他LC发送背压消息,告知它们不再向该特定LC发送数据。然后,入站接口会缓冲与此目标插槽对应的ToFab队列中的超额数据包。
要隔离Ignored计数器增加的最可能原因,您需要查看入口LC的ToFab队列。您可以使用attach命令通过维护总线(MBUS)连接到LC,或者使用execute-on slot <slot#> show controllers tofab queue命令检查ToFab队列。执行此命令几次并查找以下症状:
非IPC空闲队列#Qelem列中值0的递减和低值
目标插槽队列中#Qelem列中的大值。
使用更新的L3引擎架构的线卡不使用背压机制。相反,当接口超订用且FrFab队列耗尽时,数据包在到达出口线卡时会被丢弃。
当较小的池耗尽时,引擎2 LC不会回退到下一个较大的缓冲池。仅对ToFab侧(Rx)上的引擎2 LC实施了回退机制。 如果发生这种情况,“bump count”计数器将增加执行插槽<slot> show controller tofab QM stat命令的输出量。
这些丢包在execute-on slot <slot#> show controllers frfab QM stat命令的输出中计为no mem drops,如下所示:
Router#execute-on slot 1 show controller frfab QM stat ========= Line Card (Slot 1) ======= 174 no mem drop, 0 soft drop, 0 bump count !--- Look for an incrementing value for the "no mem drop" counter 0 rawq drops, 0 global red drops, 0 global force drops 0 no memory (ns), 0 no memory hwm (Ns) no free queue 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 multicast drops Tx Counts Interface 0 8390658710246 TX bytes, 2098330790 TX pkts, 212452 kbps, 6641 pps Interface 1 0 TX bytes, 0 TX pkts, 0 kbps, 0 PPS Interface 2 0 TX bytes, 0 TX pkts, 0 kbps, 0 PPS Interface 3 0 TX bytes, 0 TX pkts, 0 kbps, 0 PPS
您需要找到一种方法来防止FrFab端缓冲到LC备份到入站接口或直接丢弃数据包的点。
除引擎2 LC外,所有线卡的一个简单解决方案是减少多接口LC上特定出站接口可用的缓冲区数量。默认情况下,接口可以使用所有雕刻的FrFab缓冲区。使用tx-queue-limit命令配置非默认值。这可防止出口LC缓冲超过该特定端口的接口队列上配置的数据包数。确保将此数字配置得足够低,使其不包含此接口的所有FrFab队列。请注意,此方法不区分高优先级和低优先级数据包,只是更积极地针对特定接口实施尾部丢弃。
引擎3线卡需要使用模块化QoS CLI(MQC),而不是传统命令行界面(CLI)。 基于引擎2的线卡不支持此命令。
以下是使用传统服务类别(CoS)配置的配置示例:
interface POS 0/0 tx-queue-limit <max Q length in packets>
以下是使用MQC的配置示例:
policy-map TX_QUEUE_LIMIT class class-default queue-limit interface POS 0/0 service-policy out TX_QUEUE_LIMIT
另一种解决方案是实现一个更快的输出接口,这为我们提供了更大的管道。但更大的管道能迅速填充。因此,推荐的解决方案是在出站LC上实施服务质量(QoS)机制。
思科的加权随机早期检测(WRED)功能实施差分或智能丢弃机制。它设计用于处理自适应流量,如TCP流。它监控队列大小,并通过随机丢弃来自各种流的数据包来保持一致的平均队列大小,因为计算的平均队列会上升到一个可配置的最小阈值以上。
在Cisco 12000系列上实施时,WRED可以防止FrFab队列填满,而且对于丢弃的数据包,WRED非常有选择性。引擎0 LC在软件中支持WRED,而引擎1 LC根本不支持WRED。其他L3引擎LC在硬件中支持WRED。
有关配置WRED的详细信息,请参阅以下文档:
此拥塞避免机制仅在基于TCP的环境中有效。TCP通过降低流量传输速度来对流量下降做出适当响应,甚至稳健地响应。有关TCP如何对数据包丢失做出反应的详细信息,请参阅TCP如何处理流量丢失以及路由器如何与TCP交互。
Cisco 12000系列上支持的另一个QoS机制是使用引擎0和引擎1 LC上的承诺访问速率(CAR)和引擎2 LC上称为每接口速率控制(PIRC)的CAR的修改版本的流量策略。在出站接口上配置流量管制。
这种情况非常罕见!
您可以使用execute-on slot <slot#> show controllers tofab queues命令检查传入LC上的CPU是否过载。如果在“原始队列”行的#Qelem列中看到非常大的数字,则意味着有太多的数据包要由CPU(位于LC本身)处理。 您将开始获取忽略的数据包,因为CPU无法跟上数据包的数量。这些数据包被定向到LC的CPU,而不是千兆路由处理器(GRP)!
此时,您需要做的是将一部分流量从此入站LC转移,以便其CPU受到的影响较小。
您还应查看LC配置,以检查其上是否配置了某些功能,从而影响CPU。某些功能(如CAR、ACL和NetFlow)在软件中实施时(仅在引擎0 LC上)会降低LC的性能。 如果是这种情况,您应采取相应措施,删除该功能或将Cisco IOS软件升级到改进相同功能实施的更高版本(如Turbo ACL)。 请参阅Cisco 12000系列路由器的版本说明,了解已针对不同LC实施或改进了哪些功能。
最后,唯一的解决方案可能是将LC换为更新的LC,在硬件中实施所请求的功能。这取决于LC的引擎类型。
您可以使用以下快捷命令确定LC的L3引擎类型:
Router#show diag | i (SLOT | Engine) ... SLOT 1 (RP/LC 1 ): 1 port ATM Over SONET OC12c/STM-4c Multi Mode L3 Engine: 0 - OC12 (622 Mbps) SLOT 3 (RP/LC 3 ): 3 Port Gigabit Ethernet L3 Engine: 2 - Backbone OC48 (2.5 Gbps) ...
注意:引擎3(IP服务引擎 — ISE)和引擎4+线卡专为边缘应用而设计,并在硬件中实施增强的IP服务(如QoS),不会影响性能。
使用Turbo ACL,它允许路由器在将ACL下载到LC处理器之前编译ACL,从而优化性能。
避免在ACL上使用“log”关键字。
尽可能避免传出ACL。在具有引擎0、1和2 LC的系统中,所有ACL的处理都在入站LC上完成。即使出站ACL过滤在它知道数据包发往哪个出站接口后,也会在入站卡上完成。因此,在接口上配置出站ACL会影响系统中的所有LC。此外,引擎2 LC可以在执行硬件转发的ASIC中同时执行传入或传出ACL,但不能同时执行两者。如果同时配置入站和出站ACL,LC将回退到基于CPU的外发访问列表转发,从而影响LC的交换性能。但是,较新的引擎(如引擎3和引擎4+)已针对增强的IP服务(如ACL)进行了高度优化,并在传出LC上处理出站ACL。
将需要特定功能的流量分配给一组LC。
将不需要功能的流量分配给另一组LC以保持峰值数据包转发性能。
当需要高性能时,使用具有更高引擎类型的LC。
设计面向主干或核心的LC,以运行硬件或微代码支持的功能。
本案例研究显示如何排除插槽6中LC接口上增量忽略的错误。
Router#exec slot 6 show controllers tofab queue ========= Line Card (Slot 6) ======= Carve information for ToFab buffers SDRAM size: 134217728 bytes, address: 30000000, carve base: 30019100 134115072 bytes carve size, 4 SDRAM bank(s), 8192 bytes SDRAM pagesize, 2 carve(s) max buffer data size 4544 bytes, min buffer data size 80 bytes 174538/174538 buffers specified/carved 110797216/110797216 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 4 non-IPC free queues: 88964/88964 (buffers specified/carved), 50.97%, 80 byte data size 1 21120 84604 81074 262143 54076/54076 (buffers specified/carved), 30.98%, 608 byte data size 2 122270 116965 49567 262143 26165/26165 (buffers specified/carved), 14.99%, 1568 byte data size 3 164160 145355 19518 262143 !-- Out of the 26165 buffers that are carved, only 19518 are available 5233/5233 (buffers specified/carved), 2.99%, 4544 byte data size 4 172325 172088 5233 262143 IPC Queue: 100/100 (buffers specified/carved), 0.5%, 4112 byte data size 30 61 60 100 262143 Raw Queue: 31 44229 88895 0 43634 !-- The Raw Queue has a low or 0 value for the #Qelem column, indicating !-- that the CPU is not overwhelmed with packets destined to it. ToFab Queues: Dest Slot 0 73769 60489 0 262143 1 7909 27395 0 262143 2 61416 71346 0 262143 3 80352 14567 0 262143 4 138236 107121 18955 262143 !-- 18955 packets are waiting for space in the outbound queues !-- on the LC in slot 4. 5 4852 48171 0 262143 6 98318 111757 0 262143 7 44229 88895 0 262143 8 0 0 0 262143 9 0 0 0 262143 10 0 0 0 262143 11 0 0 0 262143 12 0 0 0 262143 13 0 0 0 262143 14 0 0 0 262143 15 0 0 0 262143 Multicast 0 0 0 262143
由于ToFab队列输出显示有大量排队的数据包以插槽4中的LC为目标,因此请检查此LC上的FrFab队列。
Router#exec slot 4 show controllers frfab queue ========= Line Card (Slot 4) ======= Carve information for FrFab buffers SDRAM size: 67108864 bytes, address: 20000000, carve base: 2002D100 66924288 bytes carve size, 0 SDRAM bank(s), 0 bytes SDRAM pagesize, 2 carve(s) max buffer data size 4544 bytes, min buffer data size 80 bytes 65534/65534 buffers specified/carved 66789056/66789056 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 4 non-IPC free queues: 26174/26174 (buffers specified/carved), 39.93%, 80 byte data size 1 10123 4332 14515 65535 19630/19630 (buffers specified/carved), 29.95%, 608 byte data size 2 27898 37167 12279 65535 13087/13087 (buffers specified/carved), 19.96%, 1568 byte data size 3 0 52275 0 65535 !-- Zero buffers available for this pool 6543/6543 (buffers specified/carved), 9.98%, 4544 byte data size 4 60805 60804 6543 65535 IPC Queue: 100/100 (buffers specified/carved), 0.15%, 4112 byte data size 30 75 74 100 65535 Raw Queue: 31 0 80 0 65535 Interface Queues: 0 0 39413 0 65535 1 0 44192 0 65535 2 48426 58230 32111 65535 !-- Interface 2 is using half or 32111 of the carved packet buffers 3 0 41219 0 65535
将show controllers frfab queue输出中指示的超订用接口与同一接口的show interfaces输出配对。以下输出确认输出接口速率为线速且超订用:
Router#show interfaces POS 4/2 POS4/2 is up, line protocol is up Hardware is Packet over SONET Description: Pacbell OC3 to other ISP... Internet address is 10.10.10.10/30 MTU 4470 bytes, BW 155000 Kbit, DLY 100 usec, rely 255/255, load 156/255 Encapsulation HDLC, crc 32, loopback not set Keepalive set (10 sec) Scramble enabled Last input 00:00:01, output 00:00:03, output hang never Last clearing of "show interface" counters never Queueing strategy: FIFO Output queue 0/300, 0 drops; input queue 0/300, 0 drops 5 minute input rate 20274000 bits/sec, 6263 packets/sec 5 minute output rate 148605000 bits/sec, 28776 packets/sec !-- The output interface rate is at line rate which means that the interface !-- is oversubscribed. 1018621328 packets input, 2339977099 bytes, 0 no buffer Received 0 broadcasts, 1 runts, 0 giants, 0 throttles 0 parity 1 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 378645 packets output, 156727974 bytes, 0 underruns 0 output errors, 0 applique, 0 interface resets 0 output buffer failures, 0 output buffers swapped out 1 carrier transitions
有关根据特定出站接口的体系结构解决增量忽略的错误的后续步骤,请参阅本文档的解决方案部分。例如,在引擎0 LC上,尝试将一些流量转移到另一个接口,或作为临时措施,减少此特定接口可从线卡的空闲队列中使用的数据包缓冲区数量。请使用以下命令:
Router(config)#int POS 4/2 Router(config-if)#tx-queue-limit 5000
有时,由于Cisco IOS软件缺陷,计数器会增加。确保您在系列中运行最新的可用Cisco IOS软件版本,以消除已修复的所有错误。如果您仍然看到忽略的数据包,并且本文档中的信息无法解决您的问题,请与思科技术支持中心(TAC)联系以获得帮助。