目录

简介

硬件/软件平台选择

扩展和性能注意事项

BGP对等体的数量

地址系列

更新组的数量

RPL（路由策略）的复杂性

更新频率

TCP MSS和接口/路径MTU

双RP路由器上的NSR

慢速对等体

下一跳触发延迟

已验证的多维BGP RR缩放示例

设计注意事项

监控BGP关键绩效指标(KPI)

监控数据路径转发器

监控XRv9000数据平面代理(DPA)

监控ASR9000网络处理器(NP)

监控LPTS

监控SPP

监控NetIO

监控XIPC队列

监控BGP输入和输出队列

监控BGP消息速率

监控CPU利用率

监控TCP统计信息

监控内存利用率

监控BGP进程性能

监控BGP收敛

简介

本文档介绍实现边界网关协议(BGP)路由反射器(RR)可实现最大规模的主要贡献者以及有关BGP RR性能监控的指导。

硬件/软件平台选择

大规模BGP RR通常不在传输由Internet服务提供商提供的服务的数据包的转发路径中。因此，主要在数据路径中转发数据包的BGP RR和路由器的硬件要求是不同的。标准路由器内置有强大的数据路径转发元素和相对温和的控制路径元素。BGP RR在控制计划中执行其所有任务。

在Cisco IOS® XR系列产品中，您可以为BGP RR角色选择3种类型的硬件/软件平台：

物理思科IOS XR路由器

思科IOS XRv 9000设备

思科IOS XRv 9000路由器（也称为XRv9k）

- 中度控制平面容量（通常在2到6个分配给RP XR VM的CPU核心之间）

- 未使用的数据路径容量

- 高控制平面容量（在基于Cisco UCS M5的设备上，36个CPU核心专用于RP XR VM）

- 数据路径容量和控制路径容量之间的均等分配。

- XRv9k映像在裸机上运行，以获得最佳性能

- 可定制控制平面容量

- 使用BGP RR映像时，数据路径和控制路径功率之间的等分值。

- 额外的虚拟化层会影响性能。

至撰写本文时止，XRv9k设备是BGP RR的最佳平台选择，因为它可提供最高的控制平面容量和最高性能。

扩展和性能注意事项

由于数据路径元素的性能很少取决于比例，因此数据平面实体所支持的比例相对容易表示。例如，无论活动TCAM条目的数量如何，TCAM查找都会花费相同的时间。

受支持的控制平面实体规模通常更为复杂，因为规模和性能是相互关联的。考虑包含1M路由的BGP RR。BGP进程维护此BGP表必须执行的工作取决于：

1. 有多少个BGP对等体处于活动状态？

2. 哪些地址系列处于活动状态？

3. 它们如何分布到更新组中？

4. RPL（路由策略）的复杂性

5. 更新频率（传入更新和传出更新-通告间隔）。

6. TCP MSS、接口/路径MTU -调整这将有助于提高性能

7. 如果是双RP，则是否启用了NSR

8. 任何已知的慢速对等体，不在单独的更新组中

9. 下一跳触发延迟值

BGP对等体的数量

BGP对等体的数量通常是第一个而且很不幸的，在考虑BGP规模时经常会想到唯一的事情。虽然在不提及BGP对等体数量的情况下无法表示支持的BGP规模，但它并不是最重要的因素。许多其他方面也同样重要。

地址系列

地址系列的类型(AF)是BGP性能考虑的一个重要因素，因为在典型部署中，它影响单个路由的大小。 可封装到单个TCP数据段中的IPv4路由数显著高于VPNv4路由数。因此，对于相同规模的BGP表更改，IPv4 BGP RR比VPNv4 BGP RR需要做的工作更少。显然，在每条路由都添加了大量社区的部署中，AF之间的差异会变得不太显著，但每条路由的规模会更大，需要予以考虑。

更新组的数量

BGP进程为同一更新组的所有成员准备单一更新。然后，TCP进程将更新数据拆分为所需数量的指向更新组每个成员的TCP数据段（取决于TCP MSS）。您可以使用show bgp update-group命令查看活动的更新组及其成员。通过为要位于同一更新组中的对等体组创建公共出站策略，可以影响更新组成员中的对等体及其数量。BGP RR向大量BGP RR客户端发送的单个更新可能会触发TCP ACK的突发，这些数据包可在Cisco IOS XR路由器的本地数据包传输服务(LPTS)组件中丢弃。

RPL（路由策略）的复杂性

BGP使用的路由策略的复杂性会影响BGP进程的性能。必须根据配置的路由策略评估接收或发送的每个路由。一个非常长的策略需要在该操作上花费许多CPU周期。包含正则表达式的路由策略在处理时尤其繁重。正则表达式可帮助您以较少的行数来表示路由策略，但处理时需要比不使用正则表达式的等效路由策略更多的CPU周期。

