linux dma read错误,failed command: READ DMA

[   50.641091] ata17.00: irq_stat 0x40000001

[   50.641092] ata17.00: failed command: READ DMA

[   50.641095] ata17.00: cmd c8/00:02:02:00:00/00:00:00:00:00/e0 tag 14 dma 1024 in

[   50.641095]          res 51/04:02:02:00:00/00:00:00:00:00/e0 Emask 0x1 (device error)

[   50.641095] ata17.00: status: { DRDY ERR }

[   50.641096] ata17.00: error: { ABRT }

[   50.641231] ata17.00: configured for UDMA/133 (device error ignored)

[   50.641241] ata17: EH complete

[   50.641281] ata17.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0

[   50.641282] ata17.00: irq_stat 0x40000001

[   50.641283] ata17.00: failed command: READ DMA

[   50.641285] ata17.00: cmd c8/00:02:02:00:00/00:00:00:00:00/e0 tag 17 dma 1024 in

[   50.641285]          res 51/04:02:02:00:00/00:00:00:00:00/e0 Emask 0x1 (device error)

[   50.641286] ata17.00: status: { DRDY ERR }

[   50.641287] ata17.00: error: { ABRT }

[   50.641422] ata17.00: configured for UDMA/133 (device error ignored)

[   50.641432] ata17: EH complete

[   50.641472] ata17.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0

[   50.641472] ata17.00: irq_stat 0x40000001

[   50.641474] ata17.00: failed command: READ DMA

[   50.641476] ata17.00: cmd c8/00:02:02:00:00/00:00:00:00:00/e0 tag 20 dma 1024 in

[   50.641476]          res 51/04:02:02:00:00/00:00:00:00:00/e0 Emask 0x1 (device error)

[   50.641476] ata17.00: status: { DRDY ERR }

[   50.641477] ata17.00: error: { ABRT }

[   50.641613] ata17.00: configured for UDMA/133 (device error ignored)

[   50.641624] sd 16:0:0:0: [sdg]

[   50.641624] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

[   50.641625] sd 16:0:0:0: [sdg]

[   50.641625] Sense Key : Aborted Command [current] [descriptor]

[   50.641626] Descriptor sense data with sense descriptors (in hex):

[   50.641629]         72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00

[   50.641630]         00 00 00 02

[   50.641630] sd 16:0:0:0: [sdg]

[   50.641631] Add. Sense: No additional sense information

[   50.641631] sd 16:0:0:0: [sdg] CDB:

[   50.641633] Read(10): 28 00 00 00 00 02 00 00 02 00

[   50.641635] ata17: EH complete

[   50.641678] ata17.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0

[   50.641679] ata17.00: irq_stat 0x40000001

[   50.641680] ata17.00: failed command: READ DMA

[   50.641682] ata17.00: cmd c8/00:04:04:00:00/00:00:00:00:00/e0 tag 23 dma 2048 in

[   50.641682]          res 51/04:04:04:00:00/00:00:00:00:00/e0 Emask 0x1 (device error)

[   50.641683] ata17.00: status: { DRDY ERR }

[   50.641683] ata17.00: error: { ABRT }

[   50.641816] ata17.00: configured for UDMA/133 (device error ignored)

[   50.641826] ata17: EH complete

[   50.641871] ata17.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0

[   50.641871] ata17.00: irq_stat 0x40000001

[   50.641873] ata17.00: failed command: READ DMA

[   50.641875] ata17.00: cmd c8/00:04:04:00:00/00:00:00:00:00/e0 tag 24 dma 2048 in

[   50.641875]          res 51/04:04:04:00:00/00:00:00:00:00/e0 Emask 0x1 (device error)

[   50.641876] ata17.00: status: { DRDY ERR }

[   50.641876] ata17.00: error: { ABRT }

[   50.642011] ata17.00: configured for UDMA/133 (device error ignored)

[   50.642022] ata17: EH complete

[   50.642067] ata17.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0

[   50.642067] ata17.00: irq_stat 0x40000001

[   50.642068] ata17.00: failed command: READ DMA

[   50.642071] ata17.00: cmd c8/00:04:04:00:00/00:00:00:00:00/e0 tag 25 dma 2048 in

[   50.642071]          res 51/04:04:04:00:00/00:00:00:00:00/e0 Emask 0x1 (device error)

