启动时随机读取 FPDMA 排队

启动时随机读取 FPDMA 排队

我最近为我的计算机(AMD CPU、nvidia GPU)购买了一块新的三星 870 EVO SSD,之前它运行在三星 860 EVO SSD 上。我在新磁盘上安装了 Ubuntu 20.04。安装过程中没有出现任何问题。我在使用旧 SSD(相同的 Ubuntu 版本)时没有遇到任何问题。系统启动后运行良好(dmesg 中没有任何错误)。但现在我在启动时随机出现这些错误(大约每 10 次启动中出现 1 次):

ata1.00: status: { DRDY }
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/08:70:58:a6:46/00:00:10:00:00/40 tag 14 ncq 4096 in

发生这种情况时,计算机通常无法启动,或者需要很长时间,并且启动后的操作系统无法使用。只需简单重启即可解决问题,然后一切正常。

我尝试过:

  • 将我的第一个 870 寄回去并要求更换 -> 新的也有同样的错误。
  • 更换了 SATA 电缆并切换了主板上的 SATA 端口 -> 相同。
  • Smartctl -t long 没有发现错误。

很多帖子都提到了同样的问题,似乎唯一能提供的解决方案就是禁用 NCQ。据我所知,禁用它会显著降低系统性能,而这正是我想要避免的。考虑到之前的型号一直运行良好,这款新 SSD 可能存在什么问题?

答案1

笔记:下载Samsung Magician并检查您的 SSD 固件。https://www.samsung.com/semiconductor/minisite/ssd/download/tools/

本机命令队列 (NCQ) 是串行 ATA 协议的扩展,允许硬盘驱动器内部优化接收的读写命令的执行顺序。

编辑sudo -H gedit /etc/default/grub并更改以下行以包含此额外参数。然后执行sudo update-grub将更改写入磁盘。重新启动。监控挂起/等,并观察grep -i FPDMA /var/log/syslog*dmesg是否有持续的错误消息。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash libata.force=noncq"

更新#1:

用户设置libata.force=noncqtrim,其对性能的影响应该小于libata.force=noncq。将继续监控。

相关内容