简介
本文档说明如何识别总线错误崩溃,以及如何根据您的Cisco路由器的处理器类型来诊断并排除这些故障。
先决条件
要求
Cisco建议您在阅读本文前先阅读路由器崩溃故障排除。
使用的组件
本文档中的信息基于以下软件和硬件版本:
-
所有的 Cisco IOS® 软件版本
-
所有 Cisco 路由器
注意:本文档不适用于Cisco Catalyst交换机或MGX平台。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
规则
有关文档约定的更多信息,请参考 Cisco 技术提示约定。
识别总线错误崩溃
当处理器尝试访问不存在(软件错误)、或者没有正确回应(硬件问题)的存储位置时,系统遇到总线错误。如果路由器如果没重新启动或手工重新载入,总线错误可以通过路由器所提供的show version命令的输出结果来进行识别。
如果您有来自Cisco设备的show version或show technical-support命令(从启用模式)的输出,您可以使用它显示潜在问题和解决方法。要使用该工具,您必须是注册客户、已登录并已启用JavaScript。
Router uptime is 2 days, 21 hours, 30 minutes
System restarted by bus error at PC 0x30EE546, address 0xBB4C4
System image file is "flash:igs-j-l.111-24.bin", booted via flash
.........
在控制台提示符处,总线错误期间也会出现以下错误消息:
*** System received a Bus Error exception ***
signal= 0xa, code= 0x8, context= 0x608c3a50
PC = 0x60368518, Cause = 0x20, Status Reg = 0x34008002
.........
之后,路由器重新加载。但是,在某些情况下,路由器会进入崩溃和重载循环,需要手动干预才能打破这种循环。
另外一个相关问题是通用接口处理器(VIP)故障。如果出现此问题,则会记录类似于下面的错误消息:
%VIP2 R5K-1-MSG: slot0 System reloaded by a Bus Error exception
%VIP2 R5K-1-MSG: slot0 caller=0x600BC974
%VIP2 R5K-1-MSG: slot0 System exception: sig=10, code=0x408,
context=0x605B51E0
最后,另外一种总线错误造成系统崩溃类型是Cisco 12000系列互联网路由器上的线路卡崩溃。如果出现这个问题,则类似于下面的错误消息将会记录在show context输出中:
Router#show context
...
CRASH INFO: Slot 1, Index 1, Crash at 11:27:15 utc Wed May 16 2001
VERSION:
GS Software (GLC1-LC-M), Version 12.0(16.5)S, EARLY DEPLOYMENT MAINTENANCE
INTERIM SOFTWARE
TAC Support: http://www.cisco.com/pcgi-bin/ibld/view.pl?i=support
Compiled Thu 29-Mar-01 17:12 by ninahung
Card Type: 3 Port Gigabit Ethernet, S/N
System exception: SIG=10, code=0x2008, context=0x40D8DF44
System restarted by a Bus Error exception
STACK TRACE:
-Traceback= 40165800 4038D0FC 4025C7BC 4026287C 4029581C 402EECF8 400C0144
CONTEXT:
$0 : 00000000, AT : 00000000, v0 : 00000044, v1 : 0FE00020
a0 : 00000000, a1 : 0FE00000, a2 : 00000000, a3 : 39EC6AAB
t0 : 00000030, t1 : 34008D01, t2 : 34008100, t3 : FFFF00FF
t4 : 400C01E8, t5 : 00000001, t6 : 00000001, t7 : 00000001
s0 : 40DCDD20, s1 : 0FE00000, s2 : 00000000, s3 : 000005DC
s4 : 00000000, s5 : 0FE00020, s6 : 00000004, s7 : 414CF120
t8 : 41680768, t9 : 00000000, k0 : 00000000, k1 : FFFF8DFD
gp : 40CB9780, sp : 4105BFE8, s8 : 41652BA0, ra : 4038D0FC
EPC : 0x40165800, SREG : 0x34008D03, Cause : 0x00002008
ErrorEPC : 0xBFC22B94
-Process Traceback= No Extra Traceback
要了解更多细节,请参见 “Cisco 12000系列互联网路由器上的线路卡崩溃故障排除”
如果您有思科设备的show context命令输出,可以使用思科CLI分析器揭示潜在问题并进行修复。要使用思科 CLI 分析器,您必须是注册客户、已登录并已启用 JavaScript。
排除总线错误崩溃故障
第一件要做的事就是找出当总线错误发生的时候路由器试图访问的存储位置(也称为“地址”或者“地址操作数”)。利用这条信息,您就能够得到提示,判断故障到底是出在Cisco ISO软件还是路由器硬件。在示例“System restarted by bus error at PC 0x30EE546, address 0xBB4C4”中,路由器尝试访问的内存位置是0xBB4C4。不要将它同上面的程序计数器(PC)值混淆。
第二件需要做的事情就是确定路由器中的处理器类型。路由器的内存地址位置根据处理器和类型的不同而不同。Cisco路由器中主要有两类处理器:
一旦确认了地址和处理器类型之后,您就可以开始进行更详细的故障诊断与排除处理。
解决 68000 处理器平台上的总线错误崩溃
知道总线错误时路由器所访问的地址之后,就可以使用 show region 命令来确定地址所对应的存储器位置。如果总线错误崩溃所报告的地址并不落在show region输出中所显示的范围之内,则这意味着路由器试图访问一个无效的地址。这就表明是Cisco IOS软件的问题。使用思科CLI分析器(仅限于注册客户)对show stacks命令的输出进行解码并识别导致总线错误的Cisco IOS软件bug。
从另一个角度来说,如果地址落在show region输出的范围内,则意味着路由器访问了一个有效的内存地址,但是对应于该地址的硬件却没有正确响应。这就意味着出现了硬件问题。
这里是 show region 输出的一个例子:
Router#show region
Region Manager:
Start End Size(b) Class Media Name
0x00000000 0x007FFFFF 8388608 Local R/W main
0x00001000 0x0001922F 98864 IData R/W main:data
0x00019230 0x000666B3 316548 IBss R/W main:bss
0x000666B4 0x007FEFFF 7965004 Local R/W main:heap
0x007FF000 0x007FFFFF 4096 Local R/W main:flhlog
0x00800000 0x009FFFFF 2097152 Iomem R/W iomem
0x03000000 0x037FFFFF 8388608 Flash R/O flash
0x0304033C 0x037A7D3F 7764484 IText R/O flash:text
注意:在某些早期的Cisco IOS软件版本中,此命令不可用。show region 输出是Cisco IOS 软件版本 12.0(9)中 show tech-support 输出的一部分。
地址以十六进制格式显示。“开始”和“结束”范围内的地址是有效的内存地址。
Main对应于主存储器或者是动态RAM(DRAM)。
iomem对应于输入/输出(I/O)内存,这意味着不同平台使用不同的部件。例如,DRAM用于Cisco 2500,而共享的RAM(SRAM)则用于Cisco 4000。
仍然以前面的示例为例, System restarted by bus error at PC 0x30EE546, address 0xBB4C4,这个总线错误崩溃来自Cisco 2500路由器,输出显示show region。0xBB4C4相当于0x000BB4C4。使用show region输出,此地址在“main”的范围内,或者更具体地说,在“main:heap”或0x000666B4-0x007FEFFF的范围内。正如前面所提到的,“main”对应于主存储器或者DRAM,因而需要检查DRAM芯片。
如果是一个新的路由器,或者如果路由器被从一个位置移到另外一个位置,则存储器芯片常常会丢失。重新安装存储器芯片或者将存储器稳固地推入插槽内可能是一个较好的办法。大多数情况下,这样做就可以解决这一类型的故障。
对于那些地址没有落入show region地址范围的总线错误崩溃,请使用思科CLI分析器对show stacks命令的输出进行解码,并识别导致总线错误的Cisco IOS软件bug。如果您不能确认哪个bug ID可以匹配或者哪个Cisco IOS软件版本含有针对该问题的解决方法,则将您的Cisco IOS软件升级到您的版本系列中最新的版本也是一个办法,这常常可以解决问题,因为最新版本中常常已经包括了对大量bug的修复程序。
如果您有思科设备的show stacks或show technical-support(从启用模式)命令的输出,可以使用思科CLI分析器揭示潜在问题并进行修复。要使用思科 CLI 分析器,您必须是注册客户、已登录并已启用 JavaScript。
解决 RISC 处理器平台上的总线错误崩溃
在继续阅读本部分之前,建议您先阅读对68000处理器平台上的总线错误崩溃进行故障排除部分。
在RISC处理器上,Cisco IOS软件使用虚拟地址,通过使用转换旁路缓冲器(TLB)可以将虚拟地址翻译为物理地址。因而,RISC处理器上所报告的总线错误地址是虚拟地址,而不是68000处理器上所使用的物理地址。
show region命令的输出必须用于检查总线错误所报告的地址。为了解释这个情况,让我们看一看下面的例子:
System was restarted by bus error at PC 0x60104864, address 0xC
采用下面的 show region 命令的输出,您就可以校验0xC并非一个有效的虚拟地址,从而可以判定总线错误是由于软件问题所导致。使用思科CLI分析器(仅限于注册客户)对show stacks或show technical-support(从启用模式)命令的输出进行解码,并识别导致总线错误的Cisco IOS软件bug。
使用show region 命令的另外一个优势是,存储器映像取决于安装在路由器中的存储器的大小。例如,如果您有64 MB的DRAM(64 x 1024 x 1024 = 67108864字节= 0x4000000字节),则64M DRAM的范围就是0x60000000-0x63FFFFFF。这可以用 show region 命令加以确认:
Router#show version | i of memory
cisco RSP2 (R4700) processor with 65536K/2072K bytes of memory.
Router#show region
Region Manager:
Start End Size(b) Class Media Name
0x40000000 0x40001FFF 8192 Iomem REG qa
0x40002000 0x401FFFFF 2088960 Iomem R/W memd
0x48000000 0x48001FFF 8192 Iomem REG QA:writethru
0x50002000 0x501FFFFF 2088960 Iomem R/W memd:(memd_bitswap)
0x58002000 0x581FFFFF 2088960 Iomem R/W memd:(memd_uncached)
0x60000000 0x63FFFFFF 67108864 Local R/W main
0x60010908 0x60C80B11 13042186 IText R/O main:text
0x60C82000 0x60F5AF1F 2985760 IData R/W main:data
0x60F5AF20 0x610E35FF 1607392 IBss R/W main:BSS
0x610E3600 0x611035FF 131072 Local R/W main:fastheap
0x61103600 0x63FFFFFF 49269248 Local R/W main:heap
0x80000000 0x83FFFFFF 67108864 Local R/W main:(main_k0)
0x88000000 0x88001FFF 8192 Iomem REG QA_k0
0x88002000 0x881FFFFF 2088960 Iomem R/W memd:(memd_k0)
0xA0000000 0xA3FFFFFF 67108864 Local R/W main:(main_k1)
0xA8000000 0xA8001FFF 8192 Iomem REG QA_k1
0xA8002000 0xA81FFFFF 2088960 Iomem R/W memd:(memd_k1)
如果在0x65FFFFFF出现总线错误造成系统崩溃,则 show region 输出就会将内存大小考虑进去,并告诉您它是一个非法地址(软件bug)。
小结:
-
使用 show region 命令来校验总线错误崩溃所指示的地址是否在路由器所使用的地址范围内。
-
如果地址落入一个虚拟地址范围内,则根据这个范围更换硬件。
-
如果地址不落在虚拟地址范围内,则使用思科CLI分析器(仅限注册客户)对show stacks或show technical-support(从启用模式)命令的输出进行解码,并识别导致总线错误的Cisco IOS软件bug。
-
可以重点考虑安装您目前正在运行的Cisco IOS软件系列最新的维护版本。
总线错误崩溃的特殊类型
特殊类型总线错误崩溃的一种是,当死机是由被已损坏的程序计数器(PC)所导致。PC值是总线错误发生时处理器正在执行的命令的位置。当总线错误是由于被破坏的PC所导致的时候,下述消息就会出现在控制台上:
%ALIGN-1-FATAL: Corrupted program counter
pc=0x0, ra=0x601860BC, sp=0x60924540, at=0x60224854
在这种情况下,PC已经跳到地址0x0(可能是因为一个空指针),但是这并非命令所处的位置。这是一种软件问题,因而需要用show region 命令进行检查。
在其它RISC平台上(Cisco 3600、4500等),当跳到非法PC的时候,您会遇到一个SegV异常,而非总线错误。
另外一种常见的总线错误崩溃是PC值等于地址值的情况。例如:
System returned to ROM by bus error at PC 0x606B34F0, address 0x606B34F0
从crashinfo文件:
Unexpected exception, CPU signal 10, PC = 0x606B34F0
$0 : 00000000, AT : A001A24A, v0 : 00000000, v1 : 00000000
a0 : 00000000, a1 : 429CC394, a2 : 00000000, a3 : 62544344
t0 : 6069F424, t1 : 3400FF00, t2 : FFFFFFFB, t3 : 00000000
t4 : 606B8E68, t5 : 80000000, t6 : AA5C1022, t7 : 62FDE9D4
s0 : 62300000, s1 : 6281A1B8, s2 : 80007E20, s3 : 00000001
s4 : 00000001, s5 : 00000000, s6 : 62310000, s7 : 62544344
t8 : 62FDEA1C, t9 : 0D0D0D0D, k0 : 623079C0, k1 : 00000014
gp : 620B9E20, sp : 61E7E300, s8 : 00000000, ra : 606B8E68
EPC : 606B34F0, ErrorEPC : 606B8E68, SREG : 3400FF02
Cause 00004018 (Code 0x6): Instruction Bus Error exception
-Traceback= 606B34F0 606B8E68
注意,k1寄存器的值是0x14(十六进制),用十进制表示等于20。它指向一个缓存奇偶校验异常错误。在这个特殊的例子里,奇偶校验错误并没有被正确处理,并且正被总线错误所遮盖。路由器已经由于软件总线错误而死机,因而不能再处理缓存奇偶校验异常错。
您应该将这种死机考虑为常规处理器奇偶校验错崩溃,并且按照 处理器内存奇偶校验错误(PMPE)建议进行修正。
您还应该考虑将Cisco IOS软件版本升级到可修复CSCdv68388-“Change cache error exception handler to resume not crash”错误的版本,这个bug在Cisco IOS软件12.2(10)以后的版本中都已得到修复。
更多的关于总线错误异常启动环路故障排除技术
这一节的重点是总线错误异常的一些通用故障排除技术:
-
加载的Cisco IOS软件不支持已安装的硬件
-
软件故障
-
硬件装配错误
-
硬件故障
加载的Cisco IOS软件不支持已安装的硬件
校验所有网卡都可以被Cisco IOS软件支持。Software Advisor (仅限注册用户使用) 可以为您提供硬件所需要的最低版Cisco IOS软件。此外,如果您的路由器是Cisco 7200或者Cisco 7500系列路由器等支持根镜像的路由器,则还要校验引导闪存 镜像是否支持安装的硬件。
软件故障
在2600和3600路由器上,路由器的I / O内存可以配置为主存储器的一个百分数。如果I / O内存设置对于已经安装的网络模块或者WAN接口卡(WIC)来说不合适,则2600 / 3600平台在启动的时候就可能出现问题,而且可能会因为总线错误而死机。
如果最近对软件配置做了更改,而且路由器正在启动循环中,则可能是因为软件bug导致的问题。
如果路由器不能够启动,则您可以跳过配置,而是不是配置导致的问题。执行下列步骤:
-
在启动的前60秒钟向路由器发送中断序列以进入ROMMON。
-
从ROM监视器,使用 confreg 命令将配置寄存器更改为某个设置(如0x2142)来忽略路由器的配置:
rommon 1 > confreg 0x2142
You must reset or power cycle for new config to take effect
rommon 2 > reset
如果路由器启动没有出错,则是因配置问题而导致错误。检查Cisco IOS软件以及硬件是否都能够支持您的配置。如果支持,则使用Bug Tookit(仅限注册用户)来识别您遇到的软件Bug。可以重点考虑安装您目前正在运行的Cisco IOS软件系列最新的维护版本。
硬件装配错误
如果因总线错误异常而导致不断重启,则有可能是硬件安装位置错误所导致的。对于低端平台如3600或者4000等路由器,可以重新安装网络模块或者网络处理器。
对于高端平台如7200或者7500等路由器,则重新安装由于总线错误异常而正在重装的处理器、VIP、端口适配器或者线路卡。
硬件故障
包含在总线错误中的信息无助于排除硬件故障。这样,取出卡并重新插入以找出问题硬件是非常重要的。这里有一些推荐的步骤来找到问题:
![7949-crashes-buserror-troubleshooting-00.jpeg](/c/dam/en/us/support/docs/ios-nx-os-software/ios-software-releases-121-mainline/7949-crashes-buserror-troubleshooting-00.jpeg)
**以上故障排除步骤完成以后,如果路由器不再经历连续循环,此问题则有可能由网络模块插错位置引起。我们建议您24小时监控路由器,以确保路由器继续运行,而不会再遇到问题。
开立服务请求时要收集的信息
如果您在采用了上述步骤之后仍然需要支持,并且希望建立Cisco 计时支持案例,请确认已经包括下述针对总线错误或者总线错误异常的信息: |
- 在建立案例前所执行的故障诊断及处理措施
- show technical-support 输出(如果可能,在启动模式下)
- show log 输出或控制台捕获信息(如果可用)
- crashinfo 文件 (如果出现而且还没有包括在 show technical-support 输出内)
- show region 输出(如果还没有包括在 show technical-support 输出内)
请以非压缩的纯文本格式 (.txt) 将收集的数据附加到请求中。通过使用Case Query工具进行上载,您可以将此信息附加到您的案例(仅限于注册用户)。如果不能访问Case Query工具,您可以附上关于案例的相关信息,并在标题栏注明案例编号,然后通过电子attach@cisco.com发送出去。 注意:在收集上述信息之前,除非需要排除总线错误异常,否则请勿手动重新加载路由器或重新启动路由器,因为这可能会导致确定问题根本原因所需的重要信息丢失。 |
相关信息