レコードサイズ8-128 kBのSDカードのランダム書き込みパフォーマンスが、レコードサイズ4 kBのパフォーマンスを下回るのはなぜですか?


15

ランダム書き込みのSDカードのパフォーマンスを確認すると、4 KBのレコードサイズではパフォーマンスが非常に悪いことがわかります(これは驚くことではありません)が、いくつかのカードでは、レコードサイズが大きくなると低下してから増加します。iozone v3.430でランダム書き込みのパフォーマンスを測定し、異なるメーカーのいくつかのフラッシュカードをテストしました。これはiozoneコマンドで、ファイルサイズ50 MBで測定していました。

iozone -RaeI -i 0 -i 1 -i 2 -y 4k -q 1M -s 50m -o -f /tmp/testfile

これは、ファイルサイズが50 MBの場合の結果です。

iozoneと50 MBのファイルサイズでテストした場合、ランダム書き込みのSDカードのパフォーマンス低下

質問:レコードサイズが8、16、32、64、128 kBのランダム書き込みパフォーマンスが4 kBのレコードサイズと比べて遅い理由は何ですか?

Peter Brittainはより大きなファイルサイズでテストすることを提案したので、ファイルサイズ500 MBでも試してみました。これが結果です:

iozoneおよび500 MBのファイルサイズでテストした場合、ランダム書き込みのSDカードのパフォーマンス低下

全体的なパフォーマンスは悪化しましたが、現象は引き続き発生します。

パーティションは4 MBの境界に揃えられます。ファイルシステムは4 kBブロックサイズのext4です。テストの開始に使用されるパーティションはmmcblk0p2です。

$ lsblk 
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 953.7M  0 loop /mnt/sdb1
mmcblk0     179:0    0  14.9G  0 disk 
├─mmcblk0p1 179:1    0    56M  0 part /boot
├─mmcblk0p2 179:2    0   7.8G  0 part /
└─mmcblk0p3 179:3    0     7G  0 part /mnt/mmcblk0p3

$ cat /etc/fstab | grep mmcblk0p2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

$ sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes
4 heads, 16 sectors/track, 486192 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    16506879     8192000   83  Linux
/dev/mmcblk0p3        16506880    31115263     7304192   83  Linux

$ mount | grep ext4 | grep root
/dev/root on / type ext4 (rw,noatime,data=ordered)

# tune2fs -l /dev/mmcblk0p2 | grep Block
Block count:              2048000
Block size:               4096
Blocks per group:         32768

更新1:ランダム書き込みのパフォーマンスは、特に小さいレコードサイズの場合、シーケンシャル書き込みに比べて著しく低いことが明らかです。NANDフラッシュストレージのメモリセルはページにグループ化され、いわゆる消去ブロックと呼ばれます。通常のページサイズは4、8、または16 kBです。コントローラーが単一ページを書き込むことは可能ですが、データは最初に消去されなければ上書きできません。消去ブロックは、NANDフラッシュストレージが消去できる最小単位です。消去ブロックサイズは通常、128 kB〜2 MBです。最新のSDカードでは、少数の消去ブロックが、割り当てグループまたは割り当てユニットまたはセグメントと呼ばれる同じサイズの大きなユニットに結合されます。通常のセグメントサイズは4 MBです。ストレージに対する各書き込み操作は、セグメント全体の読み取り-変更-書き込み操作になります。たとえば、セグメントサイズが4 MBのSDカードでは、4 kBのデータをランダムな場所に書き込むと、書き込み増幅率は1024 になります。SDカードのコントローラーは、変換レイヤーを実装します。I / O操作では、仮想アドレスから物理アドレスへの変換がコントローラーによって実行されます。セグメント内のデータが上書きされる場合、変換レイヤーはセグメントの仮想アドレスを別の消去された物理アドレスに再マッピングします。古い物理セグメントはダーティとしてマークされ、消去のキューに入れられます。後で消去されると、再利用できます。通常、SDカードのコントローラーは、ランダム書き込み操作のパフォーマンスを向上させるために、1つ以上のセグメントをキャッシュします。SDカードにルートファイルシステムが保存されている場合、カードのコントローラーが書き込み操作が行われるセグメント、ファイルシステムのメタデータを保存するセグメント、利用可能)ファイルシステムのジャーナル。その結果、SDカードのランダム書き込みパフォーマンスは、消去ブロックサイズ、セグメントサイズ、およびセグメントの数、コントローラーキャッシュに依存します。しかし、これは、レコードサイズが8、16、32、64、128 kBのランダム書き込みパフォーマンスが4 kBのレコードサイズほど遅い理由を説明していません。

更新2(myautへの回答):表のスクリーンショットは私自身の作品です。現在、私はシングルボードコンピューターのクラスターに関する記事/論文を書いています。なぜなら、それらは学生プロジェクトや研究者にリソースを提供するための興味深い選択肢だからです。このコンテキストでは、単一ノードのCPU、ストレージ、およびネットワークインターフェイスのパフォーマンスも調査しました。すべてのテスト済みSDカードを購入しました。私がインストールしたカードの1つ(dd経由でコピー)Raspian Wheezy(バージョン2014-06-20)。ネットワーク設定を構成し、いくつかの追加パッケージ(iozoneなど)をインストールした後、SDカード全体を他のすべてのSDカードにコピーしました。

更新3(Gabriel Southernへの回答):結果はシングルランからのものです。手順は次のとおりです。

  1. Raspberry Pi Model Bにカードを挿入します
  2. システムを起動します
  3. SSH経由でログイン
  4. iozoneテスト実行を開始
  5. システムを停止し、別のSDカードで試してください