更新频率

更新频率对BGP规模有重要影响。更新数量通常难以预测。您可以使用“advertisement-interval”命令来影响更新频率，该命令可设置发送BGP)路由更新之间的最小间隔。面向iBGP对等体的默认值为0秒，面向eBGP对等体的默认值为30秒。

TCP MSS和接口/路径MTU

在高规模、高更新频率的环境中，将更新拆分为许多TCP数据段会给TCP进程资源带来很大的压力。较大的路径MTU和较大的TCP MSS对BGP和TCP性能更好。

双RP路由器上的NSR

NSR是一种非常好的冗余功能，但它确实会影响BGP性能。在思科IOS XR路由器上，两个RP同时从入口线卡上的NPU接收每个BGP更新，这意味着活动RP无需花费时间将更新复制到备用RP。但是，活动RP生成的每个更新都必须发送到备用RP并从那里发送到BGP对等体。这允许备用RP始终在序列号和确认号中保持最新，但是会对整体BGP性能产生影响。这就是为什么建议BGP RR是单RP路由器的原因。

慢速对等体

缓慢的对等体可能会降低更新组中所有成员的更新速度，因为BGP进程必须将该更新保留在其内存中，直到所有对等体都确认该更新。如果您知道某些对等体速度要慢得多（例如，传统网络部分的路由器），请先将其分隔到更新组。默认情况下，思科IOS XR通过系统日志消息报告对等体速度缓慢。您可以创建静态慢速对等体（从不与他人共享更新组），或者通过在全局或每邻居配置模式下使用BGPslow-peer配置命令微调动态慢速对等体行为。有关此内容的进一步详细信息，请参阅Cisco xrdocs.io门户上的排除由于IOS-XR上的路由策略不佳而导致的BGP收敛缓慢故障。

下一跳触发延迟

如果多个BGP下一跳在短时间间隔内发生更改，并且在具有大量路由的地址系列(AF)中配置了关键下一跳触发延迟值0，则必须在每个下一跳更改事件上执行AF的完整漫游。重复遍历该AF会增加具有更低临界下一跳触发延迟值的地址系列中的收敛时间。您可以通过运行“show bgp all nexthops”命令查看下一跳触发延迟值。

已验证的多维BGP RR缩放示例

多维标度结果，特别是控制平面特征的结果，高度依赖于特定的测试环境。如果改变某些参数，测试结果可能会有显著差异。

参数

价值

价值

Platform

XRv9k设备（基于UCS M5）

ASR9902

IOS XR版本

7.5.2 + Umbrella SMU，用于思科漏洞ID CSCwf09600 。

（Cisco IOS XR版本7.9.2及更高版本中集成了此umbrella SMU的组件）

7.11.2

对等体

VPNv4 eBGP：2500

VPNv4 iBGP：1700

VPNv4 iBGP：2000

BGP路由

每会话：200

合计：40万

每条路由的路径数：1

每会话：750

VPNv4:1.36M

VPNv6:150k

IPv4:950k

IPv6:200k

总计：约260万

每条路由的路径数：1

IGP路由

1万(ISIS)

1万(ISIS)

BGP更新组

1

1

BGP计时器

默认

默认

LPTS BGP已知策略器速率

50,000

25,000

tcp num-thread configuration

16 16

16 16

BGP send-buffer-size

默认

默认

关键绩效指标(KPI)摘要

- 具有最高输入和输出数据包速率的测试用例：

- 输入：49.4kpps

- 输出：95kpps

- ==> LPTS丢弃（监察器为50kpps）

- ==> NetIO客户端无丢包现象

- ==>最大XIPC队列大小(BGP)：1362

- ==>最大XIPC队列大小(TCP)：1248

- 输入数据包速率最高的测试用例：

- 输入：16030数据包/秒

- 输出：31数据包/秒

- ==> LPTS和NetIO客户端无丢包现象

- ==>最大XIPC队列大小(BGP)：378

- ==>最大XIPC队列大小(TCP)：1021

- 输出数据包速率最高的测试用例：

- 输入：12172数据包/秒

- 输出： 23465 pkts/s

- ==> LPTS和NetIO客户端无丢包现象

- ==>最大XIPC队列大小(BGP)：109

- ==>最大XIPC队列大小(TCP)：1518

设计注意事项

在网络中放置BGP RR有两种方法：

1. 集中式/平面BGP RR设计。

2. 分布式/分层BGP RR设计。

在集中式/平面设计中，网络中的所有BGP RR客户端都使用一组保存完全相同信息的BGP RR设备（通常是一对）建立BGP对等。此方法实施简单，在中小型网络中效果良好。BGP表中的任何更改都会快速传播到所有BGP RR客户端。随着BGP RR客户端数量的增长，当BGP RR设备上的TCP连接数量增长到其性能受到影响的程度时，设计可能会达到规模限制。

