windows付属のformat.exeでmicroSDをフォーマットすると著しく遅くなる

Windows付属のformat.exeでmicroSDをフォーマットすると、著しく速度が低下することが分かりました。原因はよく分かりません。

下記の2種類のフォーマットツールによって書き込み速度がどのように変わる比べました。

・ SDアソシエーション(Panasonic?)のSD Formatter
・ Windows付属のformat.exe

両方ともクラスタサイズは32KBにし、ファイルシステムはFAT32です。結果的には、SD Formatterでフォーマットした結果が、体感的にも、ベンチマーク的にも一番優れていました。format.exeを使うと、ランダムライト(小さいファイルを多量に書き込む場合)のスピードが著しく損なわれます。

今回使ったmicroSDで、format.exeでフォーマットした場合、CrystalDiskMarkの”Random Write 4KB”のパフォーマンスはだいたい0.017MB/sなのですが、実際にPCから小さいファイル1000個を書き込んで測ってみると、その1/10程度しかスピードが出ません。

1. なんでこんな事をしたの?

SD Formatterのユーザマニュアルには、

SD FormatterはSD/SDHC/SDXCカードを性能など最適になるようにフォーマットします。SD/SDHC/SDXCカードをフォーマットする際、オペレーティングシステムに付属しているフォーマットツールではなく、このSDFormatterを使用することを強く推奨します。一般的に、オペレーティングシステムに付属しているフォーマトツールはSD/SDHC/SDXCカードを含むさまざまな記録媒体をフォーマットできますが、SD/SDHC/SDXCカードに最適化されていない可能性があり、SD Formatterを使用する場合より性能が低下する場合があります。

SD Formatter 3.0 (ベータ)ユーザーマニュアルバージョン 1.00

という説明があります。format.exeよりSD Formatterの方が望ましいと明確に書かれています。

しかし、今回使った8GBの東芝microSD(C08G)の場合、SD Formatterでフォーマットをするとクラスタサイズは自動的に32KBになってしまいます。そのため、ここにQMAIL3のメールフォルダを置くとクラスタギャップが多く生じて、実際に必要な容量の10倍のメモリを消費してしまいます。

一方、format.exeを使えば、クラスタサイズは任意に選べます。ところが、format.exeでフォーマットしたSDカードはとても遅いと感じていました。特に、多数のファイルを書き込むときに、非常に遅くなってしまいます。昭文社のポケットマップルの地図データや、QMAIL3のメールフォルダなどの1KB程度のファイルが数千個あるようなデータだとすごくかかります。

そこで、SD Formatterとformat.exeでスピードの比較をしてみました。SD Formatterはクラスタサイズが32KB固定なので、今回は両者ともクラスタサイズを32KBとしました。

2. 環境

・ 8GB Class4 東芝microSDカード (C08G)
・ ChipsBnk SD/MMC Reader USB Device
・ Windows XP SP3

microSDは上海問屋、SDカードリーダは秋葉原の路上で100円で買ったもの。

3. CrystalDiskMarkでSD Formatterとformat.exeで比較

まず、CrystalDiskMarkのベンチマーク結果です。

                               SD Formatter : format.exe
           Sequential Read :    18.616 MB/s : 17.441 MB/s
          Sequential Write :     9.039 MB/s :  6.731 MB/s
         Random Read 512KB :    18.589 MB/s : 17.969 MB/s
        Random Write 512KB :     1.692 MB/s :  1.706 MB/s
    Random Read 4KB (QD=1) :     4.388 MB/s :  4.312 MB/s
   Random Write 4KB (QD=1) :     0.017 MB/s :  0.017 MB/s
   Random Read 4KB (QD=32) :     4.122 MB/s :  4.118 MB/s
  Random Write 4KB (QD=32) :     0.039 MB/s :  0.036 MB/s

予想に反して、若干SD Formatterの方が早いものの、違いはほとんど無いという結果が得られました。あれ、なんで?実際に使っていると、もっと速度差があるように思える。

4. cmd.exeで1000個の小さいファイル書き込む時間を比較

納得できないので、Random Writeっぽいことをcmd.exeからやってみます。テスト用に、QMAIL3のメールフォルダを使ってみます。このメールフォルダは、1000個のファイルを含んでいて、サイズは1.7MBです。つまり、1ファイルの平均サイズはおよそ1.7KBです。バッチファイルでこのファイルをmicroSDへ書き込み、その時間を測りました。時間は、バッチファイルの最初と最後に時間を表示させ、その差から算出しています。

                      SD Formatter : format.exe
1file    250MB write :   30.40sec  :  38.32sec
1000file 1.7MB write :   46.44sec  : 948.22sec

わかりにくいので、MB/sに換算してみます。

                      SD Formatter : format.exe
1file    250MB write :  8.224 MB/s : 6.524  MB/s
1000file 1.7MB write :  0.037 MB/s : 0.0018 MB/s

1000ファイル書込みは、Random Write 4KBに近い結果になるかと思いました。ところが、SD Formatterの方は0.037MB/sでRamdom Write 4KBとほぼ同じオーダなのに対して、format.exeの方は0.0018MB/sでとても遅い。思ったとおりです。コピーの過程を見て感じたイライラと、この結果がだいたい合います。

5. 理由はよく分かりませんが結果的に

