目录

简介

先决条件

要求

使用的组件

规则

背景信息

进程级别和中断级别交换

交换路径

过程交换

快速交换

最佳交换

Cisco 快速转发 (CEF)

分布式快速/最佳交换

分布式 CEF

NetFlow 交换

分布式服务

选择交换路径

监控路由器

相关信息

简介

本文档对影响路由器性能的问题进行了高层次的概述，并指导您参阅其他文档以了解有关这些问题的详细信息。

先决条件

要求

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

使用的组件

本文档中的信息基于以下软件和硬件版本：

- Cisco IOS® 软件版本 12.1。

规则

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

背景信息

路由器的配置方式可能影响其数据包处理性能。对于处理大量流量的路由器，应当了解该设备正执行何种操作、执行操作的方式以及执行操作需要的时间，以便优化其性能。这些信息在配置文件中提供。配置反映数据包流经路由器的方式。次优配置可能使数据包保留在路由器中的时间比所需时间长。持续使用高级别负载，您可能会遇到响应缓慢、拥塞和连接超时的情况。

调整路由器性能时，您的目标是最大程度地减少数据包在路由器内停留的时间。即，最大程度地减少路由器将数据包从传入接口转发到传出接口的时间，并在任何必要的时候避免缓冲和拥塞。在传入数据包到达目标端口的路径上，配置中添加的每个功能都是传入数据包必须在其路径上通过目标端口的又一步骤。

您需要节约的两个主要资源是路由器的 CPU 时间和内存。路由器应该始终具有 CPU 可用性以处理峰值和定期任务。每当 CPU 长时间保持 99% 的利用率，就会严重影响网络稳定性。这一点同样适用于内存可用性：内存必须一直可用。如果路由器内存几乎被全部使用，那么系统缓冲池中将没有空间。这意味着需要处理器注意的数据包（进程交换数据包）一进来就会被丢弃。可以很轻松地想到，如果丢弃的数据包包括接口 keepalive 或重要的路由更新，会发生什么事。

进程级别和中断级别交换

在 IP 网络中，路由器数据包的转发决策是根据路由表内容制订的。搜索路由表时，路由器会查找目标 IP 地址前缀的最长匹配。这是在"流程级别" (被称为流程交换)完成的，表明其他CPU流程中有另一个流程排队时应考虑使用查找功能。结果，该查找时间是无法预测的，并且可能非常长。为了解决此问题，在 Cisco IOS 软件中引入了一些基于 exact-match-lookup 的交换方法。

exact-match-lookup 的主要优点是查找时间是确定的而且很短。路由器用来做出转发决策的时间显著减少，从而使其能在“中断级别”便可做出转发决策。 中断级别的交换意味着当数据包到达时会触发中断，该中断会导致 CPU 延迟其他任务，以便处理该数据包。转发数据包的传统方法（在路由表里寻找最长匹配）不能在中断级别实施，而且必须在进程级别使用。由于多种原因（部分如下所述），不能完全抛弃 longest-match-lookup 方法，因此这两个查找方法在 Cisco 路由器中同时存在。此策略已被推广，现在也应用于 IPX 和 AppleTalk。

为了在中断级别执行 exact-match-lookup，必须转换路由表以使用便于此类查找的内存结构。不同的交换路径使用不同的内存结构。这个所谓的体系结构对查找时间具有重大影响，因此选择最适当的交换路径是一件非常重要的任务。对于需要决定在哪里转发数据包的路由器来说，它需要的基本信息是下一跳地址和传出接口。对于需要决定在哪里转发数据包的路由器来说，它需要的基本信息是下一跳地址和传出接口。它也需要传出接口的封装信息。根据其可扩展性，后者可以存储在相同的或分开的存储器结构内。

以下是执行中断级交换的程序：

1. 查找内存结构以确定下一跳地址和传出接口。

2. 执行开放系统互联 (OSI) 第 2 层重写功能，也称为 MAC 重写，这意味着更改数据包封装来符合传出接口。

3. 将数据包置于传出接口的 tx 环或输出队列。

4. 更新适当的内存结构（缓存中的重置计时器和更新计数器等)。

从网络接口接收到数据包时发生的中断称为“RX 中断”。 只有完成所有上述步骤后才可驳回此中断。如果上面前三个步骤的任意一个步骤都不能执行，则数据包会被发送到下一个交换层。如果下一个交换层是进程交换，则数据包会被置于传入接口的输入队列以完成进程交换，同时驳回中断。由于中断不能被同一级别的中断所中断，并且所有接口会生成同一级别的中断，因此在当前 RX 中断被驳回之前，不会处理其他数据包。