在分布式/分层设计中，网络分为多个区域。区域中的所有路由器都与一组包含完全相同信息的BGP RR设备（通常是一对）建立BGP对等。这些BGP RR设备充当另一组（通常是一对）BGP RR设备的BGP RR客户端。此设计方法可实现轻松的网络扩展，同时使每个单一BGP RR上的TCP连接数保持在一定限制内。

另一个设计注意事项是定制BGP更新接收方的范围。根据BGP RR客户端之间的VRF分布，值得考虑RT约束路由分布。如果所有BGP RR客户端的接口都位于同一个VRF中，则RT约束路由分配不会带来很多好处。但是，如果VRF在所有BGP RR客户端之间稀疏分配，则使用RT约束路由分配可显著减少ƒBGP RR上bgp进程的负载。

监控BGP关键绩效指标(KPI)

监控BGP RR的关键绩效指标(KPI)对于确保网络正常运行非常重要。

网络拓扑的重大变化（例如，主要的DWDM链路抖动）可能会触发路由更新，从而产生流向BGP RR和/或来自BGP RR的过多流量。发送到BGP RR的重要流量通常携带以下信息：

1. 来自BGP对等体的更新。

2. BGP对等体生成的TCP ACK，用于响应BGP RR发送的更新，反之亦然

本文档的此部分说明在典型BGP RR上需要监控的KPI，并介绍如何区分两种重要的BGP流量类型中的哪一种导致高控制平面流量速率。

路由器内BGP数据包的路径如下图所示：

传送

以太网控制器-（数据包）->数据路径转发器-（数据包）-> LPTS -（数据包）-> SPP -（数据包） -> NetIO -（数据包）-> TCP -（消息）-> BGP

注入

BGP -（消息）-> TCP -（数据包）-> NetIO -（数据包）-> SPP -（数据包） ->数据路径转发器-（数据包）->以太网控制器

KPI可以分为：

基本版：

1. 数据路径转发器

2. LPTS（硬件传送策略器设置、接受计数器和丢弃计数器）

3. SPP

4. NetIO

5. IPC队列(NetIO <==> TCP <==> BGP)

6. BGP InQ/OutQ大小

可选：

1. CPU利用率

2. 内存利用率

3. TCP统计信息

4. BGP进程性能

5. BGP融合

监控数据路径转发器

在XRv9000上，数据路径转发器是数据平面代理(DPA)，而在ASR9000平台上，它是网络处理器(NP)。

监控XRv9000数据平面代理(DPA)

用于查看DPA的负载和统计信息的有用命令是：

show controllers dpa statistics global

此命令显示所有非零计数器，通过这些计数器，您可以了解从网络接口传送到RP CPU、从RP CPU向网络接口注入的数据包的类型和数量以及丢弃的数据包的数量：

RP/0/RP0/CPU0:xrv9k-01#show controllers dpa statistics global Index Debug Count ---------------------------------------------------------------------------- 350 TBPG L2 mailbox events 1 Index Punt Count ---------------------------------------------------------------------------- 1500 CDP 46790 1503 ARP 212 1611 IFIB 595305 1776 LLDP 94037 2001 IPv4 incomplete Tx adjacency 2 Index Inject Count ---------------------------------------------------------------------------- 744 CLNS multicast from fabric pre-route 321250 749 IPv4 from fabric 273993 765 Inject to fabric 595245 766 Inject to port 141033 Index Drop Count ---------------------------------------------------------------------------- 416 Egress UIDB in down state 1 474 IPv4 egress UIDB down 2 673 Pre-route PIT lookup missed 2

监控ASR9000网络处理器(NP)

用于查看系统中每个NP的负载和统计信息的有用命令包括：

show controllers np load all

show controllers np counters all

ASR9000上的NP具有一组丰富的计数器，可显示处理和丢弃的数据包的数量、速率和类型。

RP/0/RSP0/CPU0:ASR9k-B#show controllers np load all Node: 0/0/CPU0: ---------------------------------------------------------------- Load Packet Rate NP0: 0% utilization 937 pps NP1: 0% utilization 538 pps RP/0/RSP0/CPU0:ASR9k-B#