何度か試したカードのいくつかを再確認してみました。わずかな変動がありました。この現象は、2枚のSamsungカードと1枚のVerbatimカードを除いて、常に発生します。

更新4:現在、NANDフラッシュclontrollers(Samsung、SanDisk、Toshiba ...)を製造している会社への連絡先を見つけて、そこに明確な回答を求めています。SanDiskにはフォーラムがあります。私そこで説明を求めました。キングストンの技術サポート部門にもリクエストを送りました。

更新5:消去ブロックサイズとアロケーションユニット(セグメント)サイズは、現象の原因ではありません。ThinkPad X240ノートブックの内部カードリーダーのpritcsd.pyツール拳で、最後にRaspberry Pi Model B ですべてのSDカードの消去ブロックサイズをテストしました。すべてのカードの出力は次のとおりErase block size of mmcblk0 is 65536 bytesです。また、テストされたすべてのSDカードのセグメントサイズは同じです。4 MBです。この情報はファイル にあります/sys/class/mmc_host/mmc0/mmc0*/preferred_erase_size。私の意見では、これらのカードはすべて同じ消去ブロックサイズとセグメントサイズを持っているというのは非常に珍しいことです。その間、テスト済みのカードのパッケージから製品ID /アイテム番号を収集しました。どうぞ。

テストされたカードのパッケージからの製品ID /アイテム番号

更新6: Kingstonの技術サポートは、テスト済みのKingstonカード(および他のほとんどのカード)のコントローラーがサイズ4 kBのファイル用に最適化されていると書いています。正確なコントローラーの実装は機密です。キングストンからの答えは私が得た最高のものです。SanDiskが私のサポートリクエストに応答せず、Sony、SamsungまたはVerbatimから連絡先を見つけることができませんでした


1
これは興味深い質問です。報告した結果は、複数の実行の平均ですか、それとも単一の実行の平均ですか 結果にどの程度のばらつきがあるのか​​知りたいです。

1
論理的な再マッピングとウェアレベリングの結果、「4 MBのセグメントサイズのSDカードでは、ランダムな場所に4 kBのデータを書き込むと、書き込み増幅率は1024になります」という質問のこの主張 偽です。
ベンフォークト

1
私の経験によるパフォーマンステストでは、小規模なテストであらゆる種類の最適化とキャッシュにヒットします。特に、フラッシュの速度が遅いメーカーは、ファイルシステムの更新を効率的に処理するためにこれらの最適化が必要になると信じることができますが、すべてのコントローラーの公開ドキュメントがないため、それを証明できません。とはいえ、使用しているファイルは50MBだけです。これに対抗するために、はるかに大きなファイル(iozone.org/docs/IOzone_msword_98.pdfの「実行規則」に従って)を試しましたか?

1
違いがないと仮定して、この問題に関する他のデータを探しました。Linaroの組織はいくつかの同様の研究を行っているようです。特に、特大のSLCキャッ​​シュが非常に高速な結果を説明する場合があります。そして、FAT32の最適化は、特に小規模な書き込みを対象としています。

1
ええ-すでにページでその問題を発見しました... FAT32で何かが足りないかもしれませんが、カードはFAT32だけでなく、「FAT32で観察されるアクセスパターンのために」最適化されています。FATの典型的なアクセスパターンは、新しいファイルを書き込むことです。これには、ファイルデータのストリーミングとFATの更新が必要です。FAT更新には通常、少数のブロックが含まれます。したがって、FTLを作成している場合は、ページサイズよりも小さい書き込みを最適化して、FATのパフォーマンスを向上させる予定です。

回答:


4

SDカードのセル構造:

ソリッドステートエレクトロニクスでは、セルは1つまたは多くのビットの情報を格納できるメモリ要素であり、セルあたりのビット数は使用する技術によって異なります。(SLC / MLC / TLC)

メーカーは、フラッシュメモリのさまざまなテクノロジーを使用してその構造を管理しています。これらのテクノロジー、特にTLCに関連するコストが安いため、最もよく使用される構造はTLCとMLCです。

この技術情報は、SDカードやUSBスティックについて入手するのが困難です。メーカーは、他のフラッシュのような技術に関して、この情報がほぼ常に提供されるSSDとして、そう決定しました。

これは、ハードウェアの寿命だけでなく速度にも直接影響します。

SLC、シングルレベルセル(1ビット)

Generally 100000 write erase cycles
Erase time: 1-2.5ms

MLC、マルチレベルセル(2ビット以上)

Anywhere from 3000 to 15000 write erase cycles
Erase time: 2.5-3.5ms

TLC、トリプルレベルセル(3ビット)

Anywhere from 1000 to 5000 write/erase cycles
Erase time: 4-5ms

注意 :

セルには1、2、または3ビットが含まれる場合があるため、SDカードコントローラーチップは、レコードサイズとセル容量に応じて、より多くのアクセスサイクルを実行する必要があります。

SamsungカードはおそらくSLCテクノロジーを使用しているか、強力なコントローラーチップを搭載しています。

注2:

私はあなたがパーティションext4ブロックサイズ4 kb1 kbで行うように大きな違いなしでいくつかのテストを試しました


SamsungカードとVerbatimカードは消費者製品であり、過去数年間、SLCメモリはそのようなデバイスでは一般的ではありませんでした。SamsungカードはMB-MP16DおよびMB-MS16Dであり、逐語的なカードは記事番号44007です。
ネバーランド

一部のコントローラーの仕様が利用できる場合があります。SDカードを開いて、これらのカードに含まれるコントローラーを確認できますが、microSDカードを開くことができません。ソフトウェアを介してSDカードのコントローラーの製品ID /番号を読み取る機会はありますか?
ネバーランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.