[万字] eMMCデバッグツール | eMMC/MMCパフォーマンステストツール MMC -utils | DDテスト | FIOテスト | IOZoneテスト | Kernal mmcテスト実戦

JEDEC eMMC と経験に基づいて、入念に整理され、オリジナルが保護されており、転載は禁止されています

ホームページ「メタストレージ - CSDN ブログ

抽象的な

全文15000語、主な内容

Linux での eMMC の初期化

Linux eMMC デバッグ ツールMMC-utils

mmc-utils関数

mmc-utils コンシューマ

Linux/Android eMMC パフォーマンス テスト ツール

    DDテスト

    FIO テスト

    IOZoneテスト

    カーナル mmc_test


この記事の内容は実践的なヒントに基づいており、各ツールについて完全に説明することはできません。読者は暗記する必要はなく、保存して参考書として使用するだけです。

ツールに関しては、好きなものを選択してください。最適なものはなく、最も適したものがあるだけです。使用が比較的簡単な場合は、MMC-utils と keneral mmc_test を使用してください。さらに詳しく知りたい場合は、MMC-utils、DD テスト、および FIO テストを使用してください。DD は簡単に始めることができ、FIO は比較的専門的ですが、もちろん使用するのはより複雑になります。

プライマー

この記事では Linux を使用して説明しますが、Android は Linux カーネルに基づいているため、この記事の方法は Android にも適用できます。


LinuxでのeMMC の初期化

SD、SDIO、MMC は非常に似ているため、Linux はどのようにして MMC を認識するのでしょうか? デバイスの初期化中の識別プロセスは次のとおりです。

  1. 初期化するときは、まずcmd0を送信してカードをアイドル状態にします。
  2. 次に、cmd8を送信して、カードが SD2.0 であるかどうかを確認します。SD1.1 は cmd8 をサポートしていないため、cmd8 の送信時に応答がない場合、カードは SD1.1 であり、それ以外の場合は SD2.0 です。
  3. mmc_attach_sdio は cmd5 を送信してOCR レジスタを読み取り、それが sdio であるかどうかを判断し、sdio である場合は sdio バスをバインドします。
  4. mmc_attach_sd はコマンドacmd55およびcmd41を送信して、カードを動作状態にします。合格した場合、それは SD カードとみなされ、SD バスにバインドされます。mmc カードは acmd55 および cmd41 をサポートしていないため、応答がない場合、カードは mmc カードとみなされます。
  5. mmc_attach_mmc でcmd1を送信してmmc カードかどうかを判定し、応答した場合は mmc バスをバインドします。cmd1 からの応答がない場合、それは mmc カードではありません。
     

Linux eMMC デバッグ ツールMMC -utils

[3] Ulf Hanssonによって管理されている mmc-utils 用の MMC デバッグ ツール。次のパブリック git リポジトリにあります:
https://git.kernel.org/pub/scm/utils/mmc/mmc-utils .git

このオープンソース ツールは Linux 環境で使用されます。Android のコアも Linux なので、このツールも使用できます eMMC と MMC の違いは、一方が溶接されており、もう一方がプラグインであるためです。このツールは、eMMC と MMC の両方に適用できます。

まずは機能を見てみましょう それぞれの機能の使い方を覚える必要はなく、どのような用途に使えるのかを知っておくだけで十分です。

mmc-utils関数