RP/0/RSP0/CPU0:ASR9k-B#show controllers np counters all Node: 0/0/CPU0: ---------------------------------------------------------------- Show global stats counters for NP0, revision v4 Last clearing of counters for this NP: NEVER Read 92 non-zero NP counters: Offset Counter FrameValue Rate (pps) ------------------------------------------------------------------------------------- 16 MDF_TX_LC_CPU 25475368 10 17 MDF_TX_WIRE 681957877 267 21 MDF_TX_FABRIC 683500690 267 33 PARSE_FAB_RECEIVE_CNT 681767730 267 37 PARSE_INTR_RECEIVE_CNT 1323024637 517 41 PARSE_INJ_RECEIVE_CNT 13949634 5 45 PARSE_ENET_RECEIVE_CNT 677655725 265 49 PARSE_TM_LOOP_RECEIVE_CNT 49331192 19 53 PARSE_TOP_LOOP_RECEIVE_CNT 1520846 1 109 RSV_DROP_EGR_UIDB_NO_MATCH 10 0 146 RSV_DROP_IPV4_RXADJ_DROP 1 0 164 RSV_DROP_ING_LAG_NO_MATCH 3 0 241 RSV_DROP_MPLS_LEAF_NO_MATCH 1312 0 <. . .>

监控LPTS

由于标准BGP RR不在转发路径中，因此网络接口上收到的所有数据包都会被发送到控制平面。在将数据包传送至控制平面之前，BGP RR上的数据路径元素会执行少量简单操作。由于数据路径元素不太可能是拥塞点，因此线路卡上需要监控的唯一元素是LPTS统计信息。

请注意，对于XRv9k，硬件统计信息映射到vPP

命令:

show lpts pifib hardware police location <location> | inc "Node|flow_type|BGP"

示例：

RP/0/RP0/CPU0:xrv9k-01#sh lpts pifib hardware police location 0/0/CPU0 | i "Node|flow_type|BGP" Node 0/0/CPU0: flow_type priority sw_police_id hw_policer_addr Cur. Rate burst static_avgrate avgrate_type AggrAccepts AggrDrops TOS Value BGP-known high 6 220 50000 1250 2500 Global 16401392 0 01234567 BGP-cfg-peer medium 7 221 4000 1000 2000 Global 355976 1563 01234567 BGP-default low 8 222 3000 750 1500 Global 5212380 0 01234567 RP/0/RP0/CPU0:xrv9k-01#

查找内容:

如果发现汇聚丢包相对于已知的BGP流类型有显著跳跃，请开始查找已触发此类大规模控制平面更改的网络拓扑更改。

遥测数据路径：

Cisco-IOS-XR-lpts-pre-ifib-oper:lpts-pifib

注意：可以清除LPTS统计信息计数器。您的监控系统必须考虑这种可能性。

监控SPP

SPP是路由处理器或线卡CPU上第一个通过内部交换矩阵接收从NP或DPA传送的数据包的实体，也是软件数据包处理中的最后一点，然后将其移交给交换矩阵以注入到NP或DPA中。

用于SPP监控的相关命令：

show spp node-counters

show spp client

show spp node-counters  命令显示传送/注入数据包的速率，它易于阅读和理解。对于BGP会话，相关计数器位于活动RP的client/punt  下方client/inject  上。

show spp client  命令输出更丰富，可以更详细地显示排入客户端队列/丢弃的数据包的数量，以及高水位线。

RP/0/RP0/CPU0:xrv9k-01#show spp node-counters 0/RP0/CPU0: socket/rx Punted packets: 595305 Punt bulk reads: 6 Punt non-bulk reads: 595293 Management packets: 74200158 Management bulk reads: 1775930 Management non-bulk reads: 70031734 ------------------------------- socket/tx Injected packets: 595245 Management packets: 139939168 ------------------------------- xrv9k/classify Forwarded to SPP clients: 74795463 ------------------------------- client/inject Injected from client: 140534413 Non-bulk injects: 140534413 ------------------------------- client/punt punted to client: 74795371 no client found - send to defa: 92 ------------------------------- 0/0/CPU0: <. . .>

RP/0/RP0/CPU0:xrv9k-01#show spp client Sat Apr 20 17:11:40.725 UTC 0/RP0/CPU0: Clients ======= <. . .> netio, JID 254 (pid 4591) ---------------------------------------------------------- Reconnect Pending: F, Exited: F, Keep Queues: F, Pakman Client: T Quota Current: 0, Limit: 16384, Drops 0 Queues: Key Cur Max Enqueues High Watermark (Timestamp) Drops 0xffffffff 0 10 0 0 (22:13:52.195 Feb 21 24 UTC) 0 0x03000006 0 2048 0 0 (22:13:52.196 Feb 21 24 UTC) 0 0x03000007 0 3072 414881 1 (23:03:30.721 Feb 21 24 UTC) 0 0x03000008 0 1024 5 1 (13:41:28.389 Mar 13 24 UTC) 0 0x03000009 0 2048 180411 1 (23:03:31.565 Feb 21 24 UTC) 0

监控NetIO