[   50.642071] ata17.00: status: { DRDY ERR }

[   50.642072] ata17.00: error: { ABRT }

在启动时刷出大量这样的错误日志,确认是硬盘坏掉了,最终是能启动起来,但是要刷大约120秒的这样的信息,这个盘并非是系统盘,使用来做raid5,当做存储用的,我的意思是希望在boot时并不来检测这样的信息,把系统盘加载完了就行了,不知道有没有什么方法

在网上搜了一些信息,都没有能解决,大多数的说法是acpi引起的,比如:问题

问题得到解决,我尝试了,并没有改变,仍然要刷120秒左右

/etc/default/grub里

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off pci=noacpi"

然后运行update-grub,更行一下grub,尝试后,刷此类信息的时间到时缩短了,这是在ubuntu下的结果,在opensuse下不行,会在boot时卡住了。

我猜想boot时和udev有关吧,但是没有任何的头绪,哎~~~~~~

要如何才能在boot时并不来检测这样的信息,把系统盘加载完了就行了呢????

这里留个记号,待以后有机会了再来解决这个问题了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux中,read函数可以利用DMA(直接内存访问)来进行数据传输。DMA是一种数据传输方式,它允许外设(如磁盘控制器)直接访问系统内存,而不需要CPU的干预。当read函数从磁盘读取数据时,它会使用DMA来将数据直接传输到系统内存中,而不需要CPU的干预。这使得数据传输更加高效,并且可以释放CPU的负担。在Linux中,DMA通常由硬件设备驱动程序来实现。 ### 回答2: Linuxread函数在读取数据时可能会利用到DMA(Direct Memory Access,直接内存访问)。 DMA是一种数据传输方式,可以在不占用CPU资源的情况下,直接将数据从外部设备(如磁盘、网络接口等)读取到主内存,或将数据从主内存写入到外部设备。传统的I/O操作方式中,数据需要通过CPU进行中转,这样会消耗大量的CPU资源,限制系统的性能。 在Linux中,读取数据时,如果使用了DMA功能,数据可以直接通过DMA引擎传输到内存,不需要经过CPU的中转,从而提高了数据传输速度,同时也减轻了CPU的负担,提高了系统的整体性能。 read函数是Linux中常用的文件读取函数之一,可以用于从文件描述符中读取数据。当使用read函数从文件中读取数据时,如果文件所在的设备支持DMA功能,Linux内核会通过DMA引擎直接将数据传输到内存,而不需要CPU参与数据传输的过程。 需要注意的是,并不是所有的设备都支持DMA功能,所以并非所有的read函数都会利用到DMA。这取决于设备的硬件支持和驱动程序的实现。但是对于一些性能要求较高的设备,如磁盘、网络等,通常会有DMA支持,read函数在这些设备上很可能会利用到DMA来进行数据传输。 ### 回答3: Linuxread函数在读取数据时,确实可以利用到DMA(直接内存访问)。 在操作系统中,DMA是一种用于实现高速数据传输的技术。通过DMA技术,IO设备可以直接访问内存,而不需要依赖中央处理器(CPU)。这可以大大提高数据传输的效率,减少CPU的负载。 在Linux中,当使用read函数从设备(如硬盘、网络卡等)读取数据时,底层的驱动程序会利用DMA来进行数据传输。具体的过程如下: 1. 用户空间的程序调用read函数,参数包括设备文件描述符、数据缓冲区的地址和大小。 2. 操作系统内核中的驱动程序根据设备文件描述符找到相应的设备驱动,并调用驱动程序提供的读取数据的函数。 3. 设备驱动程序通过DMA控制器将数据从设备读取到内核空间的缓冲区中,而不需要CPU的参与。DMA控制器可以直接访问内存,从而提高数据传输的效率。 4. 当数据传输完成后,DMA控制器会产生一个中断信号,通知驱动程序数据已经传输完毕。 5. 驱动程序将读取到的数据从内核空间的缓冲区拷贝到用户空间的缓冲区中,并返回读取的字节数。 通过利用DMALinuxread函数能够高效地从设备读取数据,并将数据传输的过程与CPU的工作解耦。这样可以提高系统的整体性能,并减少CPU的负载,使系统更加稳定和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值