我试图加速用于开发/自动化testing环境的虚拟机,并希望validation一些关于磁盘写入caching的假设。
我使用ext4作为虚拟机中的根文件系统,我并不在意电源丢失的情况。 如果发生断电,磁盘损坏,整个机器可以在几分钟内重build。 对我来说,这意味着下列选项可以安全地应用,应用程序应该没有什么区别 – 它们只会影响缓冲数据如何写入磁盘本身,但caching内存表示将始终是准确的:
它是否正确? 还有什么其他的ext4参数,我应该看看性能改进?
journal_async_commit,noauto_da_alloc,dioread_nolock。 有关说明 ,请参阅ext4文档 。
另外nouser_xattr,noacl,如果你不使用它们,可能会在第一次查找时有小的性能提升(但是除非你使用数百万个文件)。
请注意,使用提交= 3600(同时提高批量操作的总体时间)可能不会做你想要的。 当它触发(可能比3600更早,由于日志满的条件),你将有大量的I / O突发,这将停止大部分运行在机器上的任何东西,直到它完成(这可能是几分钟,取决于你的日记大小和I / O速度)。 较小的价值会给你更多但更小的元数据爆发,所以它不会像机器“挂起”。 它可能会或可能不会成为你的问题。
如果你不想要jounrnal,你可能想完全禁用它 – 请注意,它可能会提高性能,但也可能会使情况变得更糟:
tune2fs -O ^has_journal /dev/sdXX
此外,一些特定的负载(例如在小时间范围内创build和删除很多小文件,例如繁忙的邮件服务器的SMTP邮件队列)可能自相矛盾地实际上更喜欢data = journal到data = writeback(甚至根本没有日志) – 因为它将仅使用日志(这是线性写入而不是随机写入,因此在非SSD存储上更快)。
但最重要的是 – 你将不得不基准找出哪一个最适合你 – 没有银弹。