虽然LPTS监察器只显示相应监察器接受或丢弃的数据包计数，但在NetIO级别，我们可以看到传送到RP CPU的数据包的速率。因为在典型的BGP RR上，大多数收到的数据包是BGP数据包，所以整体NetIO速率非常接近地表示收到的BGP数据包的速率。

Command:

show netio rates

示例：

RP/0/RP0/CPU0:xrv9k-01#show netio rates Netio packet rate for node 0/RP0/CPU0 ----------------------------------- Current rate (updated 0 seconds ago): Input: 7845 pkts/s Output: 10570 pkts/s Driver Output: 10598 pkts/s 1 minute rate (updated 0 seconds ago): Input: 7825 pkts/s Output: 10542 pkts/s Driver Output: 10569 pkts/s 5 minute rate (updated 0 seconds ago): Input: 7997 pkts/s Output: 10677 pkts/s Driver Output: 10704 pkts/s RP/0/RP0/CPU0:xrv9k-01#

查找内容:

- 如果发现NetIO速率显著提高，请开始查找已触发此类大规模控制平面更改的网络拓扑更改。

遥测数据路径：

- 不适用，因为遥测必须流式传输计数器值，而不是速率。BGP已知LPTS监察器接受计数器可用于遥测收集器，以估计从已知对等体接收的BGP数据包的平均速率。

监控XIPC队列

在传送路径上，NetIO从LPTS接收的数据包会传递到TCP和BGP。监控这些队列非常重要：

1. TCP高优先级队列，NetIO通过该队列将数据包传送到TCP

2. BGP控制队列

3. BGP数据队列

在注入路径上，数据包由TCP创建并传递到NetIO。监控这些队列非常重要：

1. OutputL XIPC队列

命令：

show netio clients show processes bgp | i "Job Id" show xipcq jid <bgp_job_id> show xipcq jid <bgp_job_id> queue-id <n>

示例：

NetIO到TCP，从NetIO的角度来看：

RP/0/RP0/CPU0:xrv9k-01#show netio clients <. . .> Input Punt XIPC InputQ XIPC PuntQ ClientID Drop/Total Drop/Total Cur/High/Max Cur/High/Max <. . .> tcp L 0/340774 0/0 L 0/10/12800 0/0/0 H 0/44774091 H 0/784/12800

TCP到NetIO，从NetIO的角度来看：

RP/0/RP0/CPU0:xrv9k-01#show netio clients <. . .> XIPC queues Dropped/Queued Cur/High/Max ------------------------------------------------------------ OutputL 124860/9355257 0/14000/14000

NetIO到TCP，从TCP进程的角度查看：

RP/0/RP0/CPU0:xrv9k-01#show processes tcp | i "Job Id"

Job Id: 430

RP/0/RP0/CPU0:xrv9k-01#show xipcq jid 430 Mon Apr 17 16:16:11.315 CEST Id Name Size Cur Size Produced Dropped HWM ------ ------------------------------- ------ --------- ----------- ----------- -------- 17 XIPC_xipcq_12_0_9854_6506_i... 60000 0 39010269 0 960 16 XIPC_xipcq_12_0_9854_6506_i... 24000 0 31518436 0 1364 15 XIPC_tcp_124 3200 0 0 0 0 14 XIPC_tcp_125 9600 0 0 0 0 13 XIPC_tcp_psb_0 25600 0 0 0 0 10 XIPC_tcp_iq_9 102400 0 9486010 0 312 12 XIPC_tcp_iq_8 102400 0 8892274 0 280 9 XIPC_tcp_iq_5 102400 0 8291392 0 289 11 XIPC_tcp_iq_7 102400 0 9700123 0 319 8 XIPC_tcp_iq_6 102400 0 9378703 0 332 7 XIPC_tcp_iq_3 102400 0 7221706 0 261 6 XIPC_tcp_iq_4 102400 0 9791070 0 308 4 XIPC_tcp_ctrl_iq_1 4266 0 0 0 0 5 XIPC_tcp_iq_2 102400 0 9699027 0 295 3 XIPC_tcp_ctrl_iq_0 4266 0 209909 0 9 2 XIPC_tcp_i1 12800 0 39460564 0 784 1 XIPC_tcp_i0 12800 0 212540 0 10

TCP到BGP：

RP/0/RP0/CPU0:xrv9k-01#show processes bgp | i "Job Id" Job Id: 1078 RP/0/RP0/CPU0:xrv9k-01#show xipcq jid 1078 Mon Apr 17 16:09:33.046 CEST Id Name Size Cur Size Produced Dropped HWM ------ ------------------------------- ------ --------- ----------- ----------- -------- 2 XIPC_xipcq_12_0_9854_6506_i... 60000 2 35546667 0 15034 1 XIPC_xipcq_12_0_9854_6506_i... 24000 0 1369029 0 50 RP/0/RP0/CPU0:xrv9k-01#