mmc-utils ツールは次のことを実行できます。

  • excsdデータを出力して解析します
  • eMMC書き込み保護ステータスを確認します
  • eMMC書き込み保護ステータスを設定します。
  • エミュレーションを無効にして、eMMC データ セクター サイズを 4KB に設定します。
  • GPAP 一般パーティションを作成します。
  • Enhance Area (拡張ユーザー領域)を有効にします。
  • 各パーティションの書き込みの信頼性を有効にします。
  • STATUS_SEND (CMD13) への応答を出力します。
  • ブート(ブート) パーティションを有効にします
  • ブートストラップバスの条件を設定します。
  • eMMC BKOPS機能を有効にします
  • eMMC H/W リセット機能を永続的に有効にします。
  • eMMC H/W リセット機能を永続的に無効にします。
  • サニタイズコマンドを送信します
  • デバイスのプログラム認証キー (認証キー、 RPMB で使用されます)。
  • RPMB パーティションのカウンター値は、標準出力デバイス (画面など) に読み込まれます。
  • RPMB デバイスから 出力に読み取ります。
  • データ ファイルからRPMBデバイスに書き込みます。
  • eMMC キャッシュ (キャッシュ) 機能を有効にします。
  • eMMC キャッシュ (キャッシュ) 機能を無効にします。
  • CIDデータを印刷して解析します
  • CSDデータを印刷して解析します
  • SCRデータを印刷して解析します

MMC-utilsの使用方法

パラメータなしで mmc を通じて使用状況を表示できます

Usage:

mmc extcsd read <device>

Print extcsd data from <device>.

mmc writeprotect get <device>

Determine the eMMC writeprotect status of <device>.

mmc writeprotect set <device>

Set the eMMC writeprotect status of <device>.

This sets the eMMC to be write-protected until next boot.

mmc disable 512B emulation <device>

Set the eMMC data sector size to 4KB by disabling emulation on

<device>.

mmc enh_area set <-y|-n> <start KiB> <length KiB> <device>

Enable the enhanced user area for the <device>.

Dry-run only unless -y is passed.

NOTE! This is a one-time programmable (unreversible) change.

mmc write_reliability set <-y|-n> <partition> <device>

Enable write reliability per partition for the <device>.

Dry-run only unless -y is passed.

NOTE! This is a one-time programmable (unreversible) change.

mmc status get <device>

Print the response to STATUS_SEND (CMD13).

mmc bootpart enable <boot_partition> <send_ack> <device>

Enable the boot partition for the <device>.

To receive acknowledgment of boot from the card set <send_ack>

to 1, else set it to 0.

mmc bkops enable <device>

Enable the eMMC BKOPS feature on <device>.

NOTE! This is a one-time programmable (unreversible) change.

mmc hwreset enable <device>

Permanently enable the eMMC H/W Reset feature on <device>.

NOTE! This is a one-time programmable (unreversible) change.

mmc hwreset disable <device>

Permanently disable the eMMC H/W Reset feature on <device>.

NOTE! This is a one-time programmable (unreversible) change.

mmc sanitize <device>

Send Sanitize command to the <device>.

This will delete the unmapped memory region of the device.


mmc help|--help|-h

Show the help.


mmc <cmd> --help

Show detailed help for a command or subset of commands.


0.1

使用例

mmc extcsd 読み取り /dev/mmc0


Linux/Android eMMC パフォーマンス テスト ツール

Linux emmc パフォーマンス テストには主に4 つのツールがあります。

  • DD
  • FIO
  • IOゾーン
  • 一般 mmc_test

どちらがいいですか?人によって意見は違うと思いますが、私はDDを先に書いているので、どちらが好みか分かると思います^^

DDテスト

書き込みパフォーマンステスト

2 つのケースに分けてテストします

ブロックデバイスへの書き込み

キャッシュ パーティションは通常、OTA アップグレード パッケージを保存するために使用されます。通常の状態では、マウントの失敗はシステムの通常の動作に影響を与えないため、書き込みテストにキャッシュ パーティションを使用し、最初に対応するブロック デバイス ファイルを見つけます。キャッシュに

1 
2 
3
KKHi3751V810:/ #ls -l /dev/block/platform/soc/f9830000.emmc/by-name/cache < 
lrwxrwxrwx 1 root root 21 1970-01-01 08:00 /dev/block/platform/soc/f9830000。 emmc/by-name/cache -> /dev/block/mmcblk0p18 
KKHi3751V810:/ #

