优化ext 的小文件吞吐量

我有一个系统,有高吞吐量的小文件在磁盘上,即大量的小文件创build,写入和删除在几秒钟内。

有没有合理的ext2 / ext3 / ext4挂载选项来提高性能? 我猜想,元数据日记在这里会有巨大的性能下降。

是的,元数据操作将会绝对杀死你。 我可以想象的最重要的挂载选项是noatime ,它closures了所有文件上的一次(或“上次访问时间”)更新。 这将停止为每个文件访问写一个元数据,这可能会将I / O速率(如果您读/写每个文件一次)减半到数百次(如果您只写一次,请阅读很多)。 noatime也意味着nodiratime ,它closures了目录上的atime更新。 如果这太残酷了(你有时需要一段时间),那么考虑relatimemount (8)解释了比我更好的一个)。

在硬件层面上, 认真考虑更多的RAM和非易失性caching硬件RAID控制器。 更多的RAM可以帮助内核caching更多的数据,从而减less(甚至可以消除)读取I / O,而NVRAM高速cachingRAID控制器意味着数据在写入闪存之后(这是快速的)是安全可靠的,而不是一直到旋转磁盘(这是slooooow)。 你也可以去SSD,但是它们仍然比NVRAM慢得多。

我有一台运行ext4的Synology NAS(DS1815 +,DSM 5.2),并且在数千个(小)文件的目录上观察到性能不佳。

Synology NAS ext4没有默认设置的dir_index扩展名! 我不知道为什么Synology会这样做,因为dir_indexfunction只能跳入大目录。 然后创build一个访问,计数,迭代等更快的索引。

要检查是否安装了该function,请使用tune2fs -l / dev / yourDev

 tune2fs -l /dev/vg1/volume_1 | grep features Filesystem features: ... dir_index ... 

如果在function列表中看不到dir_index,则可以将其添加到ext3 / 4文件系统中:

  1. umount / dev / youDev #Unmount设备
  2. tune2fs -O dir_index / dev / yourDev#添加到FSfunction
  3. e2fsck -D / dev / yourDev#创build索引

对于Synology NAS,步骤是:

 syno_poweroff_task -d vgchange -ay tune2fs -O dir_index /dev/vg1/volume_1 e2fsck -D /dev/vg1/volume_1 

dir_indexfunction可用于ext3和ext4,在现代Linux发行版上创buildext4时通常是默认的默认设置。 不过,正如Synology NAS所显示的那样 – 值得检查。 在我的情况下,这增加了从100M(小)文件到4Mb / s到14Mb / s的NAS的rsyncing文件夹。

一些引自www.debian-administration.org

您可以执行的最有用的调整是在查找文件时扫描目录索引的方式。 这由选项“dir_index”控制。 默认情况下,这不会被启用,但您可以通过运行添加它:

我的:〜#tune2fs -O dir_index / dev / sda1

一旦你这样做了,你将能够看到正在使用的更新的文件系统标志:

我的:〜#tune2fs -l / dev / sda1 | grepfunction文件系统function:
has_journal resize_inode dir_index文件typesneeds_recovery sparse_super large_file

一旦你这样做了,你应该发现列出大量文件的目录的内容会变得更快,而且在目录中查找文件也更好。