BGP数据队列：

RP/0/RP0/CPU0:xrv9k-01#show xipcq jid 1078 queue-id 1 XIPC_xipcq_12_0_9854_6506_inst_1_data_toapp: Magic: 12344321 Version: 0 SHM Size: 192392 Owner PID: 9854 Owner JID: 1078 Queue ID: 1 Owner MQ handle: 483 User Context: 0x64 Interrupt Flag: 0 Sent-on-full Flag: 0 Max Queue Size: 24000 Queue Size: 0 Client Queue Size: 24000 High watermark: 50 Last Trigger Sent: Mon Apr 17 16:11:10.009 CEST MQ Send Errors: 0 Priority Queues: Prio Size Drops Total ---------- ---------- ---------- ---------- Unspec 24000 0 0 Normal 24000 0 1396159 Medium 24000 0 0 High 24000 0 0 Crucial 24000 0 0 RP/0/RP0/CPU0:xrv9k-01#

BGP控制队列：

RP/0/RP0/CPU0:xrv9k-01#show xipcq jid 1078 queue-id 2 XIPC_xipcq_12_0_9854_6506_inst_1_ctrl_toapp: Magic: 12344321 Version: 0 SHM Size: 480392 Owner PID: 9854 Owner JID: 1078 Queue ID: 2 Owner MQ handle: 485 User Context: 0x64 Interrupt Flag: 0 Sent-on-full Flag: 0 Max Queue Size: 60000 Queue Size: 0 Client Queue Size: 60000 High watermark: 15034 Last Trigger Sent: Mon Apr 17 16:12:49.483 CEST MQ Send Errors: 0 Priority Queues: Prio Size Drops Total ---------- ---------- ---------- ---------- Unspec 60000 0 0 Normal 60000 0 37313633 Medium 60000 0 0 High 60000 0 0 Crucial 60000 0 0 RP/0/RP0/CPU0:xrv9k-01#

查找内容:

- 相关队列中不能有丢包

- 在XIPC队列统计信息中，高水位线(HWM)不能超过队列大小的50%

为了更好的跟踪高水印值的演进，每次读取后必须清除高水印值。请注意，这不仅会清除HWM计数器，还会清除所有队列统计信息。用于清除XIPC队列统计信息的命令格式为：  clear xipcq statistics queue-name <queue_name>

由于队列名称通常包含进程ID (PID)，因此队列名称会在进程重新启动后更改。

用于清除相关队列统计信息的一些命令示例：

clear xipcq statistics queue-name XIPC_tcp_i0

clear xipcq statistics queue-name XIPC_tcp_i1

clear xipcq statistics queue-name XIPC_xipcq_12_0_9854_6506_inst_1_data_toapp

clear xipcq statistics queue-name XIPC_xipcq_12_0_9854_6506_inst_1_ctrl_toapp

遥测路径：

- 没有适用于XIPC的遥测传感器路径。

监控BGP输入和输出队列

BGP维护每个BGP对等体的输入和输出队列。当TCP将数据传递到BGP时，数据会保存在InQ中，但BGP尚未处理这些数据。数据位于OutQ中，而BGP等待TCP将数据拆分为数据包并进行传输。BGP InQ/OutQ的即时大小很好地指示了BGP进程的繁忙程度。

命令:

show bgp <AFI> <SAFI> summary

示例：

RP/0/RP0/CPU0:xrv9k-01#show bgp all all summary Address Family: VPNv4 Unicast ----------------------------- BGP router identifier 192.168.0.1, local AS number 65000 BGP generic scan interval 60 secs BGP table state: Active Table ID: 0x0 BGP main routing table version 2208096 BGP scan interval 60 secs BGP is operating in STANDALONE mode. Process RcvTblVer bRIB/RIB LabelVer ImportVer SendTblVer StandbyVer Speaker 2208096 2208096 2208096 2208096 2208096 2208096 Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd 10.0.0.2 0 65000 180 601022 2208096 0 0 02:56:18 100 10.0.0.3 0 65000 180 601022 2208096 0 0 02:56:18 100 10.0.0.4 0 65000 180 601022 2208096 0 0 02:56:21 100 10.0.0.5 0 65000 180 601022 2208096 0 0 02:56:21 100 10.0.0.6 0 65000 180 601022 2208096 0 0 02:56:18 100

查找内容:

- 当网络稳定时，InQ/OutQ的大小必须为零。在交换更新时，它会快速更改。

- InQ/OutQ大小不能随时间单调增加。

遥测路径：

- Cisco-IOS-XR-ipv4-bgp-oper：bgp

监控BGP消息速率