キャッシュパーティションのブロックデバイスファイルは/dev/block/mmcblk0p18です。
テストを書きます:

1 
2 
3 
4 
5 
6
KKHi3751V810:/ # echo 1 > /proc/sys/vm/drop_caches                              
KKHi3751V810:/ # Busybox dd if=/dev/zero of=/dev/block/mmcblk0p18 bs=1M count=1024 conv=f​​sync 1024      
+0 レコード ( 
1024 件) +0 レコード出力
1073741824 バイト (1.0GB) コピー、24.122624 秒、42.4MB/秒
KKHi3751V810:/ #

入力ファイルは仮想デバイスである /dev/zero ですが、このデバイスの読み取り速度は無限、つまり読み取り速度が書き込み速度に影響を与えないと考えることができます。
bs=1M: 一度に 1M を書き込みます
count=1024: 1024 回書き込みます、つまり、書き込まれるデータの総量は 1G です
conv=f​​sync: このパラメーターが追加されない場合、dd の終了前にデータを emmc に同期します、データがまだキャッシュにある可能性があります。データの正確性を確保するには、このパラメータを追加する必要があります。

テストを数回繰り返します。速度は基本的に約 42M/s です。

ファイルに書き込む

1 
2 
3 
4 
5 
6
KKHi3751V810:/ # echo 1 > /proc/sys/vm/drop_caches 
KKHi3751V810:/ # ビジーボックス dd if=/dev/zero of=/data/ddtest.bin bs=1M count=1024 conv=f​​sync < 
1024+0 records in 
1024+0 レコード出力
1073741824 バイト (1.0GB) コピー、30.607905 秒、33.5MB/秒
KKHi3751V810:/ #

テストを数回繰り返します。速度は基本的に約 33M/s です。ブロックデバイスファイルを直接書き込む場合と比較すると、約10M/s遅くなります。これはファイル システムの影響である可能性があります。

読み取りテスト

読み取りブロックデバイス

上で紹介した例を使用してキャッシュをクリアするだけなので、ここでは繰り返しません。
上記の例から得られるデータは約 203M/s です。

ファイルを読み取る

1 
2 
3 
4 
5 
6
KKHi3751V810:/ # echo 1 > /proc/sys/vm/drop_caches                              
KKHi3751V810:/ # ビジーボックス dd if=/data/ddtest.bin of=/dev/null bs=1M count=1024 1024 
+0 レコード中
1024+0 レコードout 
1073741824 バイト (1.0GB) コピー、4.915286 秒、208.3MB/s 
KKHi3751V810:/ #

書き込み速度をテストするときに生成されたファイルを直接取得し、テストを数回繰り返すと、速度は基本的に約 208MB/s になります。


FIO テスト

転載元:  Linux emmc テスト - Zhihu

Iops、読み取りおよび書き込みの帯域幅レート、その他の情報を取得できます。

読み取りおよび書き込み速度は、キューの深さ、ブロックサイズ、スレッド数などに密接に関係しており、SSD の動作原理に関係しています。

1. ランダムリード(ランダムリード)

fio -filename=/tmp/test_randread -direct=1 -io Depth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=600 -group_reporting -name=mytest

10スレッドの場合

実行ステータス グループ 0 (すべてのジョブ):

読み取り: io=51200MB、aggrb=257806KB/s、minb=257806KB/s、maxb=257806KB/s、mint=203365msec、maxt=203365msec

スレッドのとき

実行ステータス グループ 0 (すべてのジョブ):

読み取り: io=1024.0MB、aggrb=27522KB/s、minb=27522KB/s、maxb=27522KB/s、mint=38099msec、maxt=38099msec

2スレッドの場合

実行ステータス グループ 0 (すべてのジョブ):

読み取り: io=2048.0MB、aggrb=48400KB/s、minb=48400KB/s、maxb=48400KB/s、mint=43329msec、maxt=43329msec

