如何在 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 中修改文件系统缓存的行为的主要内容,如果未能解决你的问题,请参考以下文章

如何在Mac OS中访问Windows共享文件夹

mac os x10.10批量重命名教程:os x 10.10批量修改文件名步骤

Mac OS X文件系统的附加属性@如何彻底删除

如何让Mac OS X系统显示资源文件

如何在VirtualBox中安装MAC OS系统

Mac os系统下隐藏移动硬盘上的文件夹该如何操作?