不同的中断交换路径可用分层结构进行组织，从提供最快速查找的路径到提供最慢速查找的路径均包括在内。用于处理数据包的最后手段是进程交换。不是所有的接口和数据包类型都在每个中断交换路径中受支持。通常只有要求限制数据包报头的检查和更改的数据包，才会中断交换。如果数据包有效载荷需要在转发之前进行检查，则无法中断交换。一些中断交换路径可能存在更多特定限制。并且，如果流出接口的第二层连接一定可靠(即它支持重发功能)，信息包不能在中断级别进行处理。

以下是不可中断交换的数据包示例：

- 流向路由器的流量（路由协议流量、简单网络管理协议 (SNMP)、Telnet、简单文件传输协议 (TFTP) 和 ping 等）。 管理流量可以从路由器发出，也可以流向路由器。他们具有与任务相关的特殊进程。

- OSI 第 2 层面向连接的封装（例如，X.25）。 由于有许多指令需要运行，或者需要的计时器和窗口过多，所以某些任务显得过于复杂，以至于中断交换路径不能完成编码。一些示例是诸如加密、局域传输 (LAT) 转换和 Data-Link Switching Plus (DLSW+) 等功能。

交换路径

内部路由器取决于活动转发算法时，信息包将采用该路径。这些也称为“交换算法”或“交换路径”。 高端平台通常比低端平台具有更强大的转发算法，但在默认情况下它们通常处于未激活状态。部分转发算法是在硬件中实施的，部分是在软件实施的，还有一部分是同时在两者中实施的，但是目标都是尽快地将数据包发送出去。

Cisco 路由器上可用的交换算法包括：

转发算法

命令（配置接口模式的问题）

快速交换

ip route-cache

同一接口交换

ip route-cache same-interface

自主交换（仅 7000 个平台）

ip route-cache cbus

硅交换（仅安装了 SSP 的 7000 个平台）

ip route-cache sse

分布式交换（仅支持 VIP 的平台）

ip route-cache distributed

最优交换（仅高端路由器）

ip route-cache optimum

NetFlow 交换

ip route-cache flow

Cisco 快速转发 (CEF)

ip cef

分布式 CEF

ip cef distributed

以上是按性能顺序存储的每个交换路径的简要描述。因为自主交换和硅交换与工程端硬件有关，所以没有讨论。

过程交换

进程交换是处理数据包的最基本方法。数据包被置于与第 3 层协议对应的队列中，然后由调度程序安排相应的进程。进程是您在 show processes cpu 命令输出中看到的进程中的一个（即，IP 数据包中的“ip input”）。 这时，在调度程序将 CPU 分配给对应的进程之前，数据包位于队列中。等待时间取决于等待运行的进程数量和等待处理的数据包数量。然后，根据路由表制定路由决策。更改数据包封装，使其符合传出接口要求，并将数据包安排到正确的传出接口的输出队列中。

快速交换

在快速交换时，CPU 做出中断级转发决策。从路由表派生的信息及关于流出接口的封装信息共同结合，一起创建快速交换的高速缓冲。高速缓冲的每个条目都包括目标 IP 地址、传出接口标识和 MAC 重写信息。快速交换缓存采用二叉树结构。

如果快速交换的速缓存中没有某一个目的地条目，那么当前的信息包必须排队等候流程交换。当适当的流程为此信息包做出转发决策时，它在快速交换的高速缓冲中创建一个条目，并且可以在同一中断级别转发所有到达目的地的连续信息包。

因为这是一个基于目标的高速缓存，所以负载共享只按目标完成。即使路由表能为目标网络提供两个相等开销的路径，每个主机的快速交换高速缓存也只能拥有一个条目。

最佳交换

最佳交换除了使用 256 路多维树 (mtree) 而不是二叉树外，与快速交换基本相同，因而需要更大的内存和更快的高速缓存查找。有关树型结构和快速/最佳/Cisco 快速转发 (CEF) 交换的详细信息，请参阅如何为您的网络选择最佳路由器交换路径。

Cisco 快速转发 (CEF)

之前的交换算法的主要缺点是：

1. 特定目标的第一个数据包总是经过进程交换以初始化快速高速缓存。

2. 快速高速缓存可变得非常大。例如，如果有多条相等成本的路径通往同一个目的地网络，那么如上所述，快速缓存由主机条目组装而不是网络组装。