ランダム書き込み

fio -filename=./test_randread -direct=1 -io Depth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=1G -numjobs=10 -runtime=600 -group_reporting -name=mytest

実行ステータス グループ 0 (すべてのジョブ):

書き込み: io=10240MB、aggrb=66959KB/s、minb=66959KB/s、maxb=66959KB/s、mint=156599msec、maxt=156599msec

ディスク統計 (読み取り/書き込み):

sda: ios=1/655282、merge=0/86、ticks=0/135704、in_queue=135652、util=86.80%

シーケンシャルリード

fio -filename=./test_randread -direct=1 -io Depth 1 -thread -rw=read -ioengine=psync -bs=16k -size=1G -numjobs=5 -runtime=600 -group_reporting -name=mytest

実行ステータス グループ 0 (すべてのジョブ):

読み取り: io=5120.0MB、aggrb=45658KB/s、minb=45658KB/s、maxb=45658KB/s、mint=114829msec、maxt=114829msec

シーケンシャルライト

fio -filename=./test_randread -direct=1 -io Depth 1 -thread -rw=write -ioengine=psync -bs=16k -size=1G -numjobs=5 -runtime=600 -group_reporting -name=mytest

実行ステータス グループ 0 (すべてのジョブ):

書き込み: io=2048.0MB、aggrb=15644KB/s、minb=15644KB/s、maxb=15644KB/s、mint=134053msec、maxt=134053msec

FIO の実行問題について

Android プラットフォームで fio を実行すると、2 つの理由で fio が正常に実行できないことがわかります。

  1. インポートされた fio 実行可能プログラムは 32 ビットですが、現在の CPU は 64 ビットで、実行中のカーネルには /system/bin/linker、system/lib/libc.so lbc++ などの 32 ビット関連ライブラリがありませ 。 . および 32 ビット プログラムの実行に必要な他のダイナミック リンカー、共有ライブラリなど。ここでは、カーネルで有効になっている限り、64 ビット CPU と Linux が EL0 での 32 ビット プログラムの実行をサポートしていることを説明する必要があります。関連する 32 ビット プログラムがライブラリのインポートを実行します。
  2. fio は静的プログラムにコンパイルできるため、fio が依存する必要があるライブラリも static.a である必要があります。
  3. fio のコンパイルに使用されるコンパイラの選択については、Android をサポートする Linux 環境で実行されるため、コンパイラは aarch-linux-android-gcc バージョンを使用します。カーネル内のライブラリ関数もこのコンパイラを使用してコンパイルされるため、コンパイラは aarch-linux-android-gcc バージョンを使用します。アプリケーション層とカーネルコンパイラは一貫している必要があります。

FIO テストの実行中

ファイルの書き込み速度

KKHi3751V810:/ # echo 1 > /proc/sys/vm/drop_caches                             
KKHi3751V810:/ # fio -filename=/dev/block/mmcblk0p18 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=1m -size=1G -numjobs=4 -runtime=60 -group_reporting -name=rand_write_1m
rand_write_1m: (g=0): rw=randwrite, bs=1M-1M/1M-1M/1M-1M, ioengine=psync, iodepth=1
...
fio-2.2.6
Starting 4 threads
Jobs: 3 (f=3): [w(3),_(1)] [98.1% done] [0KB/80734KB/0KB /s] [0/78/0 iops] [eta 00m:01s]
rand_write_1m: (groupid=0, jobs=4): err= 0: pid=8316: Wed Feb 12 21:03:34 2020
  write: io=4096.0MB, bw=83067KB/s, iops=81, runt= 50493msec
    clat (msec): min=10, max=1361, avg=48.60, stdev=44.45
     lat (msec): min=10, max=1361, avg=48.86, stdev=44.44
    clat percentiles (msec):
     |  1.00th=[   18],  5.00th=[   22], 10.00th=[   23], 20.00th=[   26],
     | 30.00th=[   34], 40.00th=[   37], 50.00th=[   46], 60.00th=[   48],
     | 70.00th=[   58], 80.00th=[   65], 90.00th=[   76], 95.00th=[   87],
     | 99.00th=[  104], 99.50th=[  114], 99.90th=[  758], 99.95th=[ 1123],
     | 99.99th=[ 1369]
    bw (KB  /s): min= 1343, max=41353, per=25.49%, avg=21171.93, stdev=4637.55
    lat (msec) : 20=1.51%, 50=60.52%, 100=36.40%, 250=1.37%, 500=0.02%
    lat (msec) : 750=0.05%, 1000=0.05%, 2000=0.07%
  cpu          : usr=0.43%, sys=1.13%, ctx=10620, majf=0, minf=6
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=4096/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: io=4096.0MB, aggrb=83067KB/s, minb=83067KB/s, maxb=83067KB/s, mint=50493msec, maxt=50493msec

