Macのスワップ(仮想メモリ)を無効にしてみた ※注意点複数あり

Apple Silicon Mac及びIntel Mac共に実は比較的簡単にスワップ・仮想メモリを完全に無効(スワップを禁止)にすることができるため、本記事ではその手順と実際にスワップを無効にした際の挙動を書いておく。

なお、スワップの無効化はカーネルパニックなどの不具合を招く可能性もあるためあくまで自己責任で。

僕は基本的にスワップが極端に気になる性格のためスワップを無効にしてみたが、通常使用(特に大容量のメモリを搭載している場合)においては不具合が起こるリスクが増すだけであり、スワップを無効にする利点はほぼない。

ちなみに管理人の環境はMac Studio M1 Max メモリ32GB・24GPU・1TB SSD。

手順1. SIPを無効にする

まずスワップを無効にするにはシステム保護機能である「SIP – System Integrity Protection」をオフにする必要があるため、Macをリカバリーモードで起動し「macOS復旧」の画面に入る。

リカバリーモードで起動するにはApple Silicon Macの場合は一度Macの電源を切り、電源ボタンを押しっぱなしにし、起動画面で「オプション」をクリックする。Intel Macの場合はMacの起動時にCommand+Rを押しっぱなしにする。

リカバリモード(macOS復旧)が起動したらユーザーを選択して「次へ」をクリックして管理者パスワードを入力。

リカバリーモードにログインしたらメニューからターミナルを起動。

ターミナルを起動したら下記コマンドを実行し「y/n」の選択で「y」キーを押して実行し、管理者パスワードを入力する。

csrutil disable

管理者パスワードを入力して下記の「System Integrity Protection is off〜」というメッセージがが出たら再起動する。

なお、macOS Big Sur以降及びApple Silicon Macではスワップを無効にするためには常時SIPも無効にしておく必要があるため、セキュリティが低下する点に注意。

更にmacOS Monterey以降ではSIPを無効にするとApple Payも利用できなくなるデメリットが存在するので基本的にSIPの常時無効化はいかなる場合でもおすすめはできない。

手順2. ターミナルでブート引数を指定

macOSが起動したら普通にターミナルを起動し、下記コマンドを実行してSIPが無効化されていることを確認する。

csrutil status

System Integrity Protection status: disabledと表示されたらSIPが無効になっていることを意味する。

SIPが無効化されていることを確認したら念のため下記のコマンドで現在のvm.compressor_modeの値を確認する。

sysctl -a vm.compressor_mode

通常は上記画像のようにvm.compressor_modeの値は「4(圧縮とスワップが有効を意味する)」になっているはずだ。

この値を「2(圧縮のみ)」に変更することでmacOSのスワップを完全に無効化することができるので下記のブート引数コマンドを実行してvm.compressor_modeの値を2に変更しよう。

sudo nvram boot-args="vm_compressor=2"

コマンドを実行したらMacを再起動する。

Macを再起動したら先ほどのコマンドを実行して現在のvm.compressor_modeの値を確認する。

sysctl -a vm.compressor_mode

値が2になっていたら無事にmacOSのスワップ無効化成功だ。

なお、スワップを無効にしても再度SIPを有効化すると上記の値もデフォルトの4に戻ってしまうため、スワップ無効を維持するためには前述の通りSIPを常時無効にしておく必要がある。

ちなみにSIPを再度有効にするにはリカバリーモードのターミナルで下記コマンドを実行して再起動するだけでいい。

csrutil enable

元に戻す場合

元に戻す場合はmacOS Big Sur以降またはApple Silicon Macの場合、前述の通りSIPを再度有効化するだけでスワップの設定も初期状態に戻るが、下記コマンドを実行して元に戻してもOKだ。

sudo nvram boot-args="vm_compressor=4"

スワップを無効にした際のmacOSの挙動

スワップの無効化はmacOSの想定外の行為であり、冒頭でも書いた通りカーネルパニックを初めとする不具合が生じる可能性があるがものの、現在のところスワップを無効にしている状態でもカーネルパニックなどの致命的な不具合は発生していない。

念のため多数のアプリケーションを起動して極端な負荷をかけるテスト(Davinciで4K動画を編集しながらLightroomで150枚の20MPの写真を書き出す)も行ったがアプリケーションがクラッシュするということもなく、メモリが不足した場合はキャッシュを減らし、加えて可能な限りメモリが圧縮されるようでメモリ不足でシステムが不安定になったりということも現在のところない。

スワップの無効化はカーネルパニックのリスクはもちろん、SIPも常時無効にする必要があり、セキュリティやユーザービリティが低下するためとてもではないがお勧めできないが、もし僕のようにスワップがどうしても気になってしょうがないという人は自己責任の上で本記事の手順を試してみるのもいいかもしれない。