3. 快速高速缓存和 ARP 表之间没有直接关系。如果 ARP 高速缓存的条目变得无效，则无法使其在快速高速缓存里无效。要避免此问题， 1/20th缓存每分钟随机地无效。高速缓存的这种无效/重新填充可能会成为具有非常大的网络的 CPU 密集型高速缓存。

通过使用两个表，CEF 可解决这些问题：FIB（转发信息库）表和邻接表。邻接表通过第 3 层 (L3) 地址编制索引，并包含转发数据包所需的对应的第 2 层 (L2) 数据。当路由器发现邻接节点时进行填充。FIB 表通过 L3 地址编制索引的 mtree。它根据路由表构建并指向邻接表。

CEF 的另一个优点是数据库结构允许每个目标或每个数据包负载均衡。CEF 主页提供关于 CEF 的详细信息。

分布式快速/最佳交换

分布式快速/最佳交换试图通过将路由决策移到接口处理器 (IP) 的方法来卸载主 CPU（路由/交换处理器 [RSP]）。 只可能在每个接口有专用 CPU 的高端平台上出现（通用接口处理器 [VIP]，线路卡 [LC]）。 在这种情况下，快速高速缓存只是上载到 VIP。收到数据包时，VIP 设法根据该表做出路由决策。如果成功，则直接将数据包排列到传出接口的队列。如果失败，它便将数据包排列在下一条配置交换路径 (optimum switching -> fast switching -> process-switching) 中。

使用分布式交换，可将访问列表复制到 VIP 上，这意味着 VIP 可根据访问列表检查 VIP，而不会遭到 RSP 干预。

分布式 CEF

分布式 CEF (dCEF) 类似于分布式交换，但是表格之间的同步问题更少。dCEF是Cisco IOS软件版本12.0中唯一可用的分布式交换方法。必须了解的是，如果路由器上启用了分布式交换，FIB/邻接表就会在路由器中的所有VIP上传，无论其接口是否配置了CEF/dCEF。

使用 dCEF，VIP 还可以处理访问列表、基于策略的路由数据和速率限制规则等，这些在 VIP 卡上都有提供。Netflow 可以与 dCEF 一起启用，以增强通过 VIP 处理的访问列表。

下表显示对于每个平台而言，哪一种Cisco IOS软件版本支持哪一种交换路径。

交换路径

在低端 (1) 之下

低/中端 (2)

Cisco AS5850

Cisco 7000 w/RSP

Cisco 72xx/71xx

Cisco 75xx

Cisco GSR 12xxx

备注

过程交换

全部

全部

全部

全部

全部

全部

否

初始化交换高速缓存

Fast

否

全部

全部

全部

全部

全部

否

除高端 IP 外所有的默认值

最佳交换

否

否

否

全部

全部

全部

否

12.0 之前的 IP 的高端默认值

Netflow 交换 (3)

否

12.0(2)、12.0T 和 12.0S

全部

11.1CA、11.1CC、11.2、11.2P、11.3、11.3T、12.0、12.0T、12.0S

11.1CA、11.1CC、11.2、11.2P、11.3、11.3T、12.0、12.0T、12.0S

11.1CA、11.1CC、11.2、11.2P、11.3、11.3T、12.0、12.0T、12.0S

12.0(6)S

分布式最优交换

否

否

否

否

否

11.1、11.1CC、11.1CA、11.2、11.2P、11.3 和 11.3T

否

使用 VIP2-20、40、50，从 12.0 不可用。

CEF

否

12.0(5)T

全部

11.1CC、12.0 和 12.0x

11.1CC、12.0 和 12.0x

11.1CC、12.0 和 12.0x

否

从 12.0 开始的 IP 的高端默认值

dCEF

否

否

全部

无

否

11.1CC、12.0 和 12.0x

11.1CC、12.0 和 12.0x

仅在 75xx+VIP 和 GSR 上

(1) 包括 801 至 805。

(2) 包括 806 及以上，1000、1400、1600、1700、2600、3600、3700、4000、AS5300、AS5350、AS5400 和 AS5800 系列。

(3) Cisco 1400、1600 及 2500 平台上的 NetFlow Export V1、V5 和 V8 支持功能，目标是 Cisco IOS 软件版本 12.0(4)T。这些平台的 NetFlow 支持在 Cisco IOS 软件 12.0 主线版本中不可用。

