我正在使用Linux上的NVMe卡(Ubuntu 14.04)。 当使用默认扇区大小(512)的xfs文件系统格式化时,我发现英特尔NVMe卡的性能有所下降。或任何其他小于4096的行业。
在实验中,我使用xfs文件系统将卡格式化为默认选项。我尝试在6464页面大小的arm64平台上运行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(所有作业): READ: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毫秒,maxt = 26847毫秒 磁盘统计信息(读/写): nvme0n1:ios = 326748/7,merge = 0/0,ticks = 200270/0,in_queue = 200350,util = 99.51%
与
一起使用时,我发现没有性能下降可能是什么问题?这有任何对齐问题吗?我在这里失踪了什么?任何帮助表示赞赏
答案 0 :(得分:2)
问题是您的SSD本机扇区大小为4K。因此,应将文件系统的块大小设置为匹配,以便读取和写入在扇区边界上对齐。否则,您将拥有跨越2个扇区的块,因此需要2个扇区读取才能返回1个块(而不是1个读取)。
如果您使用的是英特尔固态硬盘,则可以使用英特尔固态硬盘数据中心工具设置较新的英特尔固态硬盘。但老实说,4096仍然可能是驱动器真正的扇区大小,你将获得最稳定的性能并使用它并将文件系统设置为匹配。
在Linux上的ZFS上,对于4K块,设置为ashift = 12。