如何在 Mac OS 中修改文件系统缓存的行为
Posted
技术标签:
【中文标题】如何在 Mac OS 中修改文件系统缓存的行为【英文标题】:How to modify the behaviour of filesystem cache in Mac OS 【发布时间】:2019-12-31 14:36:36 【问题描述】:我想知道在 MacOS 中是否有与 Linux 等效的参数:
vm.dirty_background_bytes
vm.dirty_background_ratio
vm.dirty_bytes
vm.dirty_ratio
vm.dirty_expire_centisecs
vm.dirty_writeback_centisecs
通过它们可以改变文件系统的缓冲区/缓存的行为,例如使用多少 RAM 来缓存文件的块,在多长时间后将缓存刷新到磁盘等。
在 linux 中,这些参数由 sysctl
命令修改。在 MacOS 文档中我找不到等效参数。
有什么提示吗?
提前致谢。
【问题讨论】:
【参考方案1】:是的,和linux差不多。
您可以使用 sysctl 命令手动配置每一项,成功后会显示旧值和新值(见图)
您可以检查当前值:
> $ sudo sysctl kern.vm_page_free_min
kern.vm_page_free_min: 147456
> $ sudo sysctl kern.vm_page_free_reserved
kern.vm_page_free_reserved: 16384
您可以将它们配置为在每次启动时使用。
只需新建一个文件:sudo vim /etc/sysctl.conf
将配置的值放在上面。 (下面的值非常好,我目前正在使用它们,以获得巨大的内存/缓存/交换管理性能)
kern.vm_page_free_target=163840
kern.vm_page_free_min=147456
kern.vm_page_free_reserved=16384
kern.vm_page_speculative_percentage=1
vm.vm_page_background_exclude_external=0
vm.vm_page_background_mode=1
vm.vm_page_background_target=163840
vm.compressor_timing_enabled=1
我建议你使用它们。
保存到/etc/sysctl.conf
后重启
在启动后和正常使用期间的下一次登录时,性能提升很明显。 (如果你的机器因为内存不足而死机,它不会再因为这些而死机,尝试将其冻结作为一个挑战;)
PS:要列出所有参数,请执行sysctl -A
。您提到的那些特定的 vm.dirty.* linux 参数在 MacOS 上不存在,我发布给您的那些是用于该目的的等效参数(除了最后一个用于定时压缩的参数,但我放在一起是因为最好有timming enabled [default is disabled],它与内存管理有关,特别是关于内存压缩机制)。如果您需要其他人或任何其他信息或任何问题,请随时问我。
【讨论】:
谢谢佩德罗,这很好。我想知道我们在哪里可以找到有关这些和其他参数的信息...... Apple 开发人员页面/文档是否专门针对它们? Apple 使用的所有这些参数都来自 MacOS 的 BSD 内核子系统,请在 OpenBSD 文档和/或源代码中搜索它们。 MacOS 内核的源代码是开放的,它与 BSD 内核相同,只有一些附加组件。 Apple 内核的源代码在这里(所有版本)opensource.apple.com/source/xnu,如果您想查看它,它包含所有这些设置,但我建议您也获取 OpenBSD 并同时比较/读取。 @user1131951 对于您所要求的文档:使用 OpenBSD 手册页和技术文档来了解每个命令的描述。以上是关于如何在 Mac OS 中修改文件系统缓存的行为的主要内容,如果未能解决你的问题,请参考以下文章