うっかりエンジニアのメモ

未来の自分に宛てたメモ

APFSでフォーマットしたSSDの4K random writeがexFATより遅くなる件

趣味は音楽制作です。DAWで読み込むソフトウェア音源は大容量なので、今までUSB 3.1接続の外付けSSDに格納していました。この度MacBook Proを新しく購入したタイミングでSSDファイルシステムを確認したところ、exFATでした。 MacOS標準のファイルシステムであるAPFSやHFS+でフォーマットした方が絶対パフォーマンス上がるやろ、と思ったら、ちょっと不思議な結果になったので調査しました。

実験概要

外付けSSDをAPFS, HFS+, exFATの3通りでフォーマットしたときの、ストレージのRead/Writeの速度を測定します。

  • マシン: MacBook Pro 16-inch(2019)
  • 対象ストレージ: SANDISK SDSSDEX2-960G-J25
    • USB3.1/USB-C接続の外付けSSD
    • ※メーカー公称のシーケンシャルread/writeは最大850MB/s
    • 内部的にはNVMe SSDだと思われる
  • 測定ソフト: AmorphousDiskMark2.5
  • テストデータ: ランダム
  • テストデータサイズ: 512MiB
  • 測定項目:
    • Sequential 128 KiB block read/write tests with Queue Depth=32
    • Random sequence 4 KiB block read/write tests with Queue Depth=32
    • Sequential 1 MiB block read/write tests
    • Random sequence 4 KiB block read/write tests

結果

f:id:entropiajp:20200531024517p:plain

考察

音源置き場としてのSSDに求められる性能は、ランダム読み出しの性能です。音源は一旦書き込みしたら後はほとんど書き込みが起こらないので、書き込み性能はあまり重要ではありません。DAWで楽曲をプレイバックするたびにそれぞれのMIDIノートに対応した小さい音源サンプルファイルがあちこちから大量に読み出されるので、高速なランダム読み出し性能があるとストレスなく制作に臨むことができます。

random read性能の結果を見ると、QD=32の場合はAPFSがexFAT比で6.4倍高速、QD=1の場合は逆にexFATがAPFS比で約13%高速ということがわかりました。 QDの値によって結果が逆になりましたが、Queueingが効かない(QD=1)状況というのは現代のSSDでは非現実的なので、より現実に即した値はQD=32の結果だと言えます。

従って、音源置き場としてのSSDは、APFSでフォーマットするのが良い、ということになります。
HFS+も同等に速いですが、APFSはストレージがSSDであることを前提とした設計になっている新しいフォーマットなので、今から使うのであればAPFSが第一選択肢になります。

APFSのrandom 4K writeの性能がやたら低い

さて、当初の目的は達成しましたが、グラフでひとつ気になる点があります。 APFSとHFS+のrandom 4K writeの性能がやたら低いところです。

f:id:entropiajp:20200531025143p:plain

exFAT比でHFS+が75%低速、 APFSに至っては92%減という結果になっています。これは一体何が起きているんでしょうか。

いろいろ調べてみたところ、今回測定ソフトとして使用したAmorphousDiskMarkの作者が詳細に説明されていました。 下記は、AmorphousDiskMarkの作者であるkatsura氏のフォーラム投稿を翻訳したものです。(意訳あり)

FAQ: 一貫性のないrandom 4K writeの測定結果

5秒間という測定時間制限は、下記の理由でAmorphousDiskMark2.5に導入されました。

  • もともと読み書き速度が遅いHDDに対して、測定時間が非現実的に長時間になってしまうことを避けるため
  • SSD上への不要な書き込みを避けるため
  • CrystalDiskMarkとの動作の整合性を保つため

この5秒間という測定時間制限によって、random 4K writeの測定結果が異なったり、一貫性のないものになったりすることがあります。

random 4K writeの測定結果は、5秒制限によって速くなったり、遅くなったり、ほぼ同じになったりします。
これは、SSDバイス自体の書き込みキャッシュの挙動によるものと思われます。

  • 速くなる場合:5秒間の測定中に書き込みキャッシュを使用していた可能性があります。(書き込みキャッシュが使用された場合は)実際にはフラッシュメモリに書き込まれていません。
  • 遅くなる場合:5秒間の測定中に書き込みキャッシュがキックインしなかった可能性があります。
  • 同じ場合:最初の5秒の間とその後の5秒の間に同じレートで書き込みキャッシュが使用された可能性があるか、またはデバイス上に有意な書き込みキャッシュがない可能性があります。

つまり、random 4K writeの測定結果は、SSDバイスの書き込みキャッシュの挙動によって変動し、デバイスの本来の性能を反映した値になっていない可能性が高いということです。これはAmorphousDiskMarkの仕様上、仕方がないものです。

ここで、フォーマットごとのBlock Sizeの違いを確認するとAPFS, HFS+では4KBiですが、exFATでは32KBiでした。
おそらくこれが結果の差を産んでいるんじゃないかと思うんですが、ここで力尽きてしまいました。この記事を読んでくださった有識者の方、いろいろ教えていただければ幸いです。

参考