本文档说明如何读取show controller frfab queue和show controller tofab queue命令的输出内容。它还详细概述了与这些特殊队列相关的Cisco 12000系列互联网路由器的基础架构。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
本文档没有任何特定的前提条件。
本文档中的信息基于:
Cisco 12000系列Internet路由器
Cisco IOS©软件的所有版本
本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您是在真实网络上操作,请确保您在使用任何命令前已经了解其潜在影响。
Cisco 12000系列互联网路由器上的每个线卡(LC)有两种内存类型:
路由或处理器内存(动态RAM - DRAM):此内存主要使板载处理器能够运行Cisco IOS软件并存储网络路由表(转发信息库 — FIB、邻接)。
数据包内存(同步动态RAM - SDRAM):线卡分组存储器暂时存储等待线卡处理器的交换决定的数据包。
本文档专门介绍分为两组的数据包内存:ToFab和FrFab(面向交换矩阵和从交换矩阵)。 ToFab内存用于进入LC上其中一个接口并进入交换矩阵的数据包,而FrFab内存用于从交换矩阵传出LC上某个接口的数据包。
为了对Cisco 12000系列互联网路由器中忽略的数据包进行有效故障排除,Tofab和Frfab队列是需要了解的最重要的概念。有关详细信息,请参阅Cisco 12000系列互联网路由器上忽略的数据包和无内存丢弃故障排除。
注意:“ToFab”(面向交换矩阵)和“Rx”(由路由器接收)是同一事物的两个不同名称,“FrFab”(来自交换矩阵)和“Tx”(由路由器传输)也是如此。 例如,ToFab缓冲区管理ASIC(BMA)也称为RxBMA。本文档使用了 ToFab/FrFab 命名规则,但您可能会在其他地方看到使用 Rx/Tx 命名规则。
对数据包内存的访问通过缓冲区管理ASIC(BMA)进行。 BMA为线卡提供数据包缓冲和缓冲队列管理功能。所有数据包通过BMA两次 — 一次进入,一次出。换句话说,数据包到达物理层接口模块(PLIM),在SDRAM缓冲区中花费短时间,然后从缓冲区中读取并传送到交换矩阵接口ASIC(FIA)模块。在此,它们被分段到思科信元,并传输到交换矩阵。然后,出口线卡上的交换矩阵接口ASIC会从交换矩阵接收数据包。重组后,转到SDRAM缓冲区,再转到PLIM,最终通过线路发送。
Cisco IOS软件实施了一种缓冲区划分算法,将SDRAM划分为不同大小的缓冲区。GRP和其他源向线卡提供切分指令,然后由线卡执行指令。有不同种类的雕刻。例如,一个简单的刻划会创建一个大小相同的缓冲区池,而一个复杂的刻划会创建多个大小不同的池,每个池包含大小相同的缓冲区。
大小相同的所有缓冲区都关联到一个池中。始终为进程间通信(IPC)使用分配一个池。每个相关的队列静态RAM(QSRAM)都用队列头、尾部、长度、长度阈值、SDRAM中的相关缓冲地址和下一个队列元素进行更新。
以下顺序条件触发线卡上的缓冲区切分:
通过维护总线(MBUS)引导加载 — 简单的刻划调用,以划分缓冲区,以保存Cisco IOS软件映像下载。
Cisco IOS软件映像就位 — LC简单刻划调用,用于启用进程间通信(IPC),以便GRP可以使用IPC为LC提供初始刻划规范。已恢复所有可用于雕刻的SDRAM。
IPC启动后 — 使用IPC,GRP可以多次调用LC复杂刻形以动态恢复所有SDRAM。
在一个接口上手动配置或更改MTU(最大传输单元)会导致内存被恢复。FrFab队列被分割为整个系统的最大MTU,而ToFab队列被分割为特定线卡的最大MTU。
注意:仅当更改线卡(ToFab队列)的最大MTU,或者更改整个系统(FrFab队列)的最大MTU时,才会重新收到此消息。 例如,如果该线卡(ToFab队列)或整个系统(FrFab队列)上已存在MTU 4470的接口,将MTU从1500更改为4470不会更改任何内容。
请看以下示例:
Router#attach 1 Entering Console for 1 Port Packet Over SONET OC-48c/STM-16 in Slot: 1 Type "exit" to end this session Press RETURN to get started! LC-Slot1>enable LC-Slot1#show controllers tofab queues Carve information for ToFab buffers SDRAM size: 268435456 bytes, address: 30000000, carve base: 30019100 268332800 bytes carve size, 4 SDRAM bank(s), 16384 bytes SDRAM pagesize, 2 carve(s) max buffer data size 4544 bytes, min buffer data size 80 bytes 262140/262140 buffers specified/carved 240637152/240637152 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 4 non-IPC free queues: 115254/115254 (buffers specified/carved), 43.96%, 80 byte data size 1 201 115454 115254 262143 81202/81202 (buffers specified/carved), 30.97%, 608 byte data size 2 115455 196656 81202 262143 41910/41910 (buffers specified/carved), 15.98%, 1568 byte data size 3 196657 238566 41910 262143 23574/23574 (buffers specified/carved), 8.99%, 4544 byte data size 4 238567 262140 23574 262143 IPC Queue: 200/200 (buffers specified/carved), 0.7%, 4112 byte data size 30 131 130 200 262143 Raw Queue: 31 0 0 0 65535 ToFab Queues: Dest Slot 0 0 0 0 262143 1 0 0 0 262143 2 0 0 0 262143 3 0 0 0 262143 4 0 0 0 262143 5 0 0 0 262143 6 0 0 0 262143 7 0 0 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
您可以看到,自此线卡启动并运行以来,已有两个卡,并且有四个池:80、608、1568 和 4544.
现在更改属于此线卡的一个接口上的MTU:
Router(config)#interface pos1/0 Router(config-if)#mtu ? <64-18020> MTU size in bytes Router(config-if)#mtu 2000
现在连接到LC并检查已更改的内容:
LC-Slot1#show control tofab queue Carve information for ToFab buffers SDRAM size: 268435456 bytes, address: 30000000, carve base: 30019100 268332800 bytes carve size, 4 SDRAM bank(s), 16384 bytes SDRAM pagesize, 3 carve(s) max buffer data size 4112 bytes, min buffer data size 80 bytes 262142/262142 buffers specified/carved 247054400/247054400 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 4 non-IPC free queues: 91680/91680 (buffers specified/carved), 34.97%, 80 byte data size 1 202 201 91680 262143 65485/65485 (buffers specified/carved), 24.98%, 608 byte data size 2 91884 91883 65485 262143 49769/49769 (buffers specified/carved), 18.98%, 1568 byte data size 3 157366 207134 49769 262143 55008/55008 (buffers specified/carved), 20.98%, 2048 byte data size 4 207135 262142 55008 262143 IPC Queue: 200/200 (buffers specified/carved), 0.7%, 4112 byte data size 30 118 117 200 262143 Raw Queue: 31 206 205 0 65535 ToFab Queues: Dest Slot 0 0 0 0 262143 1 0 0 0 262143 2 0 0 0 262143 3 0 0 0 262143 4 0 0 0 262143 5 0 0 0 262143 6 0 0 0 262143 7 206 205 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
现在有三个卡,非IPC队列的最大缓冲区大小为2048字节,而不是4544。
FrFab队列保持不变:
LC-Slot1#show controllers frfab queues Carve information for FrFab buffers SDRAM size: 268435456 bytes, address: 20000000, carve base: 2039D100 264646400 bytes carve size, 4 SDRAM bank(s), 16384 bytes SDRAM pagesize, 3 carve(s) max buffer data size 9248 bytes, min buffer data size 80 bytes 251927/251927 buffers specified/carved 209883344/209883344 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 6 non-IPC free queues: 123349/123349 (buffers specified/carved), 48.96%, 80 byte data size 1 210 209 123349 262143 75519/75519 (buffers specified/carved), 29.97%, 608 byte data size 2 123552 123551 75519 262143 37759/37759 (buffers specified/carved), 14.98%, 1568 byte data size 3 199069 236827 37759 262143 2516/2516 (buffers specified/carved), 0.99%, 2048 byte data size 4 236828 239343 2516 262143 7551/7551 (buffers specified/carved), 2.99%, 4544 byte data size 5 239344 246894 7551 262143 5033/5033 (buffers specified/carved), 1.99%, 9248 byte data size 6 246895 251927 5033 262143 IPC Queue: 200/200 (buffers specified/carved), 0.7%, 4112 byte data size 30 52 51 200 262143 Multicast Raw Queue: 29 0 0 0 62981 Raw Queue: 31 52 51 0 251928 Interface Queues: 0 210 209 0 262143
最大缓冲区大小为9248字节。现在,在另一卡的另一个接口上配置MTU 10000:
Router(config-if)#interface pos5/0 Router(config-if)#mtu ? <64-18020> MTU size in bytes Router(config-if)#mtu 10000 LC-Slot1#show contr frfab queues Carve information for FrFab buffers SDRAM size: 268435456 bytes, address: 20000000, carve base: 2039D100 264646400 bytes carve size, 4 SDRAM bank(s), 16384 bytes SDRAM pagesize, 4 carve(s) max buffer data size 10064 bytes, min buffer data size 80 bytes 257309/257309 buffers specified/carved 213496016/213496016 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 5 non-IPC free queues: 128556/128556 (buffers specified/carved), 49.96%, 80 byte data size 1 204 203 128556 262143 77133/77133 (buffers specified/carved), 29.97%, 608 byte data size 2 128758 128757 77133 262143 38566/38566 (buffers specified/carved), 14.98%, 1568 byte data size 3 205890 244455 38566 262143 7713/7713 (buffers specified/carved), 2.99%, 4544 byte data size 4 244456 252168 7713 262143 5141/5141 (buffers specified/carved), 1.99%, 10064 byte data size 5 252169 257309 5141 262143 IPC Queue: 200/200 (buffers specified/carved), 0.7%, 4112 byte data size 30 24 23 200 262143 Multicast Raw Queue: 29 0 0 0 64327 Raw Queue: 31 24 23 0 257310 Interface Queues: 0 205 204 0 262143
FrFab队列现在有四个卡,最大缓冲区大小已更改为10064字节。
注意:在配置了点对点协议(PPP)封装的Packet Over Sonet(POS)线卡上,会发生最大接收单元(MRU)协商,但不会调整MTU大小。此外,当接口上的MTU更改时,PPP连接不会重置。
此内存被划分到不同的数据包缓冲区池中。要查看如何划分接收内存,可以连接到线卡并执行show controller tofab queue命令,如下所示:
Router#attach ? <0-15> slot number of linecard to connect <cr> Router#attach 1 Entering Console for 1 Port SONET based SRP OC-12c/STM-4 in Slot: 1 Type "exit" to end this session Press RETURN to get started! LC-Slot1>enable LC-Slot1# LC-Slot1#show controllers tofab queues Carve information for ToFab buffers SDRAM size: 33554432 bytes, address: 30000000, carve base: 30029100 33386240 bytes carve size, 4 SDRAM bank(s), 8192 bytes SDRAM pagesize, 2 carve(s) max buffer data size 9248 bytes, min buffer data size 80 bytes 40606/40606 buffers specified/carved 33249088/33249088 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 5 non-IPC free queues: 20254/20254 (buffers specified/carved), 49.87%, 80 byte data size 1 17297 17296 20254 65535 12152/12152 (buffers specified/carved), 29.92%, 608 byte data size 2 20548 20547 12152 65535 6076/6076 (buffers specified/carved), 14.96%, 1568 byte data size 3 32507 38582 6076 65535 1215/1215 (buffers specified/carved), 2.99%, 4544 byte data size 4 38583 39797 1215 65535 809/809 (buffers specified/carved), 1.99%, 9248 byte data size 5 39798 40606 809 65535 IPC Queue: 100/100 (buffers specified/carved), 0.24%, 4112 byte data size 30 72 71 100 65535 Raw Queue: 31 0 17302 0 65535 ToFab Queues: Dest Slot 0 0 0 0 65535 1 0 0 0 65535 2 0 0 0 65535 3 0 0 0 65535 4 0 0 0 65535 5 0 17282 0 65535 6 0 0 0 65535 7 0 75 0 65535 8 0 0 0 65535 9 0 0 0 65535 10 0 0 0 65535 11 0 0 0 65535 12 0 0 0 65535 13 0 0 0 65535 14 0 0 0 65535 15 0 0 0 65535 Multicast 0 0 0 65535 LC-Slot1#
以下列表介绍在上一个示例中找到的一些关键字段:
SDRAM大小:33554432 bytes, address:30000000, carve base:30029100 - 接收数据包内存的大小和开始接收的地址位置。
max buffer data size 9248 bytes, min buffer data size 80 bytes - 缓冲区大小的最大值和最小值。
40606/40606指定/划分的缓冲区 — 由Cisco IOS软件指定的要划分的缓冲区以及实际划分的缓冲区数量。
non-IPC free queues — 非IPC缓冲池是数据包缓冲池。到达线路卡的数据包将根据数据包的大小从这些缓冲池之一分配缓冲区。可能只有三个非IPC空闲队列;如果主板是以太网,则您不会有4k池,而只有池,最高可达1.5k。这是因为ToFab队列被分割为该特定线卡的最大传输单位(MTU)。示例输出显示了 5 个数据包缓冲池,大小分别为 80、608、1568、4544 和 9248 字节。对于每个池,下面提供了更多详细信息:
20254/20254(指定/划分的缓冲区)、 49.87%、 80字节数据大小- 49.87%的接收数据包内存已划分为20254个80字节缓冲区。
Qnum - 队列编号。
#Qelem — 当前分配给该队列的缓冲区数。如果它是空闲队列,则这些缓冲区对系统可用。如果它是ToFab队列或传输队列,则这些缓冲区对系统不可用。这一列用于查看哪个队列进行了备份。
Head and Tail - 头尾机制用于确保队列正确移动。
IPC Queue — 为从LC到GRP的进程间通信消息保留。
原始队列 — 当从非IPC空闲队列为传入数据包分配缓冲区时,该数据包将在原始队列中入队。原始队列是LC CPU在中断期间处理的先进先出(FIFO)。如果在“原始队列”行的#Qelem列中看到非常大的数字,则CPU上等待的数据包太多,它们将开始被忽略,因为CPU无法跟上负载。然而,这种情况非常罕见。
ToFab Queue - 虚拟输出队列;每个目标插槽一个,还有一个用于多播数据流。上例的最后部分显示15个虚拟输出队列。这是12012路由器,最初设计为15插槽机箱;不使用队列13至15。
在入口线卡CPU作出分组交换决定后,分组被加入到与分组目的地的插槽对应的虚拟输出队列中。第 4 列中的数字为当前排入虚拟输出队列的数据包数量。
第1步 — 数据包进入物理层接口模块(PLIM)。 在接收和处理数据包时,它是DMA'd(直接内存访问)到称为“先进先出(FIFO)突发存储器”的小型(大约2 x最大传输单元(MTU)缓冲区)内存。 此内存的大小取决于LC的类型(从128 KB到1 MB)。
第2步 — 当数据包完全在FIFO内存中时,PLIM上的专用集成电路(ASIC)与缓冲区管理ASIC(BMA)联系,并请求缓冲区将数据包放入。BMA会被告知数据包的大小,并相应地分配缓冲区。如果BMA无法获得大小适当的缓冲区,则丢弃数据包,并在传入接口上增加“忽略”计数器。没有其他平台的回退机制。
第3步 — 在此过程中,PLIM可能正在FIFO突发内存中接收另一个数据包,因此其大小为2xMTU。如果在正确的队列中有可用的空闲缓冲区,则BMA会将数据包存储在大小适当的空闲队列列表中。此缓冲区放在原始队列上,由Salsa ASIC或R5K CPU检查,具体取决于线卡交换引擎类型。
第4步 — 在引擎0 LC上,R5K CPU通过查询DRAM中的本地分布式思科快速转发(dCEF)表来确定数据包的目的地。然后,它将缓冲区从原始队列移动到与目标插槽对应的ToFabric队列。如果目标不在dCEF表中,则丢弃数据包。如果数据包是控制数据包(例如,路由更新),则它会入队到GRP的队列,并由GRP处理。在12016路由器上,有17个ToFab队列(16个单播,外加一个组播)。
第5步 — ToFab BMA将缓冲区排入适当的ToFab队列。此时,缓冲区#Qelem池中的计数器减少1,ToFab队列计数器增加1。
注意:每个线路卡有一个ToFab队列(包括GRP)。 这些队列称为虚拟输出队列(VOQ)。 这些对于避免线头阻塞非常重要。
第6步 — 交换矩阵接口ASIC(FIA)发现输出队列非空。FIA设置为将数据包分段为48字节信元。8字节报头会添加到数据包中,56字节的Cisco信元会通过交换矩阵发送。
传输数据包存储器存储来自交换矩阵并等待传输到物理接口的数据包。此内存也被划分为不同大小的池。
在GRP中,您可以连接到线卡并执行show controller frfab queue命令以显示传输数据包内存。除ToFab输出中的字段外,FrFab输出还显示“接口队列”部分。该命令的输出因传出 LC 上的接口类型和数量而异。
线路卡上每个接口都存在一个此类队列。从特定接口发出的数据包将排入对应的接口队列上。
LC-Slot1#show controller frfab queue ========= Line Card (Slot 2) ======= Carve information for FrFab buffers SDRAM size: 16777216 bytes, address: 20000000, carve base: 2002D100 16592640 bytes carve size, 0 SDRAM bank(s), 0 bytes SDRAM pagesize, 2 carve(s) max buffer data size 9248 bytes, min buffer data size 80 bytes 20052/20052 buffers specified/carved 16581552/16581552 bytes sum buffer sizes specified/carved Qnum Head Tail #Qelem LenThresh ---- ---- ---- ------ --------- 5 non-IPC free queues: 9977/9977 (buffers specified/carved), 49.75%, 80 byte data size 1 101 10077 9977 65535 5986/5986 (buffers specified/carved), 29.85%, 608 byte data size 2 10078 16063 5986 65535 2993/2993 (buffers specified/carved), 14.92%, 1568 byte data size 3 16064 19056 2993 65535 598/598 (buffers specified/carved), 2.98%, 4544 byte data size 4 19057 19654 598 65535 398/398 (buffers specified/carved), 1.98%, 9248 byte data size 5 19655 20052 398 65535 IPC Queue: 100/100 (buffers specified/carved), 0.49%, 4112 byte data size 30 77 76 100 65535 Raw Queue: 31 0 82 0 65535 Interface Queues: 0 0 0 0 65535 1 0 0 0 65535 2 0 0 0 65535 3 0 0 0 65535
以下列表介绍在上一个示例中找到的一些关键字段:
非IPC空闲队列:这些队列是不同大小的数据包缓冲池。当通过交换矩阵接收数据包时,会从这些队列中的一个队列中获取适当大小的缓冲区,然后将数据包复制到该队列中,并将缓冲区放在适当的输出接口队列中。
注意:整个路由器有所需的池。因此,FrFab队列被分割为整个系统的最大MTU。这对于ToFab队列而言是不同的,这些队列被分割为特定线卡的最大MTU。
IPC队列:为从GRP到LC的进程间通信消息保留。
接口队列:这些队列用于接口,而不是插槽编号。最后一个数字(65535)是TX队列限制。此数字控制任何队列的最大长度,并可通过Engine 0线卡上的TX-queue limit命令进行调整。如果遇到某些拥塞,此命令可用于防止出口LC缓冲超出该特定端口的接口队列上配置的数据包数量。确保将此数字配置得足够低,使其不包含此接口的所有FrFab队列。但是,此调整无法控制出站LC上丢弃哪些数据包。有关详细信息,请参阅Cisco 12000系列互联网路由器上忽略的数据包和无内存丢弃故障排除。
此时,思科信元已通过FIA通过交换矩阵传输。
第1步 — 这些Cisco单元是DMA'd在FrFab FIA上进入FIFO,然后进入FrFab BMA上的缓冲区。FrFab BMA是将信元重组到数据包中的BMA。
FrFab BMA如何知道在重新组装信元之前将信元放入哪个缓冲区?这是传入线卡交换引擎做出的另一个决定。由于整个框中的所有队列大小相同且顺序相同,因此交换引擎会通知发送LC将数据包放入其进入路由器的相同编号队列中。
在LC上使用show controller frfab queue命令可以查看FrFab BMA SDRAM队列。
第2步 — 此步骤与ToFab BMA输出基本相同。数据包进入并放入从各自空闲队列出列的数据包中。这些数据包被放入FrFab队列,并在接口队列(每个物理端口有一个队列)或原始Q上入队以进行输出处理。rawQ中不会发生太多情况:每端口组播复制、修改差额轮询(MDRR) — 与分布式加权公平队列(DWFQ)和输出承诺访问速率(CAR)相同。 如果传输队列已满,则丢弃数据包并增加输出丢弃计数器。
第3步 — FrFab BMA等待,直到PLIM的TX部分准备好发送数据包。FrFab BMA执行实际介质访问控制(MAC)重写(请记住,根据思科信元报头中包含的信息),并将数据包DMA转换到PLIM电路中的小(同样是2xMTU)缓冲区。PLIM在适当情况下执行异步传输模式(ATM)分段和重组(SAR)和同步光纤网络(SONET)封装,并传输数据包。