命令失败的根本原因:WRITE FPDMA QUEUED

命令失败的根本原因:WRITE FPDMA QUEUED

在配备全新三星 SSD 860 EVO 250GB RVT04B6Q 的全新英特尔 NUC(第 10 代)上,该 SSD 会产生一些 WRITE FPDMA QUEUED 命令失败,如下所示:

Nov 28 21:25:26  ata3.00: exception Emask 0x10 SAct 0x60 SErr 0x400100 action 0x6 frozen
Nov 28 21:25:26  ata3.00: irq_stat 0x08000000, interface fatal error
Nov 28 21:25:26  ata3: SError: { UnrecovData Handshk }
Nov 28 21:25:26  ata3.00: failed command: WRITE FPDMA QUEUED
Nov 28 21:25:26  ata3.00: cmd 61/40:28:00:d7:31/00:00:00:00:00/40 tag 5 ncq dma 32768 out 
                          res 40/00:28:00:d7:31/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
Nov 28 21:25:26  ata3.00: status: { DRDY }
Nov 28 21:25:26  ata3.00: failed command: WRITE FPDMA QUEUED
Nov 28 21:25:26  ata3.00: cmd 61/20:30:40:d7:31/00:00:00:00:00/40 tag 6 ncq dma 16384 out 
                          res 40/00:28:00:d7:31/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
Nov 28 21:25:26  ata3.00: status: { DRDY }
Nov 28 21:25:26  ata3: hard resetting link
Nov 28 21:25:27  ata3: SATA link up 6.0 Gbps (SStatus 133 SControl 300) 
Nov 28 21:25:27  ata3.00: supports DRM functions and may not be fully accessible
Nov 28 21:25:27  ata3.00: supports DRM functions and may not be fully accessible
Nov 28 21:25:27  ata3.00: configured for UDMA/133
Nov 28 21:25:27  ata3: EH complete
Nov 28 21:25:27  ata3.00: Enabling discard_zeroes_data

这些会定期发生,每天大约 20 次,而 IO 发生的次数相对较少。到目前为止,Btrfs 文件系统尚未抱怨校验和错误。

那么,这是否只是三星销售质量保证较差的 SSD,可能是电缆损坏,或者是一个更系统的问题 - 例如三星没有在其固件中以符合标准的方式执行命令?


更新 2020-01-09:

全新的替换三星 SSD(同一型号)可产生同样的错误在那个 NUC 中。每次出现此类错误时,CRC_ERROR_COUNT SMART 计数器都会加一。

打开 NUC 显示 SATA 电缆已折叠(参见左下角):

NUC 折叠 SATA 电缆

也许这种尖锐的折叠是英特尔在生产过程中故意采用的。但似乎没有必要。而且如果是故意的,为什么只有一折呢?我的意思是,两个比对称更有意义(因为 SSD 位于主板顶部,即集成在顶盖中)。另外,折叠的 45 度方向是否最佳?我不是电气工程师,因此所有这些可能与这个问题完全无关。

重现此错误的一个好方法是使用fio.我的意思是它也会在正常使用期间发生(例如升级/安装包时),但使用 fio 更容易重现。例子:

fio --rw=randrw --name=lol --bs=128k --direct=1 --filename=/dev/nvme0n1 \
    --numjobs=1 --ioengine=libaio --iodepth=32 --refill_buffers

如果您连续运行此命令(例如,连续两次)并且没有看到此错误,那么这很好地表明您的硬件良好且不存在此问题。

答案1

所以我在这里可能是错的,但我没有足够的代表来发表评论,所以这是我的 2 美分。

我有一台配备相同 SSD 的台式机,但出现完全相同的错误。这是由于 AMD SATA 芯片组和三星固件的错误 - 它是 AMD 系统吗?如果是这样,您可以在内核参数中使用 libata.force=noncq 禁用 NCQ。

正如您在智能报告中看到的,CRC_ERROR_COUNT 是受此影响的参数(之一?)。它可能是由 NCQ 和此错误引起的,也可能是由 SATA 电缆故障引起的。所以我会先尝试禁用 NCQ。但这会损害性能。

编辑:尽管如此,我也确实看到英特尔控制器出现了一些问题:https://bugzilla.kernel.org/show_bug.cgi?id=203475#c14

相关内容