Disk stats (read/write):
  mmcblk0: ios=54/8332, merge=5/888, ticks=60872/378355, in_queue=439181, util=100.00%
KKHi3751V810:/ #

 

4 スレッドの平均書き込み速度は bw=83067KB/s で、約 80M/s と dd の 2 倍以上高速です。

ファイルの読み取り速度

KKHi3751V810:/ # echo 1 > /proc/sys/vm/drop_caches                             
KKHi3751V810:/ # fio -filename=/dev/block/mmcblk0 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=1m -size=1G -numjobs=4 -runtime=60 -group_reporting -name=rand_read_1m
rand_read_1m: (g=0): rw=randread, bs=1M-1M/1M-1M/1M-1M, ioengine=psync, iodepth=1
...
fio-2.2.6
Starting 4 threads
Jobs: 1 (f=1): [_(3),r(1)] [96.2% done] [148.5MB/0KB/0KB /s] [148/0/0 iops] [eta 00m:01s]     
rand_read_1m: (groupid=0, jobs=4): err= 0: pid=7889: Wed Feb 12 20:56:21 2020
  read : io=4096.0MB, bw=171813KB/s, iops=167, runt= 24412msec
    clat (msec): min=4, max=9350, avg=19.50, stdev=215.06
     lat (msec): min=4, max=9350, avg=19.50, stdev=215.06
    clat percentiles (msec):
     |  1.00th=[    7],  5.00th=[    8], 10.00th=[    8], 20.00th=[   11],
     | 30.00th=[   11], 40.00th=[   11], 50.00th=[   11], 60.00th=[   14],
     | 70.00th=[   14], 80.00th=[   14], 90.00th=[   14], 95.00th=[   14],
     | 99.00th=[   16], 99.50th=[   30], 99.90th=[ 2638], 99.95th=[ 4113],
     | 99.99th=[ 9372]
    bw (KB  /s): min=  964, max=145420, per=46.41%, avg=79740.53, stdev=25495.41
    lat (msec) : 10=13.77%, 20=85.55%, 50=0.29%, 100=0.12%, 500=0.05%
    lat (msec) : 750=0.05%, 2000=0.05%, >=2000=0.12%
  cpu          : usr=0.22%, sys=3.16%, ctx=9195, majf=0, minf=1030
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=4096/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: io=4096.0MB, aggrb=171813KB/s, minb=171813KB/s, maxb=171813KB/s, mint=24412msec, maxt=24412msec

Disk stats (read/write):
  mmcblk0: ios=8365/46, merge=15/47, ticks=633927/61332, in_queue=695214, util=99.20%
KKHi3751V810:/ #

 

4 スレッドの平均読み取り速度は bw=171813KB/s、つまり約 170M/s です。

IOZoneテスト