結果的には、速度的な観点から、SDアソシエーション(Panasonic?)のSD Formatterでフォーマットするのが良いです。ただし、クラスタサイズは32KBに固定されるので、PDA的な小さいファイルが多数ある場合には激しいクラスタギャップが生じます。

デジカメにさして使う場合などは、クラスタギャップはほとんど生じないでしょうから、SD Formatterでフォーマットしておけばok。

format.exeを使うと、特に、ランダムアクセスっぽい使い方、たとえば小さなファイルを沢山書き込む場合では、著しく速度が低下します。CrystalDiskMarkのベンチマークの”Random Write 4KB”のパフォーマンスをさらに大きく下回ります(1/10程度)。

format.exeを使った場合のCrystalDiskMarkのベンチマーク結果は、SD Formatterの場合とほぼ同じでした。ところが、自分で実際にファイルを書き込んみると、目に見えて遅いです。1000個の小さいファイルを書き込んで測ってみると、速度は1/10に低下してしまいました。

今回は、Windows XPからmicroSDへのアクセスを調べたのですが、実際にはメモリはPDAに挿して使います。Windows Mobile上からは、もともと色々遅いので、microSDへのアクセスが遅くてもそれほど問題ないです。しかし、PCからデータを書き込むときに遅いのは困ります。昭文社のポケットマップル全国版のデータ1.6GBを書き込む場合、SD Formatterでは数時間くらいで終わりますが、format.exeでは数日かかります。

Wikipedia.orgのSD_Memoryのページの”File System”の項には、

Like other flash card technologies, most SD cards ship preformatted with the FAT or FAT 32 file system on top of an MBR partition scheme. The ubiquity of this file system allows the card to be accessed on virtually any host device with an SD reader. Also, standard FAT maintenance utilities (e.g. SCANDISK) can be used to repair or retrieve corrupted data. However, because the card appears as a removable hard drive to the host system, the card can be reformatted to any file system supported by the operating system.

SD cards are plain block devices and do not in any way imply any specific partition layout or file system thus other partition schemes than MBR partitioning and the FAT file systems can be used. Under Unix-like operating systems such as Linux or FreeBSD, SD cards can be formatted using, for example, the UFS, EXT3 or the ReiserFS file systems; under Mac OS X, SD cards can be partitioned as GUID devices and formatted with the HFS+ file system. Under MS-Windows and some unix systems, SD cards can be formatted using the NTFS and on later versions exFAT file system. However most consumer products will expect MBR partitioning and FAT16/FAT32 filesystem.

とあります。つまり、どんなファイルシステムでも使えるように思えます。しかし、速度的な問題は色々あるということが分かりました。

関連記事

QMAIL3のメールボックスとmicroSDのクラスタ(アロケーションユニット)サイズについて

コメント

  1. しまりす より:

    今更ですが、この問題解決致しました。
    2週間ほど悩みましたが。

    原因は、
    ・全領域に対して、物理フォーマット(?)が完了していない製品がある。
     その製品に限り、記事のような速度問題が発生する。
    ・上記カードにないして廉価USB→SD変換では、SDフォーマッタの完全フォーマットでも
     フォーマットされない領域がある。
    の、ようです。
    どの領域かは、厳密に調べておりませんが。
    大まかには先頭4MB程度の領域です。

    で、解決方法は、
    ・著作権保護対応、若しくはDYNABOOK等のSDアソシエーション加盟メーカーのPCの
    内蔵SDスロットにてSDフォーマッタにて完全フォーマット

    となります。上記後にFORMAT.EXEを使ったり、FDISKで領域を分割したりしても、
    速度低下は発生しません。クラスタサイズ4KBでも大丈夫です。

  2. Nagi より:

    製品出荷状態(FAT32)で使っていたmicroSD 32GBを
    Format.exeでNTFSフォーマットしたところ、読み書きが極端に遅くなり、
    Format.exeでFAT32に戻したのですが、速度は改善しなかったので、このサイトにたどり着きました。

    残念ながら、私のPC(ASUS T100TA)では、SD Formatterでフォーマットしようとすると、
    「このドライブまたはメディアでは、フォーマットできません」と使えませんでしたが、
    手持ちの携帯(SDHC16MBまで対応)した後にデジカメ(SDXC64GBまで対応)でフォーマットしたところ、元の速さに戻りました。(携帯でフォーマットしたのは著作権保護領域のフォーマットのため)
    大変助かりました。

    しかし、当初の目的のNTFSでのフォーマットは、SD Formatterでも対応していないようです。
    遅くならないようにNTFSフォーマットする方法はないものでしょうか。

  3. 愛姫 より:

    XPで単純にAFT-HDDを扱うと速度低下を招きます。
    これと同様のことが起きているのではないでしょうか。

    SDメモリーの理想的な書き込みサイズ/位置と
    初期化された時の書き込みサイズ/位置に
    ずれが生じているのではないでしょうか。
    速度低下の起き難いSD Formatterは理想的な
    配置に近いのかも。

    XPでは512バイト/セクターとして管理しているので
    AFTの4096バイト/セクターとのずれが生じます。
    アライメント調整を行い4096バイト境界になるように
    配置変更を行う必要がある。
    [○○○○○○○○][○○○○○○○○][○○○○○○○○]
    4096バイトのデータを書き込もうとしても
    [○○○○○●●●][●●●●●○○○][○○○○○○○○]
    と2つのセクターに跨って書き込まれてしまう。
    その為速度低下を引き起こします。