此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档说明如何识别总线错误崩溃,以及如何根据您的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系列互联网路由器上的线路卡崩溃故障排除”
如果从Cisco设备获得show context命令的输出,则可以使用Cisco CLI Analyzer显示潜在问题和修复方法。要使用思科 CLI 分析器,您必须是注册客户、已登录并已启用 JavaScript。
第一件要做的事就是找出当总线错误发生的时候路由器试图访问的存储位置(也称为“地址”或者“地址操作数”)。利用这条信息,您就能够得到提示,判断故障到底是出在Cisco ISO软件还是路由器硬件。在示例中,“System restarted by bus error at PC 0x30EE546, address 0xBB4C4”,路由器尝试访问的内存位置为0xBB4C4。请勿将其与上面的程序计数器(PC)值混淆。
第二件需要做的事情就是确定路由器中的处理器类型。路由器的内存地址位置根据处理器和类型的不同而不同。Cisco路由器中主要有两类处理器:
68000处理器
以下是show version输出的一部分,该输出表示路由器具有68000处理器:
cisco 2500 (68030) processor (revision D) with 8192K/2048K bytes of memory.
带有68000处理器的路由器平台包括:
Cisco 1000 系列路由器
Cisco 1600 系列路由器
Cisco 2500 系列路由器
Cisco 4000 系列路由器
Cisco 7000(RP)系列路由器上的路由处理器(RP)模块
精简指令集运算(RISC)处理器
以下是show version输出的一部分,该输出表明路由器具有RISC处理器:
cisco 3640 (R4700) processor (revision 0x00) with 49152K/16384K bytes of memory.
R(在R 4700内)指示RISC处理器。
具有RISC处理器的路由器平台包括
思科 3600 系列路由器
Cisco 4500 系列路由器
Cisco 4700 系列路由器
在Cisco 7500系列和Cisco 7000(RSP 7000)系列路由器上的路由交换机处理器(RSP)模块
Cisco 7200系列路由器上的网络处理器引擎(NPE)模块
Cisco 7600系列路由器或者Catalyst 6000交换机上的多层交换机特性卡(MSFC)
Cisco 10000系列互联网路由器上的性能路由引擎(PRE)模块
Cisco 12000系列互联网路由器上的千兆路由处理器(GRP)模块
一旦确认了地址和处理器类型之后,您就可以开始进行更详细的故障诊断与排除处理。
知道总线错误时路由器所访问的地址之后,就可以使用 show region 命令来确定地址所对应的存储器位置。如果总线错误报告的地址不在show region输出中显示的范围内,这意味着路由器尝试访问无效地址。这就表明是Cisco IOS软件的问题。使用Cisco CLI Analyzer(仅注册客户)对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-0x007FEFF的范围内。正如前面所提到的,“main”对应于主存储器或者DRAM,因而需要检查DRAM芯片。
如果是一个新的路由器,或者如果路由器被从一个位置移到另外一个位置,则存储器芯片常常会丢失。重新安装存储器芯片或者将存储器稳固地推入插槽内可能是一个较好的办法。大多数情况下,这样做就可以解决这一类型的故障。
对于总线错误崩溃且地址不在show region 地址范围内,请使用Cisco CLI分析器解码show stacks 命令的输出,并识别导致总线错误的Cisco IOS软件Bug。如果您不能确认哪个bug ID可以匹配或者哪个Cisco IOS软件版本含有针对该问题的解决方法,则将您的Cisco IOS软件升级到您的版本系列中最新的版本也是一个办法,这常常可以解决问题,因为最新版本中常常已经包括了对大量bug的修复程序。
如果从Cisco设备获得show stacks或show technical-support(从启用模式)命令的输出,则可以使用Cisco CLI Analyzer来显示潜在问题和修复方法。要使用思科 CLI 分析器,您必须是注册客户、已登录并已启用 JavaScript。
建议在继续此部分之前,先阅读68000处理器平台上总线错误崩溃故障排除部分。
在RISC处理器上,Cisco IOS软件使用虚拟地址,通过使用转换旁路缓冲器(TLB)可以将虚拟地址翻译为物理地址。因而,RISC处理器上所报告的总线错误地址是虚拟地址,而不是68000处理器上所使用的物理地址。
必须使用show region 命令的输出来检查总线错误报告的地址。为了解释这个情况,让我们看一看下面的例子:
System was restarted by bus error at PC 0x60104864, address 0xC
采用下面的 show region 命令的输出,您就可以校验0xC并非一个有效的虚拟地址,从而可以判定总线错误是由于软件问题所导致。使用Cisco CLI Analyzer(仅限注册客户)对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 命令来校验总线错误崩溃所指示的地址是否在路由器所使用的地址范围内。
如果地址落入一个虚拟地址范围内,则根据这个范围更换硬件。
如果地址不在虚拟地址范围内,请使用Cisco CLI Analyzer(仅限注册客户)解码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软件支持。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、端口适配器或者线路卡。
包含在总线错误中的信息无助于排除硬件故障。这样,取出卡并重新插入以找出问题硬件是非常重要的。这里有一些推荐的步骤来找到问题:
**以上故障排除步骤完成以后,如果路由器不再经历连续循环,此问题则有可能由网络模块插错位置引起。我们建议您24小时监控路由器,以确保路由器继续运行,而不会再遇到问题。
如果您在采用了上述步骤之后仍然需要支持,并且希望建立Cisco 计时支持案例,请确认已经包括下述针对总线错误或者总线错误异常的信息: |
---|
注意:在收集上述信息之前,请勿手动重新加载或重新启动路由器,除非对总线错误异常进行故障排除时需要这样做,因为这可能导致确定问题根本原因所需的重要信息丢失。 |