皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Linux 6.17 将允许更有效地将零写入 SSD

除了昨天合并的 VFS 更改以允许多设备文件系统更好地应对磁盘丢失之外,作为 Linux 6.17 的 VFS 拉取请求的一部分,另一个显着的变化允许更有效地将现代 NVMe SSD 或 SCSI 驱动器上的范围归零。
为 Linux 6.17 提交的 fallocate 更改引入了一个新的“FALLOC_FL_WRITE_ZEROES”,可以更有效地将现代存储设备上的区域归零。周一合并到 Linux Git 的拉取请求解释道:

“fallocate() 目前支持高效创建预分配文件。但是,在大多数文件系统上,即使指定了 fallocate() 也会以未写入状态预分配块FALLOC_FL_ZERO_RANGE。

当用户将数据写入此范围时,盘区状态稍后必须转换为写入状态,这可能会触发大量元数据更改和日志 I/O。这可能会导致同步写入模式下的写入放大和性能下降。

目前,避免这种情况的唯一方法是创建一个空文件并将零数据写入其中(例如,使用具有大块大小的“dd”)。但是,这种方法速度很慢,并且会消耗大量的磁盘带宽。

现在,越来越多的基于闪存的存储设备可用,如果设备不将物理零写入介质,则可以使用 unmap write zeroes 命令有效地将零写入 SSD。

例如,如果 SCSI SSD 支持 UMMAP 位或 NVMe SSD 支持 DEAC 位[1],则 write zeroes 命令不会将实际数据写入设备,而是将归零范围转换为已释放状态,该状态工作速度很快,几乎不消耗磁盘写入带宽。

该系列为 SCSI、NVMe 和设备映射器驱动程序实现了 BLK_FEAT_WRITE_ZEROES_UNMAP 功能和 BLK_FLAG_WRITE_ZEROES_UNMAP_DISABLED 标志,并添加了对 ext4 和原始 bdev 设备的FALLOC_FL_WRITE_ZEROES和STATX_ATTR_WRITE_ZEROES_UNMAP支持。

fallocate() 随后使用 FALLOC_FL_WRITE_ZEROES 标志进行扩展。FALLOC_FL_WRITE_ZEROES将指定的文件范围归零,以便后续写入该范围不需要进一步更改文件映射元数据。该标志有利于在此范围内的后续纯覆盖,因为它可以节省区块分配,从而节省重大的元数据更改。

通过这些补丁,除了块子系统更改和添加 FALLOC_FL_WRITE_ZEROES 标志以 fallocate 之外,管道工作还引入了对 EXT4 文件系统的FALLOC_FL_WRITE_ZEROES支持作为工作示例。

Linux 6.17 将允许更有效地将零写入 SSD

/sys/block/[disk]/queue/write_zeroes_unmap 将向用户指示磁盘是否支持有效的取消映射写入零操作。

转自 Linux 6.17 Will Allow Writing Zeroes More Efficiently To SSDs – Phoronix