(4) 在这些平台上使用 UHP 的性能影响：RSP720-3C/MSFC4、RSP720-3CXL/MSFC4、7600-ES20-GE3CXL/7600-ES20-D3CXL、SUP720-3BXL/MSFC3 是导致再通行和降低 PE 性能的明确 null。RSP720-3C/MSFC4、RSP720-3CXL/MSFC4 上的吞吐量从 20 Mpps 降低到 12 Mpps，并且 SUP720-3BXL/MSFC3 和 7600-ES20-GE3CXL/7600-ES20-D3CXL 的吞吐量从 48 Mpps 降低到 25 Mpps。

NetFlow 交换

NetFlow 交换是误称，以相同方式配置为交换路径时会加重该错误。实际上，由于 NetFlow 高速缓存不包含或指向第 2 层重写需要的信息，所以 NetFlow 交换不是交换路径。交换决策必须由活动交换路径做出。

使用 NetFlow 交换，路由器按流分类流量。流被定义为指定源和目标端点之间的单向顺序数据包。路由器使用源和目标地址、传输层端口号、IP 协议类型、服务类型 (ToS) 和源接口来定义流。流量的这种分类方式允许路由器只处理流的第一个数据包，而不是根据对 CPU 要求很高的功能进行处理，如大型访问列表、排队、记帐策略和强大的记帐/计费。NetFlow 主页提供详细信息。

分布式服务

在高端平台上，可以将几个 CPU 密集型任务（不仅是数据包交换算法）从主处理器移到与 VIP 卡 (7500) 上的处理器类似的分布式处理器上。 可以将其中的一些任务从通用处理器导出到在专用硬件上实现功能的特定端口适配器或网络模块。

只要可能，通常应将任务从主处理器卸载到 VIP 的处理器。这样可以释放资源并提示路由器性能。可以卸载的一些进程是数据包压缩、数据包加密和加权公平排队。请参阅下表了解可卸载的更多任务。有关服务的完整说明，请参阅 Cisco 7500 上的分布式服务。

服务

功能

基本交换

Cisco 快速转发 IP 分段快速以太通道

VPN

ACL — 扩展和turbo Cisco加密通用路由封装(GRE)隧道IP安全(IPSec)第2层隧道协议隧道(L2TP)

QoS

通过 BGPh 策略路由，NBAR 流量整形 (dTS) 策略 (CAR) 拥塞避免 (dWRED) 保证的最小带宽 (dCBWFQ) 策略传播

多服务

包含 Link Fragmentation and Interleaving 的低延迟队列 FRF 11/12 RTP 报头压缩多链路 PPP

记账

输出记帐 NetFlow 导出优先和 MAC 记帐

负载平衡

CEF 负载平衡多链路 PPP

缓存

WCCP V1 WCCP V2

压缩

L2 SW 和 HW 压缩，L3 SW 和 HW 压缩

组播

组播分布式交换

选择交换路径

基本规则是选择最好的可用交换路径（从最快到最慢）：dCEF、CEF、最优和快速。启用 CEF 或 dCEF 可提供最好的性能。启用 NetFlow 交换可根据您的配置提高或降低性能。如果您有非常大的访问列表，或者如果您需要记帐，或者同时执行两个操作，那么我们建议使用 NetFlow 交换。通常，具有很多 CPU 电源和使用许多功能的边缘路由器会启用 NetFlow。如果您在同一接口上配置多条交换路径，例如快速交换和 CEF，路由器将按照最佳到最差的顺序尝试所有路径（从 CEF 开始，以进程交换结束)。

监控路由器

使用以下命令，查看交换路径是否有效使用，以及路由器的加载方式。

show ip interfaces：此命令概述用于特定接口的交换路径。

Router#show ip interfaces

Ethernet0/0 is up, line protocol is up

Internet address is 10.200.40.23/22

Broadcast address is 255.255.255.255

Address determined by setup command

MTU is 1500 bytes

Helper address is not set

Directed broadcast forwarding is disabled

Outgoing access list is not set

Inbound access list is not set

Proxy ARP is enabled

Security level is default

Split horizon is enabled

ICMP redirects are always sent

ICMP unreachables are always sent

ICMP mask replies are never sent

IP fast switching is enabled

IP fast switching on the same interface is disabled

IP Flow switching is disabled

IP CEF switching is enabled

IP Fast switching turbo vector

IP Normal CEF switching turbo vector

IP multicast fast switching is enabled

IP multicast distributed fast switching is disabled

IP route-cache flags are Fast, CEF

Router Discovery is disabled

IP output packet accounting is disabled

IP access violation accounting is disabled

