Skip to content

Latest commit

 

History

History
217 lines (144 loc) · 8.2 KB

20221207_01.md

File metadata and controls

217 lines (144 loc) · 8.2 KB

禁用 MacOS 的 Swap 分区 - 实测真实有效

作者

digoal

日期

2021-12-07

标签

PostgreSQL , MacOS , swap


背景

禁用 MacOS 的 Swap 分区, 目的是提高速度.

原文

众所周知,Swap 是将磁盘虚拟为内存来用的,所以速度肯定比不上扎扎实实的内存的。这样一来,不管我操作啥,电脑都感觉卡卡的,就像我用了下我家 15 年前的那个戴尔本一样。而且以前早就有禁用 Swap 的想法了,这次就直接去实施了。

禁用 Swap

  • 如果你的物理内存真的不够,禁用 Swap 可能会导致程序被内核 OOM(Out Of Memory) Kill 掉,甚至导致内核崩溃。请自行斟酌风险。

1.0 禁用 SIP

从 MacOS 10.11 开始,苹果就在 MacOS 里加上了 SIP(系统完整性保护 System Integrity Protection)这导致了要想修改系统文件就必须进入恢复模式去关闭 SIP,否则即使是 root 用户也只会返回 Operation not permitted。所以,必须要关闭 SIP。

  • 点击重新启动 Mac, 然后按住键盘上左边的 Command(⌘)+ R 直到进入恢复模式.
    • 一定要使用标准键盘, 有些机械键盘、蓝牙键盘无法进入恢复模式. 深受其害. 后来找了个DELL电脑的原配普通键盘就可以了.
  • 系统可能会提示您输入密码,例如固件密码,或这台 Mac 的管理员用户的密码。请输入要求的密码以继续。
  • 在实用程序菜单中,选择“终端”。
  • 输入 csrutil disable 并回车
  • 在菜单中,点击重新启动来重启电脑。
重启后查询当前SIP状态:  

$ csrutil status
System Integrity Protection status: disabled.

1.1 禁用 Swap

先使用 sysctl -a vm.compressor_mode 来检查现在的内存模式,默认的数字应该是 4。

  • 1 代表不压缩内存且不启用 swap。
  • 2 代表压缩内存但不启用 swap。
  • 3 代表不压缩内存但启动 swap。
  • 4 代表着压缩内存并启用 swap。

输入 sudo nvram boot-args="vm_compressor=2" 即可将内存管理模式更改为压缩内存但不启用 swap

  • 如果已经有boot-args内容, 使用类似:
https://support.apple.com/zh-cn/HT202528

nvram boot-args="vm_compressor=2 serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"

检查nvram boot状态:

IT-C02YW2EFLVDL:~ digoal$ nvram -p|grep compress
boot-args	vm_compressor=2

关闭dynamic_pager:

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

$ sudo rm /private/var/vm/swapfile*

重启, 检查swap是否已关闭.

sysctl -a vm.compressor_mode
返回
2
    
launchctl list|grep dynamic_pager

PS: macos这个参数有点类似linux的vm.swappiness和vm.overcommit_memory:

  • The overcommit policy is set via the sysctl vm.overcommit_memory. The overcommit amount can be set via vm.overcommit_ratio (percentage) or vm.overcommit_kbytes (absolute value). The current overcommit limit and amount committed are viewable in /proc/meminfo as CommitLimit and Committed_AS respectively.
  • Swappiness is a property for the Linux kernel that changes the balance between swapping out runtime memory, as opposed to dropping pages from the system page cache. Swappiness can be set to values between 0 and 100, inclusive.

使用一段时间之后, 也可以检查一下swap的真实使用情况是否为0

$ sysctl -a vm.swapusage
vm.swapusage: total = 0.00M  used = 0.00M  free = 0.00M  (encrypted)

1.2 启用 SIP

由于安全原因,这里建议重新启用 SIP。如果想要启用的话,进入恢复模式, 直接在终端中输入 csrutil enable 即可。

PS: 使用之前的这篇文档操作无法关闭swap, 依旧使用swap: 《MacOS 关闭和开启虚拟内存(swap)》

禁用其他系统服务

禁用 mds_stores

mdsSpotlight的一部分。也就是你按 Command (⌘) + 空格 弹出来的那个东西。它为所有文件建立索引,以便在你要搜索文件的时候快速的找到你想要的东西。因为我的 Spotlight 已经完全被 Alfred 替代,所以可以禁用它以节省CPU和内存。

  • 在终端中输入 sudo mdutil -a -i off 即可禁用索引。
  • 若想恢复索引,需要在终端中输入 sudo mdutil -a -i on

问题处理: 开启SIP后, boot-args 生效但是sysctl vm.compressor_mode 依旧为4

如果你设置了boot-args="vm_compressor=2"但是在开启SIP后, 重启到正常模式后vm.compressor_mode依旧是4, 则需要设置一下SIP标签, 关闭nvram保护和boot-arg限制.

而且你不想完全关闭SIP, 可以选择关闭部分SIP的方法来实现.

https://blog.csdn.net/maxsky/article/details/111694494

1、在恢复模式执行

csrutil disable    
    
csrutil enable --without nvram      
csrutil status    
System Integrity Protection status: unknown (Custom Configuration).    
    
Configuration:    
	Apple Internal: disabled    
	Kext Signing: enabled    
	Filesystem Protections: enabled    
	Debugging Restrictions: enabled    
	DTrace Restrictions: enabled    
	NVRAM Protections: disabled   // 注意这个是关闭的    
	BaseSystem Verification: enabled    
	Boot-arg Restrictions: disabled  // 注意这个是关闭的    
	Kernel Integrity Protections: enabled    
	Authenticated Root Requirement: enabled    
    
This is an unsupported configuration, likely to break in the future and leave your machine in an unknown state.    

2、重启进入正常模式执行

sudo nvram boot-args="vm_compressor=2 serverperfmode=1"    

3、重启进入正常模式, 检查配置是否生效

sysctl vm.compressor_mode    
    
vm.compressor_mode: 2    

此时显示SIP的部分选项为disable状态:

csrutil status

停用 spotlight 索引功能, 也可以减少磁盘扫描/提升ssd寿命/提升性能

停用 spotlight 索引功能

1、系统设置-Siri与聚焦- 去除所有聚焦勾选项, 聚焦隐私-把整个磁盘加进去(也就是黑名单).

2、sudo mdutil -a -i off

恢复 spotlight 索引功能

1、还原黑名单

2、sudo mdutil -a -i on

参考

https://apple.stackexchange.com/questions/315120/setting-a-nvram-variable-in-normal-boot-not-permitted-but-allowed-in-recovery-mo

https://superuser.com/questions/255176/is-there-a-list-of-available-boot-args-for-darwin-os-x?_gl=1*1wlbmdy*_ga*MTUwNzEwOTQ1LjE2OTEzODk2NzI.*_ga_S812YQPLT2*MTY5MTU0NjY5NC4zLjAuMTY5MTU0NjY5NC4wLjAuMA..

https://support.apple.com/en-gb/HT202528

查询nvram boot-args内容:

nvram boot-args  

新增配置需要加空格追加即可:

nvram boot-args="serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"  

清除nvram boot-args内容:

nvram -d boot-args   
或   
nvram boot-args=""  

digoal's wechat