如果网络拓扑不稳定，某些BGP邻居可以连续发送更新或撤消。然后，BGP RR必须将此路由表更改复制到其所有RR客户端，成千上万次。因此，监控从邻居处接收的消息速率以跟踪不稳定源非常重要。

命令:

show bgp <AFI> <SAFI> summary

示例：

RP/0/RP0/CPU0:xrv9k-01#show bgp all all summary Address Family: VPNv4 Unicast ----------------------------- BGP router identifier 192.168.0.1, local AS number 65000 BGP generic scan interval 60 secs BGP table state: Active Table ID: 0x0 BGP main routing table version 2208096 BGP scan interval 60 secs BGP is operating in STANDALONE mode. Process RcvTblVer bRIB/RIB LabelVer ImportVer SendTblVer StandbyVer Speaker 2208096 2208096 2208096 2208096 2208096 2208096 Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd 10.0.0.2 0 65000 180 601022 2208096 0 0 02:56:18 100 10.0.0.3 0 65000 180 601022 2208096 0 0 02:56:18 100 10.0.0.4 0 65000 180 601022 2208096 0 0 02:56:21 100 10.0.0.5 0 65000 180 601022 2208096 0 0 02:56:21 100 10.0.0.6 0 65000 180 601022 2208096 0 0 02:56:18 100

RR客户端队列的MsgSent量大致相同，但某些邻居的MsgRcvd数可能高于其他邻居。您必须捕获此命令的多个快照才能评估消息速率。

一旦您识别了违规的对等体，便可以通过 show bgp neighbor <neighbor> detail  和 show bgp neighbor <neighbor> performance-statistics  或show bgp recent-prefixes  等其他命令尝试了解哪些前缀正在抖动以及它是始终相同的前缀还是不同的前缀。

注意：MsgRcvd和MsgSent计数器是每个邻居的，而不是每个地址系列的。因此，当运行类似 show bgp all all summary 的命令时，您会在各地址系列的各部分中看到每个邻居的相同计数器。它们不代表该地址系列接收/发送/发送到该邻居的消息数，而是跨地址系列的消息数。

监控CPU利用率

必须在每台路由器上监控CPU使用率，但在具有大量专用于控制平面的CPU内核的路由器上，某些读数可能不直观。在具有大量专用于路由处理器(RP)的CPU内核的BGP RR上（对于XRv9k设备），活动线程运行在不同的CPU内核上，而许多CPU内核保持空闲。因此，某些CPU内核可能非常繁忙，但计算出的所有CPU内核的总体CPU使用率仍为中等。

因此，要通过CLI正确监控CPU内核利用率，请使用 show processes cpu thread  命令。

监控TCP统计信息

Cisco IOS®维护每个TCP会话的详细统计信息。CLI命令show tcp brief  可用于显示所有现有TCP会话的列表。在此摘要输出中，您可以看到每个TCP会话的以下信息：

- PCB：唯一TCP会话标识符。

- VRF-ID：存在会话的VRF的ID。

- 要查看对应的VRF名称，请运行此命令：

- show cef vrf all summary | utility egrep "^VRF:|Vrfid" | utility egrep -B1 <VRF-ID>

- Recv-Q：接收Q的即时大小。接收队列保留从NetIO接收的数据包。tcp进程从数据包中提取数据并将其发送到对应的应用程序。

- Send-Q：发送Q的即时大小。发送队列保留从应用程序接收的数据。tcp进程将数据分为TCP数据段（由协商的最大数据段大小- TCP MSS指示），将每个数据段封装到相应地址系列的第3层报头（IPv4或IPv6）并将数据包发送到NetIO。

- 本地地址：与TCP套接字关联的本地IPv4或IPv6地址。通常情况下，处于LISTEN状态的TCP会话会被绑定到“any”IP地址，在IPv4或IPv6情况下，该地址分别表示为“0.0.0.0”或“：”。

- 外部地址：与TCP套接字相关联的远程IPv4或IPv6地址。通常情况下，处于LISTEN状态的TCP会话会被绑定到“any”IP地址，在IPv4或IPv6情况下，该地址分别表示为“0.0.0.0”或“：”。

- 状态：TCP会话状态。可能的TCP会话状态包括：LISTEN、SYNSENT、SYNRCVD、ESTAB、LASTACK、CLOSING、CLOSEWAIT、FINWAIT1、FINWAIT2、TIMEWAIT、CLOSED。

由于已知BGP端口号是179，因此可以将显示的TCP会话限制为与BGP应用相关联的TCP会话。

示例：

