我正在尝试加快用于开发/自动化测试环境的虚拟机的启动速度,并想验证有关磁盘写入缓存的一些假设。
我在虚拟机中使用ext4
它作为根文件系统,我并不真正关心断电情况。如果断电并且磁盘损坏,整个机器可以在几分钟内重建。对我来说,这意味着可以安全地应用以下选项,并且对应用程序没有影响 - 它们只会影响缓冲数据写入磁盘本身的方式,但缓存的内存表示将始终准确:
- 无障碍
- 数据=写回
- 诺布
- 提交=3600
这是正确的吗?还有什么其他 ext4 参数我应该考虑以提高性能吗?
答案1
journal_async_commit、noauto_da_alloc、dioread_nolock。请参阅ext4 文档了解描述。
此外,如果您不使用 nouser_xattr 和 noacl,它们可能会在第一次查找时稍微提高性能(但除非您使用数百万个文件,否则这并不相关)。
请注意,使用 commit=3600(虽然由于批处理而缩短了某些操作的总体时间)可能达不到您想要的效果。当它触发时(由于日志已满,可能比 3600 早得多),您将获得大量的 I/O,这将停止机器上运行的大多数程序,直到它完成(可能需要几分钟,具体取决于您的日志大小和 I/O 速度)。较小的值将为您提供更多但较小的元数据突发,因此看起来不会像机器“挂起”。这对您来说可能是也可能不是问题。
如果您不想要日记本,您可能需要完全禁用它 - 请注意,它可能会在一定程度上提高性能,但也可能使情况变得更糟:
tune2fs -O ^has_journal /dev/sdXX
此外,一些特定的负载(比如在短时间内创建和删除许多小文件,例如繁忙邮件服务器的 SMTP 邮件队列)可能实际上反而更喜欢 data=journal 而不是 data=writeback(甚至根本没有日志) - 因为它将只使用日志(即线性写入而不是随机写入,因此在非 SSD 存储上速度要快得多)。
但最重要的是 - 你将会有通过基准测试来找出最适合您的一种——没有灵丹妙药。