将 NVME 上的写入策略从“直写”更改为“写回”

将 NVME 上的写入策略从“直写”更改为“写回”

我在没有操作系统的企业级 NVME SSD 上运行极其密集的写入过程。我对正在运行的数据完整性几乎毫无顾忌——如果我断电,驱动器上的所有数据都将毫无用处。即使文件系统因断电而损坏,我也不会费心进行 fsck,我只会删除并重新创建分区。我需要的是最佳性能并尽量减少驱动器上的写入。

我已经在驱动器上设置了以下安装选项:discard、noatime、nodiratime、barrier=0。我还禁用了日志功能。这些都为我带来了值得的性能提升。

我的问题是当我这样做时:

sudo cat /sys/block/myNVMEdevice/queue/write_cache

...我仍然收到“写入”的响应。毫不奇怪,这将是企业磁盘上的默认设置。我想将其设置为“写回”,因为我认为当前设置可能会产生不必要的开销,而由于我的其他设置,这些开销毫无意义。如果是普通磁盘,我会使用:

hparm -W1 /dev/nvmen0

...但这似乎不适用于 NVME 磁盘(“HDIO_DRIVE_CMD(identify)失败:设备的 ioctl 不合适”)。我确实安装了 nvme-cli,这很有用,因为我之前无法从驱动器获取任何 SMART 信息,但仍然没有看到更改写入策略的方法。

我在网上搜索了好几个小时,却找不到答案。请有人帮忙!在此先谢谢大家的帮助。

答案1

如果通过功能 6 进行控制,则 NVMe 设备上的写回策略

nvme set-feature -f 6 -v 1 /dev/nvme0n1 

Reddit 上的讨论

但大多数企业 NVMe 设备都具有断电保护 (PLP)
更多信息来自金斯顿美光三星

您无需执行任何操作即可在具有 PLP 的 NVMe 设备上启用写回缓存。
标准规定:

5.21.1.6 易失性写入缓存 (功能标识符 06h),(可选)
此功能控制控制器上的易失性写入缓存 (如果存在)。 如果存在易失性写入缓存 (参见图 247 中的 VWC 字段),则应支持此功能。 属性在命令 Dword 11 中指示。
注意:如果控制器能够保证在断电时将写入缓存中的数据写入非易失性介质,则该写入缓存被视为非易失性,并且此功能不适用于该写入缓存。

相关内容