linux - 扇区大小不是 4096 的 xfs 文件系统导致英特尔 NVMe 驱动器性能下降

标签 linux ext4 pci-e solid-state-drive xfs

我在 Linux(Ubuntu 14.04)上使用 NVMe 卡。 当使用默认扇区大小 (512) 的 xfs 文件系统格式化时,我发现 Intel NVMe 卡的性能有所下降。或任何其他小于 4096 的扇区大小。

在实验中,我用默认选项的 xfs 文件系统格式化了卡。我尝试在页面大小为 64k 的 arm64 平台上运行 block 大小为 64k 的 fio。 这是使用的命令 fio --rw=randread --bs=64k --ioengine=libaio --iodepth=8 --direct=1 --group_reporting --name=Write_64k_1 --numjobs=1 --runtime=120 --filename =new --size=20G

我只能得到以下值

运行状态组 0(所有作业): 读取:io=20480MB,aggrb=281670KB/s,minb=281670KB/s,maxb=281670KB/s,mint=744454msec,maxt=74454msec 磁盘统计信息(读/写): nvme0n1: ios=326821/8, merge=0/0, ticks=582640/0, in_queue=582370, util=99.93%

我试过格式化如下:

mkfs.xfs -f -s size=4096 /dev/nvme0n1

然后值是:

运行状态组 0(所有作业): 阅读:io=20480MB,aggrb=781149KB/s,minb=781149KB/s,maxb=781149KB/s,mint=266 847 毫秒,最大值 = 26847 毫秒 磁盘统计信息(读/写): nvme0n1:ios=326748/7,merge=0/0,ticks=200270/0,in_queue=200350,util=99.51%

我发现与

一起使用时性能没有下降
  • 4k 页面大小
  • 任何小于 64k 的 fio block 大小
  • 使用默认配置的 ext4 fs

可能是什么问题?这是对齐问题吗?我在这里错过了什么?任何帮助表示赞赏

最佳答案

问题是您的 SSD 的 native 扇区大小为 4K。因此,您的文件系统的 block 大小应设置为匹配,以便读取和写入在扇区边界上对齐。否则,您将拥有跨越 2 个扇区的 block ,因此需要 2 个扇区读取才能返回 1 个 block (而不是 1 个读取)。

如果您有英特尔固态硬盘,较新的固态硬盘具有可变扇区大小,您可以使用其英特尔固态硬盘数据中心工具进行设置。但老实说,无论如何 4096 仍然可能是驱动器的真实扇区大小,使用它并设置文件系统以匹配您将获得最一致的性能。

在 Linux 上的 ZFS 上,4K block 的设置是 ashift=12。

关于linux - 扇区大小不是 4096 的 xfs 文件系统导致英特尔 NVMe 驱动器性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35875867/

相关文章:

linux - 基于列 linux 合并行

c - 用 C 编写 EXT4 文件系统?

android - 父目录的fsync是否保证所有递归子目录的元数据同步?

linux - DMA 通过 PCIe 到其他设备

Linux PCIe 驱动程序对 MSI 有周期性的长延迟

linux - Solr:如何将 solrcloud 5.5.1 升级到 6.6.0

linux - 使用 df 获取可用磁盘空间以仅以 kb 为单位显示可用空间?

linux:获取一个脚本,以便能够向用户询问文件名,然后打开该文件

c - 当内核需要紧急释放内存时,JBD2中的检查点如何管理?

Linux PCI 驱动程序调用 init,但不调用probe