M1 Mac の外付けSSDがアホほど遅くなってる件

お仕事で使っている M1 Mac mini(会社からの貸与品)、内蔵ストレージ容量が少ないので外付けSSDを(社費で)買って使ってた。

2〜3年使ったのかなあ、特に不便は感じてなかったけど、最近妙に遅いと感じることが増えてきた。

例えば割と大きめのプロジェクトの rm -rf node_modules/ する時、今までは数秒待てば完了してたけど、今は数十秒〜数分間待つレベル。

速度計測してみたら、アホほど遅い結果が出た。通信より遅くない?

image.png

なんだろう?と思い調べると、いろいろ知らないことだらけだった。

1. M1 Mac では外付けSSDが遅いらしい

M1 Macで外付けSSDが遅いという噂は本当か?Intel Macとの比較も交えて徹底検証 (1/4)

確かに遅いようだけど、これは経年とかの話ではないようで、自分の現状とは異なるようだ。

2. SSD は Trim とよばれるコマンドを実行しないと、パフォーマンスが低下していくらしい

なにそれデフラグ? と思ったら当たらずとも遠からずで、Windows でのデフラグは SSD が対象だと Trim になるらしい。

【Windows 11】SSD、仮想ディスク時代の「ドライブの最適化」ツール活用法:Tech TIPS - @IT

現在のWindows OSでは、SSDの場合はデフラグの際に「Trim(トリム)」コマンドが実行されるようになっている。

Trim とは大雑把に言ってゴミをゴミとマークすることでガベージコレクトされやすくすることを指すようだ(あやふやな理解だけども)。

3. Mac は内蔵のSSDしか Trim をサポートしないらしい(しかし裏技?で外付けSSDでも Trim サポートを有効化できるらしい)

[macOS] TRIM コマンドの使用(外部接続 SSD) - Plugable ナレッジベース

あるいは Thunderbolt で接続された SSD ならば TRIM サポート可能で、パフォーマンス低下しにくいらしい。

自分の症状はこれに近いと思ったので、こちらに紹介されているsudo trimforce enable を実行してみた。

その後、log show --predicate "processID == 0" --start "2024-07-04 00:00:00" | grep trimmed を実行して、対象の SSD で TRIM が行われた事は確認できた。

1回 TRIM されただけで性能が元に戻るとは思っていないが、何度か TRIM が行われた現在でも遅い状況に変化は見られず。

TRIM はいつ行われるのか?

コンピュータのアイドル時に行われる、という情報を見たけど、どうも PC の電源ON時にしか行われていないみたい。

実は TRIM はもともと有効になっていたが、電源OFF→ON をあまり行わなかったため、TRIM が行われず、性能劣化を促進した?

実際、Mac は使わないときはスリープさせていたので、あまり再起動はしていないけど。。。

~ % log show --predicate "processID == 0" --start "2024-07-04 00:00:00" | grep 'disk7.*trimmed'
2024-07-04 01:05:58.021232+0900 0x164c     Default     0x0                  0      0    kernel: (apfs) spaceman_scan_free_blocks:3366: disk7 33197330 blocks trimmed in 310760 extents (1414 us/trim, 706 trims/s)
2024-07-04 02:01:47.216349+0900 0x14f7     Default     0x0                  0      0    kernel: (apfs) spaceman_scan_free_blocks:3366: disk7 34277860 blocks trimmed in 309748 extents (477 us/trim, 2093 trims/s)
2024-07-04 02:18:48.280403+0900 0x144e     Default     0x0                  0      0    kernel: (apfs) spaceman_scan_free_blocks:3366: disk7 34278201 blocks trimmed in 310108 extents (469 us/trim, 2128 trims/s)
2024-07-04 08:58:21.607363+0900 0x143e     Default     0x0                  0      0    kernel: (apfs) spaceman_scan_free_blocks:3366: disk7 34278299 blocks trimmed in 310244 extents (463 us/trim, 2156 trims/s)
2024-07-04 19:23:22.187450+0900 0x1753     Default     0x0                  0      0    kernel: (apfs) spaceman_scan_free_blocks:3366: disk7 33504089 blocks trimmed in 299782 extents (180 us/trim, 5552 trims/s)

とりあえず、度々再起動して TRIM を行わせて様子をみるけど、Windows でデフラグ(TRIM)した方が手っ取り早いかも。

SSD は APFS でフォーマットしちゃったけど、こんなことなら(ファイルシステムによる性能差を踏まえても) exFAT でフォーマットして、Win で TRIM する運用の方がよかったかも。