2009年11月27日金曜日

USBメモリに最適なファイルシステム

WindowsXP環境でもexFATが使えるてーんで、フラッシュメモリや
USBメモリに最適なディスクフォーマットを比較検証してみた。

使用したものは512~16GBのSD/miniSD/microSDカード。
これにアダプタかましてUSBメモリ化したもので比較。

(ベンチマーク方法)
「ぼく管3」インストールディスク内のフォルダ「atc3\common\voice」を
ハードディスク上に用意し、それをUSBメモリにコピーするのに
かかった時間を計測。
ファイル数:3664(うち約1900個が32KB以下のwavファイル)、135MB

(下準備)
・exFATドライバ入手先:Windows XP 用の更新プログラム (KB955704)
http://www.microsoft.com/downloads/details.aspx?FamilyID=1cbe3906-ddd1-4ca2-b727-c2dff5e30f61&DisplayLang=ja

・USBメモリをNTFSでフォーマットする方法
http://osima.jp/blog/usbmemory_ntfs.html

(参考)
・FAT および NTFS のデフォルトのクラスタ サイズ
http://support.microsoft.com/kb/140365/ja
実際のクラスタサイズはCHKDSKコマンドで確認。


■PQI miniSD 512MB
約3年前に購入した、当時では一応速い部類のもの。
シーケンシャル読みは10MB/s台後半。

85秒 FAT32(クラスタサイズ 4KB)
85秒 FAT16(クラスタサイズ 8KB)
95秒 exFAT(クラスタサイズ 32KB)
99秒 NTFS (クラスタサイズ 512B)
(以下参考)
109秒 NTFS (クラスタサイズ 1KB)
130秒 NTFS (クラスタサイズ 2KB)
133秒 NTFS (クラスタサイズ 4KB)

ためしに測ってみたNTFSフォーマットはいまいちフラッシュドライブに
向いていなさそうな雰囲気。
いずれのクラスタサイズでも、というか、クラスタサイズが上がる
(=メディアの容量が増える)につれて速度低下が見られる。
一方でクラスタギャップからくるディスク使用率の上昇幅も大きくなるので
ファイル数やファイルサイズの制限が問題化していない限り必要なし。

また、exFATはこのサイズでは恩恵はまったくない。
大容量向けに最適化されているのでしょうねこれ。

同じ速さのFAT16とFAT32、クラスタサイズからオーバーヘッドの少ない
FAT32が512MBでは最適。


■KINGMAX microSD 1GB
安物。今回使用しているものの中で一番遅い部類。
シーケンシャル読みは9MB/s台。

100秒 FAT32(クラスタサイズ 4KB)
101秒 exFAT(クラスタサイズ 32KB)
120秒 FAT16(クラスタサイズ 16KB)
xxx秒 NTFS (クラスタサイズ 1KB)※遅すぎて中断

FAT16はクラスタサイズが上昇したのに伴ってか速度低下。
また、exFATがFAT32に並んだ一方でNTFSが激遅に。

1GBでもFAT32が速度・サイズ共に最適。


■Transcend microSD 2GB
携帯電話買ったらおまけでついてきたもの。そんなに速くない。
シーケンシャル読みは12MB/s台後半。

81秒 exFAT(クラスタサイズ 32KB)
92秒 FAT32(クラスタサイズ 4KB)
115秒 FAT16(クラスタサイズ 32KB)
xxx秒 NTFS(クラスタサイズ 2KB)※遅すぎて中断

ここでexFATが速度面でトップに。
一方でテスト環境ではFAT32に比べてディスク使用量の約3割が
オーバーヘッドで無駄に。

・約1割の速度をとるか
・約3割の容量効率をとるか

の違いでexFAT(速度重視)とFAT32(容量重視)で分かれる。
互換性を考えれば、この程度だと敢えてexFATにする必要はないと思う。


■Transcend SDHC 16GB
class6だけあって今回テストしたものの中では最速。
シーケンシャル読みは15.5MB/sほど。

33秒 exFAT(クラスタサイズ 32KB)
43秒 FAT32(クラスタサイズ 8KB)
56秒  NTFS(クラスタサイズ 4KB)
※この容量はFAT16のサポート外。

ここでもexFATが速度面でトップ。
ディスク使用量ではFAT32に比べ約2割が無駄に。
テスト環境では速度・容量効率が同じ程度トレードオフ。

eeePCなどのネットブックで、ポン付けでストレージ化している環境で
大容量のSDカードを使用している場合はexFATがよさそう。
NTFSでフォーマットするともったいない結果に。


【今回のまとめ】
・FAT16は512MBを超えると相対的に速度低下
・FAT32は1GBを超えると相対的に速度低下
・exFATが明確に速度面で優位に立つのは2GBから
・NTFSはディスク容量が大きくなるにつれて絶対的に性能低下する。
また、そもそも速度的に優れているわけでもない。


(2017/10/22追記)
ドライブレコーダーで不具合があったのでナレッジ。

ドライブレコーダーにてmicroSD(東芝16GB UHS-I・Class10)を使用する際、
クラスタサイズを大きめにして運用したところ記録異常(ファイル破損)が見られた。
速度を計測したところ明確な落ち込みが見られた。
せいぜい3MB/sのデータレートなので多少落ち込んでも影響ないはずだが
実際はめちゃくちゃなファイルが出来上がることになった。

クラスタサイズ64KB ※異常発生


クラスタサイズ32KB(SDフォーマッタ既定)


普通64KBなんて手動でしか指定しないので気にすることはないが
定石通り機器側でフォーマットするなり、SDフォーマッタの使用を推奨。
Windowsでフォーマットするなら32KB指定。
デジカメなどで使用するにもおそらくこのくらいがいいはず。
64KBは非推奨。

ちなみに16KB・8KB・4KBでも目立った速度低下はなかった。
ドラレコのように大きなデータはシーケンシャルで書いていくはずなので
わざわざあまり小さくする必要はまったくない。