お仕事で使っている M1 Mac mini(会社からの貸与品)、内蔵ストレージ容量が少ないので外付けSSDを(社費で)買って使ってた。
2〜3年使ったのかなあ、特に不便は感じてなかったけど、最近妙に遅いと感じることが増えてきた。
例えば割と大きめのプロジェクトの rm -rf node_modules/
する時、今までは数秒待てば完了してたけど、今は数十秒〜数分間待つレベル。
速度計測してみたら、アホほど遅い結果が出た。通信より遅くない?
なんだろう?と思い調べると、いろいろ知らないことだらけだった。
M1 Macで外付けSSDが遅いという噂は本当か?Intel Macとの比較も交えて徹底検証 (1/4)
確かに遅いようだけど、これは経年とかの話ではないようで、自分の現状とは異なるようだ。
なにそれデフラグ? と思ったら当たらずとも遠からずで、Windows でのデフラグは SSD が対象だと Trim になるらしい。
【Windows 11】SSD、仮想ディスク時代の「ドライブの最適化」ツール活用法:Tech TIPS - @IT
現在のWindows OSでは、SSDの場合はデフラグの際に「Trim(トリム)」コマンドが実行されるようになっている。
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 が行われた現在でも遅い状況に変化は見られず。
コンピュータのアイドル時に行われる、という情報を見たけど、どうも 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 する運用の方がよかったかも。