目录

简介

开始使用前

规则

先决条件

使用的组件

背景

分开缓冲区算法

接收 信息包 内存

ToFab BMA 中的数据包流

传输数据包内存

FrFab BMA 中的数据包流

相关信息

简介

本文档说明如何读取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 列中的数字为当前排入虚拟输出队列的数据包数量。

ToFab BMA 中的数据包流

第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系列互联网路由器上忽略的数据包和无内存丢弃故障排除。

FrFab BMA 中的数据包流

此时，思科信元已通过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)封装，并传输数据包。

相关信息

- 在Cisco 12000系列互联网路由器体系结构上已忽略的数据包和没有内存丢包的故障排除

- Cisco 12000 系列互联网路由器上输入丢弃故障排除

- 如何理解 show controller fia 命令的输出

- 技术支持 - Cisco Systems