hda: irq timeout: status=0xd0 {Busy}

发现dmesg很多以下问题: ide-cd: cmd 0x3 timed out hda: irq timeout: status=0xd0 { Busy } ide: failed opcode was: unknown hda: ATAPI reset complete hda: irq timeout: status=0xd0 { Busy } ide: failed opcode was: unknown hda: ATAPI reset complete hda:
发现dmesg很多以下问题:

ide-cd: cmd 0x3 timed out
hda: irq timeout: status=0xd0 { Busy }
ide: failed opcode was: unknown
hda: ATAPI reset complete
hda: irq timeout: status=0xd0 { Busy }
ide: failed opcode was: unknown
hda: ATAPI reset complete
hda: DMA disabled
hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hda: drive_cmd: error=0x04 { AbortedCommand }
ide: failed opcode was: 0xec
hda: DMA disabled
hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hda: drive_cmd: error=0x04 { AbortedCommand }
ide: failed opcode was: 0xec
解决方法:

关闭 DMA

如果有玩OS系统的朋友,会知道DMA的作用,是在减少传输资料时,耗用到CPU的资源。像是硬碟和光碟机都有这样的设计,因为大部分的资料传输,可能是不需要用到CPU咚恪V皇前奄Y料区块搬来搬去而已!(个人理解,有误请告知补正!)

目前的LINUX系统,预设应该是支援DMA enable的。
当我看到我的OS萤幕出现了:

ide-cd: cmd 0x3 timed out
hda: irq timeout: status=0xd0 { Busy }
ide: failed opcode was: unknown
hda: ATAPI reset complete
hda: irq timeout: status=0xd0 { Busy }
ide: failed opcode was: unknown
hda: ATAPI reset complete
hda: DMA disabled
hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hda: drive_cmd: error=0x04 { AbortedCommand }
ide: failed opcode was: 0xec
hda: DMA disabled
hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hda: drive_cmd: error=0x04 { AbortedCommand }
ide: failed opcode was: 0xec
那个hda设备一直出现 irq 错误和 ATAPI reset !
我查了一下可能原因,好判断这个错误对我的SERVER有没有严重的影响。
原来就是hda光碟机,它的DMA打开了,但OS却不支援!才有这样的错误发生。

机器:HP ProLiant DL580 G5
作业系统:centos5
光碟机hda是8X的DVD。

不过官网给的solution只是在开机设定中把DMA关闭。
我要的是能够把DMA即时开关的指令和KNOW-HOW。

OK,往下看吧!

一、检查系统中的DMA选项是否已被啓动
Linux中的hdparm命令是用来进行操控硬碟、光碟机之类设备的,
用hdparm -i /dev/hda可以列出IDE可能支持的DMA模式,如:

DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2
二、啓动DMA支援
方法1:
在lilo.conf中加入:idex=dma,其中x代表硬碟序号,其取值范围0-3,
分别代表系统中的四个IDE硬碟设备。

方法2:
使用hdparm命令,hdparm -d1 /dev/hda 其中d1表示开啓DMA模式,
可以利用加到rc.locl中以便每次啓动OS时能使用DMA模式传输资料。

三、关闭DMA
命令格式:
hdparm -d0 /dev/hda
就把DMA传输模式关闭了,但能用DMA,为什么要关闭呢?

还有,对于支持UDMA传输模式硬碟,也可以参考以述方法进行配置,
但要确保硬碟控制器及硬碟都支持UDMA,最后你必须要有一根能支持UDMA传输的线路

另个说法:

原因估计是核心版本太低,IDE 模块对DMA支持不好,当系统满足一定I/O要求(与负载似乎无关),就会自动关闭DMA支持。根据过往的经验,这个错误不会影响系统的正常运行。而且,正常运行的服务器一般不会经常操作光驱设备,所以,我们可以把DMA支持禁用。
修改Grub启动菜单,加入ide=nodma,禁止IDE使用DMA接口。这会对光驱的速度,及系统I/O有点影响。
例如,修改:

引用

kernel /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet
为:

引用

kernel /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet ide=nodma

以上内容转自 : http://bailkai.blog.163.com/blog/static/82011736201041573650357/

添加新评论 »