RP/0/RSP0/CPU0:ASR9k-B#show tcp brief | include "PCB|:179 " PCB VRF-ID Recv-Q Send-Q Local Address Foreign Address State 0x00007ff7d403bde0 0x60000000 0 0 :::179 :::0 LISTEN 0x00007ff7d403b020 0x60000002 0 0 :::179 :::0 LISTEN 0x00007ff7d403d130 0x60000000 0 0 192.168.0.4:50144 192.168.0.5:179 ESTAB 0x00007ff7a4025650 0x60000000 0 0 0.0.0.0:179 0.0.0.0:0 LISTEN 0x00007ff7a4024a50 0x60000002 0 0 0.0.0.0:179 0.0.0.0:0 LISTEN

可以使用显示的PCB值获取特定TCP会话的统计信息。提供对TCP进程统计信息的深入了解的CLI命令：

全局：

show tcp statistics clients location <active_RP>

show tcp statistics summary location <active_RP>

每个PCB：

show tcp brief | i ":179"

show tcp detail pcb <pcb> location 0/RP0/CPU0

show tcp statistics pcb <pcb> location <active_RP>

全局TCP统计信息命令显示TCP会话的整体运行状况。除了数据包统计信息(in/out)外，您还可以看到是否有具有校验和错误的数据包、格式错误的数据包、由于身份验证错误而丢弃的数据包、无序数据包、具有窗口后数据的数据包，这可以指示TCP对等体的行为。

在per-PCB命令中，您可以看到TCP会话的重要参数，如MSS、最大往返时间等。

show tcp detail pcb命令输出中的相关计数器包括：

- Retrans Timer Starts：指示重新传输计时器启动的次数。

- Retrans Timer Wakeups：表示重新传输计时器用尽多少次，从而触发TCP数据段的重新传输。

- 当前发送队列大小（以字节为单位）：来自对等体的未确认字节。

- 当前接收队列大小（以字节/数据包为单位）：应用(BGP)尚未读取的字节/数据包。

- 无序字节：由于TCP接收窗口中的孔而在存储队列中排队的字节。

RP/0/RSP0/CPU0:ASR9k-B#show tcp detail pcb 0x4a4400e4 ============================================================== Connection state is ESTAB, I/O status: 0, socket status: 0 Established at Sat Apr 20 18:26:26 2024 PCB 0x4a4400e4, SO 0x4a42c0ac, TCPCB 0x4a43b708, vrfid 0x60000000, Pak Prio: Normal, TOS: 64, TTL: 255, Hash index: 402 Local host: 10.10.10.229, Local port: 179 (Local App PID: 856311) Foreign host: 10.10.10.254, Foreign port: 46980 (Local App PID/instance/SPL_APP_ID: 856311/0/0) Current send queue size in bytes: 0 (max 16384) Current receive queue size in bytes: 0 (max 65535) mis-ordered: 0 bytes Current receive queue size in packets: 0 (max 60) Timer Starts Wakeups Next(msec) Retrans 2795 0 0 SendWnd 1341 0 0 TimeWait 0 0 0 AckHold 274 2 0 KeepAlive 333 1 299983 PmtuAger 0 0 0 GiveUp 0 0 0 Throttle 0 0 0 FirstSyn 0 0 0 iss: 2030796738 snduna: 2034498828 sndnxt: 2034498828 sndmax: 2034498828 sndwnd: 3291 sndcwnd: 4200 irs: 285455091 rcvnxt: 285455710 rcvwnd: 64917 rcvadv: 285520627

SRTT: 162 ms, RTTO: 415 ms, RTV: 253 ms, KRTT: 0 ms

minRTT: 0 ms, maxRTT: 247 ms ACK hold time: 200 ms, Keepalive time: 300 sec, SYN waittime: 30 sec Giveup time: 0 ms, Retransmission retries: 0, Retransmit forever: FALSE Connect retries remaining: 0, connect retry interval: 0 secs <...> RP/0/RSP0/CPU0:ASR9k-B#

监控内存利用率

BGP路由表存储在BGP进程堆内存中。路由表存储在RIB进程堆内存中。

用于堆内存监控的有用命令：

show memory summary

show memory summary detail

show memory-top-consumers

show memory heap summary all

遥测传感器路径：

Cisco-IOS-XR-nto-misc-oper:memory-summary/nodes/node/detail

FIB将转发条目存储在共享内存空间中。

用于共享内存监控的有用命令：

show memory summary

show memory summary detail

show shmwin summary

监控BGP进程性能

提供有关BGP进程性能的内部数据的有用命令：

show bgp process performance-statistics

show bgp process performance-statistics detail

监控BGP收敛

另一个有用命令是显示BGP融合整体状态的命令： show bgp convergence

当网络稳定时，您会看到以下类似内容：

RP/0/RP0/CPU0:ASR9k-B#show bgp convergence Mon Dec 18 13:55:47.976 UTC Converged. All received routes in RIB, all neighbors updated. All neighbors have empty write queues. RP/0/RP0/CPU0:ASR9k-B#