Android システムのソース コードには iozone がありません。公式 Web サイトからダウンロードしてコンパイルする必要があります。私がダウンロードしたときの最新バージョンは iozone3_489 です。このバージョンには、コード内に Android.mk がすでに含まれているため、ソース コードを入れるだけですAndroid システムのソース コードと mm.
ランダムな読み取りおよび書き込みテスト:

KKHi3751V810:/ # echo 1 > /proc/sys/vm/drop_caches
KKHi3751V810:/ # iozone -azecI -+n -L64 -S32 -r1m -s1024m -i0 -i2 -w -f /data/iozonetest.bin                             
        Iozone: Performance Test of File I/O
                Version $Revision: 3.489 $
                Compiled for 64 bit mode.
                Build: linux-arm 

        Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
                     Al Slater, Scott Rhine, Mike Wisner, Ken Goss
                     Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
                     Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
                     Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
                     Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
                     Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
                     Vangel Bojaxhi, Ben England, Vikentsi Lapa,
                     Alexey Skidanov, Sudhir Kumar.

        Run began: Wed Feb 12 20:47:58 2020

        Auto Mode
        Cross over of record size disabled.
        Include fsync in write timing
        Include close in write timing
        O_DIRECT feature enabled
        No retest option selected
        Record Size 1024 kB
        File size set to 1048576 kB
        Setting no_unlink
        Command line used: iozone -azecI -+n -L64 -S32 -r1m -s1024m -i0 -i2 -w -f /data/iozonetest.bin
        Output is in kBytes/sec
        Time Resolution = 0.000001 seconds.
        Processor cache size set to 32 kBytes.
        Processor cache line size set to 64 bytes.
        File stride size set to 17 * record size.
                                                              random    random     bkwd    record    stride                                    
              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
         1048576    1024    74782        0                     199299    71520                                                                

iozone test complete.
KKHi3751V810:/ #

 

結果から、ランダム読み取り速度は 199299 kB/s で、これは約 200M/s です。ランダム書き込み速度は 71520 kB/s、つまり約 70M/s です。
テストを数回繰り返しますが、結果は同様で、読み取り速度は基本的に dd と同じです。書き込みは dd のほぼ 2 倍高速です。

カーナル mmc_test

転載元:  Linux カーネル mmc フレームワークの説明 (mmc_test_operation および maintenance_kivy_xian のブログ、CSDN ブログを含む)

Linux カーネルに付属する mmc_test.ko を使用して、速度設定、バス幅設定、マルチ操作、トリム操作、コマンドおよび基本データの読み書き、その他の特性テストを含む mmc の機能テストを実行します。以下の手順に従ってください。

1. CONFIG_MMC_BLOCK=n、CONFIG_MMC_TEST=y。または、CONFIG_MMC_BLOCK=y、CONFIG_MMC_TEST=y。後者の構成を選択した場合は、システムの起動後にバス ドライバーで手動でバインドおよびバインド解除を行う必要があります (後述)。

2. CONFIG_DEBUG_FS=y、CONFIG_DEBUG_KERNEL=y、これら 2 つの項目はプロジェクトのカーネルの defconfig で構成されているため、変更を行う必要はありません。

3. mount -t debugfs none /sys/kernel/debug。これはプロジェクトにマウントされているため、変更する必要はありません。

上記3項目を完了後、システムを起動します 手順1でCONFIG_MMC_BLOCK=yの場合、最初に以下の操作を行う必要があります。

etau:/ # ls sys/bus/mmc/devices/                                              

mmc0:aaaa

etau:/sys/bus/mmc/drivers # ls

mmc_test/mmcblk/

etau:/sys/bus/mmc/drivers # cd mmcblk/                                         

etau:/sys/bus/mmc/drivers/mmcblk # ls -al

合計 0

drwxr-xr-x 2 ルート ルート 0 2000-01-01 01:27 。

drwxr-xr-x 4 ルート ルート 0 2000-01-01 01:27 ..

--w------ 1 ルート root 4096 2000-01-01 01:28bind