TCP/IP header compression is disabled

RTP/IP header compression is disabled

Probe proxy name replies are disabled

Policy routing is disabled

Network address translation is disabled

WCCP Redirect outbound is disabled

WCCP Redirect inbound is disabled

WCCP Redirect exclude is disabled

BGP Policy Mapping is disabled

从这个输出中，我们能看到快速交换和 CEF 交换已经启用，而 NetFlow 交换已被禁用。

show processes cpu：此命令显示关于 CPU 负载的有用信息。有关详细信息，请参阅对 Cisco 路由器上高 CPU 利用率进行故障排除。

Router#show processes cpu

CPU utilization for five seconds: 0%/0%; one minute: 0%; five minutes: 0%

PID  Runtime(ms)  Invoked  uSecs    5Sec   1Min   5Min TTY Process

1          28    396653      0   0.00%  0.00%  0.00%   0 Load Meter

2         661     33040     20   0.00%  0.00%  0.00%   0 CEF Scanner

3       63574    707194     89   0.00%  0.00%  0.00%   0 Exec

4     1343928    234720   5725   0.32%  0.08%  0.06%   0 Check heaps

5           0         1      0   0.00%  0.00%  0.00%   0 Chunk Manager

6          20         5   4000   0.00%  0.00%  0.00%   0 Pool Manager

7           0         2      0   0.00%  0.00%  0.00%   0 Timers

8      100729     69524   1448   0.00%  0.00%  0.00%   0 Serial Backgroun

9         236     66080      3   0.00%  0.00%  0.00%   0 Environmental mo

10       94597    245505    385   0.00%  0.00%  0.00%   0 ARP Input

11           0         2      0   0.00%  0.00%  0.00%   0 DDR Timers

12           0         2      0   0.00%  0.00%  0.00%   0 Dialer event

13           8         2   4000   0.00%  0.00%  0.00%   0 Entity MIB API

14           0         1      0   0.00%  0.00%  0.00%   0 SERIAL A'detect

15           0         1      0   0.00%  0.00%  0.00%   0 Critical Bkgnd

16      130108    473809    274   0.00%  0.00%  0.00%   0 Net Background

17           8       327     24   0.00%  0.00%  0.00%   0 Logger

18         573   1980044      0   0.00%  0.00%  0.00%   0 TTY Background

[...]

show memory summary ：此命令的第一批线路提供了关于路由器内存使用和内存/缓冲区的有用信息。

Router#show memory summary

Head    Total(b)     Used(b)     Free(b)   Lowest(b)  Largest(b)

Processor   8165B63C     6965700     4060804     2904896     2811188     2884112

I/O    1D00000     3145728     1770488     1375240     1333264     1375196

[...]

show interfaces stat 和 show interfaces switching：这两个命令显示了路由器使用哪条路径，以及流量如何交换。

Router#show interfaces stat

Ethernet0

Switching path    Pkts In   Chars In   Pkts Out  Chars Out

Processor      52077   12245489      24646    3170041

Route cache          0          0          0          0

Distributed cache          0          0          0          0

Total      52077   12245489      24646    3170041

Router#show interfaces switching

Ethernet0

Throttle count          0

Drops         RP          0         SP          0

SPD Flushes       Fast          0        SSE          0

SPD Aggress       Fast          0

SPD Priority     Inputs          0      Drops          0

Protocol       Path    Pkts In   Chars In   Pkts Out  Chars Out

Other    Process          0          0        595      35700

Cache misses          0

Fast          0          0          0          0

Auton/SSE          0          0          0          0

IP    Process          4        456          4        456

Cache misses          0

Fast          0          0          0          0

Auton/SSE          0          0          0          0

IPX    Process          0          0          2        120

Cache misses          0

Fast          0          0          0          0

Auton/SSE          0          0          0          0

Trans. Bridge    Process          0          0          0          0

Cache misses          0

Fast         11        660          0          0

Auton/SSE          0          0          0          0

DEC MOP    Process          0          0         10        770

Cache misses          0

Fast          0          0          0          0

Auton/SSE          0          0          0          0

ARP    Process          1         60          2        120

Cache misses          0

Fast          0          0          0          0

Auton/SSE          0          0          0          0

CDP    Process        200      63700        100      31183

Cache misses          0

Fast          0          0          0         0

Auton/SSE          0          0          0         0

相关信息

- 对 Cisco 路由器上的 CPU 使用率过高进行故障排除

- show processes 命令

- 技术支持和文档 - Cisco Systems