USBメモリには exFAT と APFS のどちらが性能的に良いのか？

# 結論 - USB メモリに使うべきファイルシステムは APFS

APFS の方が exFAT より性能が良い。そのため、USB メモリは、APFS でフォーマットするべき。

### 性能比較 (exFAT に対する APFS のアクセス性能)

| 測定項目 | Read | Write |
|:-:|:-:|:-:|
| シーケンシャルアクセス | 1.9 倍速い | 1.2 倍速い |
| ランダムアクセス　　　 | 1.1 倍速い | 2.4 倍速い |

### ベンチマークの結果 (exFAT / APFS)

| exFAT | APFS |
|:-:|:-:|
| <img src="https://qiita-image-store.s3.amazonaws.com/0/233927/995c625b-b569-6918-a455-0e3443bfbbc2.png"> | <img src="https://qiita-image-store.s3.amazonaws.com/0/233927/68113077-1af9-c3ea-9be8-54529458282b.png"> |

# 説明 - USB メモリに APFS を使うべきと考えた理由

## USB メモリのベンチマークを行った理由

MacBook Air 上の Virtual Box で、Windows を 2 台動かしたら、ストレージの容量が足りなくなってしまった。そのため、超小型の USB メモリを常時接続して、そこに Virtaul Box のディスクイメージを置くことにした。

- なぜ、USBメモリを使ったのか？
    - MacBook Air は、いつも膝の上で使っているため、ケーブルを引き回す必要がある USB 接続の HDD などは使いたくなかった。
- SD カードを使えば良いのでは？
    - SD カードは、USB 2.0 接続なので、すごく遅い。
- NAS を使えば？
    - 良いと思う。Qiita を書いてる途中で気づいた。 SSD + 10GbE で NAS を作ると、SSD 並の速度が出ている例が Web にあった。でも、NAS 用のハードウェア構成を考えるのが面倒。
- クラウド使えば？
    - 使えるならば、使った方が良い。でも、ローカルで動かしたいし、従量課金は嫌だったので、クラウドは候補から外した。
- 内蔵 SSD を換装したら？
    - 良いと思う。ただ、筐体開けるのが面倒くさい。データ移行が面倒くさい。

## exFAT と APFS って何？

### exFAT

マイクロソフトがフラッシュドライブ向けに開発したファイルシステム。File Allocation Table (FAT) の後継規格。
FAT32 と比較した実用上の優位点としては、以下を挙げることができる。

| 仕様 | exFAT32 | exFAT | 備考 |
|:-:|:-:|:-:|:-:|
| 最大ファイルサイズ | 4GB  | 16EB | 4 x 100,000,000 倍 |
| 最大ボリュームサイズ | 2TB | 256TB | 128倍 |

### APFS

APFS とは、Apple File System の略称で、 Mac や iPhone で利用されているファイルシステム。Mac には macOS High Sierra (2017年9月25日) から、iPhone には、 iOS 10.3 (2017年3月27日) から導入されている。
APFSは フラッシュメモリと SSD に最適化されており、マルチスレッドの対応、ファイルコピーの高速化、ディスクの暗号化などの特徴がある。

## USB メモリのベンチマークについて

ベンチマーク方法は、USB メモリを exFAT もしくは APFS でフォーマットして、ベンチマークソフトを走らせる。フォーマットは、OS 標準のディスクユーティリティを使った。

ベンチマークで利用したハードウェアとソフトウェアは、以下表に記載した。ざっくり言うと、古めの Mac と 最新の USB メモリ を利用している。

| 分類 | 名称 | 備考 |
|:-:|:-:|:-:|
| PC | MacBook Air (13-inch, Mid 2012) | USB 3.0 |
| USBメモリ | Samsung USBメモリ FIT Plus 256GB | 新しくて速い (2018年11月1日時点), USB 3.1, 公称 300MB/s read |
| 測定ソフト | AmorphousDiskMark v1.0 | CrystalDiskMark と似た外観のベンチマークソフト |

## ベンチマーク結果と考察

### ベンチマーク結果 (再掲)

| exFAT | APFS |
|:-:|:-:|
| <img src="https://qiita-image-store.s3.amazonaws.com/0/233927/995c625b-b569-6918-a455-0e3443bfbbc2.png"> | <img src="https://qiita-image-store.s3.amazonaws.com/0/233927/68113077-1af9-c3ea-9be8-54529458282b.png"> |

### ベンチマーク結果の考察（らしきもの）

まず最初に、測定項目の意味を振り返る。（ AmorphousDiskMark のサイトより引用）

| 測定項目 | 測定項目の意味 |
|:-:|:-:|
| Seq QD32 | 128 KiB ブロックの順次アクセス読み書きテスト |
| 4K QD32 | 4 KiB ブロックのランダムアクセス読み書きテスト |
| Seq | 1 MiB ブロックの順次アクセス読み書きテスト |
| 4K | 4 KiB ブロックのランダムアクセス読み書きテスト |


ベンチマーク結果を見ると、exFAT も APFS も HDD 程度の速度が出ている。
exFAT に対する APFS の性能を比較すると、以下の表の通り。

| 測定項目 | exFAT に対する APFS の性能 (read) |exFAT に対する APFS の性能 (write) |
|:-:|:-:|:-:|
| Seq QD32 | 1.9 倍 | 1.2 倍 | 
| 4K  QD32 | 1.1 倍 | 2.4 倍 |
| Seq      | 1.1 倍 | 同じ |
| 4K       | 同じ | 2.4 倍 |

APFS と exFAT でアクセス速度を比較すると、APFS は exFAT より速い、もしくは同等の性能が出ている。そのため、exFAT より APFS を利用したほうが性能的に良い。

# 余談
## Virtual Box 上の Windows で Crystal Disk Mark を実行した結果

![スクリーンショット 2018-11-03 12.32.39.png](https://qiita-image-store.s3.amazonaws.com/0/233927/c8b7395e-9158-8402-0b7f-34b259e4ddb6.png)

シーケンシャルアクセスの性能は SSD 並の速度、ランダムアクセスの性能は HDD 並の速度が出ている。
実際に Windows を操作してみた感じは、HDD 搭載 PCのような、ちょっともっさりした操作感だった。高速な USB メモリを買ったのに、ちょっと残念。

## 反省点

 - ベンチマークの目的を忘れていたため、性能比較の観点がいまいちだった。「Windows のディスクイメージとして使った場合は〜」という観点が必要だった。
 - USB メモリの購入時、「Windows を動かすため」と意識して、製品を調べる必要があった。シーケンシャルアクセスがいくら速かろうと、ランダムアクセスが遅ければ、Windows はもっさりする。
 - AmorphosDiskMark と CrystalDiskMark は、画面が似ていても測定項目が違うので単純に比較できなかった。もっと注意深く画面を見る必要があった。

# 利用させていただいたソフトウェアの開発者さんのページ

 - AmorphousDiskMark の開発者さんのサイト
    - katsura shareware : http://www.katsurashareware.com
 - CrystalDiskMark の開発者さんのサイト
    - Crystal Dew World : https://crystalmark.info/ja/