lrwxrwxrwx 1 ルート ルート 0 2000-01-01 01:28 mmc0:aaaa ->../../../../devices/soc0/20a50000.rda-mmc0/mmc_host/mmc0/mmc0:aaaa

--w------ 1 ルート root 4096 2000-01-01 01:28uevent

--w------ 1 ルート root 4096 2000-01-01 01:28unbind

etau :/sys/bus/mmc/drivers/mmcblk # echo –n mmc0 : aaaa > unbind

etau:/sys/bus/mmc/drivers # cdmmc_test/                                      

etau:/sys/bus/mmc/drivers/mmc_test # ls

バインドイベントのバインドを解除する

etau : /sys/bus / mmc / drivers / mmc_test # echo – n mmc0 : aaaa > バインド

以上の操作が完了すると、mmc0:aaaaとmmc_testドライバーのバインドが完了します。以降の手順は次のようにまったく同じです。

etau:/sys/kernel/debug/mmc0/mmc0:aaaa# cat testlist                          

1:     Basic write (no data verification)

2:     Basic read (no data verification)

3:     Basic write (with data verification)

4:     Basic read (with data verification)

5:     Multi-block write

6:     Multi-block read

7:     Power of two block writes

8:     Power of two block reads

9:     Weird sized block writes

10:    Weird sized block reads

11:    Badly aligned write

12:    Badly aligned read

13:    Badly aligned multi-block write

14:    Badly aligned multi-block read

15:    Correct xfer_size at write (start failure)

16:    Correct xfer_size at read (start failure)

17:    Correct xfer_size at write (midway failure)

18:    Correct xfer_size at read (midway failure)

19:    Highmem write

20:    Highmem read

21:    Multi-block highmem write

22:    Multi-block highmem read

23:    Best-case read performance

24:    Best-case write performance

25:    Best-case read performance into scattered pages

26:     Best-case write performance from scatteredpages

27:    Single read performance by transfer size

28:    Single write performance by transfer size

29:    Single trim performance by transfer size

30:    Consecutive read performance by transfer size

31:    Consecutive write performance by transfer size

32:    Consecutive trim performance by transfer size

33:    Random read performance by transfer size

34:    Random write performance by transfer size

35:    Large sequential read into scattered pages

36:    Large sequential write from scattered pages

37:    Write performance with blocking req 4k to 4MB

38:    Write performance with non-blocking req 4k to 4MB

39:    Read performance with blocking req 4k to 4MB

40:    Read performance with non-blocking req 4k to 4MB

41:    Write performance blocking req 1 to 512 sg elems

42:    Write performance non-blocking req 1 to 512 sg elems

43:    Read performance blocking req 1 to 512 sg elems

44:    Read performance non-blocking req 1 to 512 sg elems

45:    Reset test

次に、etau:/sys/kernel/debug/mmc0/mmc0:aaaa# echo 1 > test を実行して、テスト結果を確認します。

[314034.644348] mmc0:cardmmc0:aaaa のテストを開始しています...

[314034.645080] mmc0: テスト ケース 1. Basicwrite (データ検証なし)...

[314034.647583] mmc0: 結果: OK

[314034.647827] mmc0: テストが完了しました。


参考

[1]   Linux カーネル mmc フレームワークの説明 (mmc_test_Operation およびmaintenance_kivy_xian のブログ - CSDN ブログ)

[2] Linux emmc テスト - Zhihu

[3]  MMC ツールの紹介 — Linux カーネルのドキュメント

免責事項:

この記事は公開情報に基づいて構成されており、ストレージに関するより多くの知識を紹介することを目的としています。記事に含まれる記事は著者の意見のみであり、投資や商業上のアドバイスを構成するものではありません。この記事は学習とコミュニケーションのみを目的としており、商用目的ではありません。ご質問や権利侵害がある場合は、作者までご連絡ください。

おすすめ

転載: blog.csdn.net/vagrant0407/article/details/132112942