4.5.4. eMMC 压力测试
4.5.4.1. 测试原理
eMMC 压力测试通过 iozone 工具对 eMMC 存储设备进行压力测试,模拟不同的 I/O 操作模式,测量读写性能、吞吐量、延迟等指标。具体测试原理如下:
创建测试文件: IOzone 首先在 eMMC 存储上创建一个或多个文件,这些文件的大小和数量可以自定义来模拟不同类型的负载,创建文件时, IOzone 会使用特定的块大小来进行读写操作。
执行多种 I/O 操作:
顺序写入( Sequential Write):连续写入数据到存储设备,测试设备的最大写入带宽。
顺序读取( Sequential Read):连续读取数据,测试设备的读取带宽。
随机写入( Random Write):对数据进行随机写入,测试设备的随机写入能力。
随机读取( Random Read):对数据进行随机读取,测试设备的随机读取能力。
混合读写:模拟多种读写操作,测试设备的综合性能。
重写( Re-write):对已经存在的文件进行修改或覆盖,测试设备在更新文件时的性能。
数据记录与分析: IOzone 会记录每个操作的执行时间,并计算吞吐量和延迟等关键指标生成数据报告。
测试内容
eMMC 压力测试包含了 emmc_performance_test.sh 和 emmc_stability_test.sh 两个测试脚本,分别代表 eMMC 性能测试与 eMMC 稳定性压力测试:
eMMC 稳定性压力测试
1. 测试目的:
稳定性压力测试脚本:主要目的是通过长时间的压力测试验证系统的稳定性,通常会使用 -z(填充文件)和设置较大的文件(如 -n 和 -g 参数)来确保在长时间运行时对系统的可靠性进行验证。
2. 命令解析:
稳定性测试:
iozone -e -I -az -n 16m -g 2g -q 16m -f "$output_dir/iozone_data" -Rb "$output_dir/test_iozone_emmc_ext4_stability_${loop_num}.xls"参数解析:
-e:启用扩展测试 (extended test),这是 iozone 的一个特性,可以执行更多的测试类型,如重写 (rewrite)、反向写 (reverse write) 和 EOF 写入等。
-I:启用直接 I/O( O_DIRECT),绕过操作系统的缓存直接进行磁盘读写。
-a:执行自动模式测试。 Iozone 会自动测试不同的操作和文件大小,通常会进行顺序读写、随机读写等多种测试。
-z:在这个命令中,用于在每次测试时填充文件,以确保测试期间会进行连续的读写操作,增强了对系统压力的考验。这是常见的稳定性测试选项。
-n 16m:设置每次写入测试的最小数据块大小为 16MB。这意味着测试从 16MB 数据块开始,并逐渐增大。
-g 2g:设置测试的最大文件大小为 2GB。这表示 Iozone 将测试最大 2GB 文件的读写性能。
-q 16m:在执行测试时,设置 Iozone 使用的文件块大小为 16MB,且这个块大小是内存缓冲区的大小。
-f “$output_dir/iozone_data”:指定测试结果存储的文件路径。
-Rb “$output_dir/test_iozone_emmc_ext4_stability_${loop_num}.xls”:使用 Excel 格式 (.xls) 输出测试结果文件。
eMMC 性能测试说明
1. 测试目的:
性能测试脚本:主要用于衡量存储设备在不同文件和记录大小下的性能,测试通过多种记录大小和文件大小组合来评估不同场景下的性能,命令中有多种 -r(记录大小)和 -s(文件大小)参数。
2. 命令解析:
性能测试:
iozone -e -I -a -r 4K -r 16K -r 64K -r 256K -r 1M -r 4M -r 16M -s 16K -s 1M -s 16M -s 128M -s 256M -f "$output_dir/iozone_data" -Rb "$output_dir/test_iozone_emmc_ext4_performance_${loop_num}.xls"参数解析:
-e:启用扩展测试。
-I:启用直接 I/O,绕过操作系统缓存。
-a:执行自动模式测试,包含多个读写操作,测试多个文件大小和记录大小。
-r 4K -r 16K -r 64K -r 256K -r 1M -r 4M -r 16M:指定测试中使用的记录大小,影响 eMMC 在不同数据块尺寸下的性能表现。
-s 16K -s 1M -s 16M -s 128M -s 1G:指定测试文件大小的范围。从较小的 16KB 到较大的 1GB,测试不同大小文件的读写性能。
-f “$output_dir/iozone_data”:指定测试文件存储位置。
-Rb “$output_dir/test_iozone_emmc_ext4_performance_${loop_num}.xls”:输出测试结果为 Excel 格式。
4.5.4.2. 准备工作
1. 输入 lsblk -f 命令确保 eMMC 存储设备的挂载状态正常,且有足够的存储空间进行测试。
root@buildroot:/userdata/gpu2d_test# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
mtdblock0
mmcblk0
|-mmcblk0p1
|-mmcblk0p2
|-mmcblk0p3
|-mmcblk0p4
|-mmcblk0p5
|-mmcblk0p6
|-mmcblk0p7
|-mmcblk0p8
|-mmcblk0p9 ext4 1.0 / de7aed37-7c14-4ace-b0bf-2b68a2f9ed7b 0 100% /
|-mmcblk0p10 ext4 1.0 hbre c0e42531-9464-4908-a53f-d2e753512238 78.8M 51% /usr/hobot
|-mmcblk0p11 ext4 1.0 app 420a2fb6-82e2-47bf-b126-6b95b948ed1c 495.6M 23% /app
`-mmcblk0p12 ext4 1.0 cache 4f1aa72c-2d55-4d56-87e1-e82017e426e4 4.7G 10% /userdata
mmcblk0boot0
mmcblk0boot1
在 eMMC 性能测试中,命令 -s 256MB 会创建指定大小的文件进行读写测试,例如,-s 256M -f “$output_dir/iozone_data”, 请注意在 /app 挂载路径下的剩余空间是否满足最大文件读写测试的需求。
2. 确认在板端 /app/platform_samples/chip_base_test/02_emmc/ 路径下存在 emmc_performance_test.sh 和 emmc_stability_test 两个测试脚本。
02_emmc/
├── emmc_performance_test.sh
└── emmc_stability_test.sh
4.5.4.3. 测试方法
压测脚本支持输入后缀 -h 查看命令参数的说明 , 例如(同时适用与两个压测脚本):
./emmc_performance_test.sh -h
Usage: ./emmc_performance_test.sh [options]
Options:
-t <time> Set the test duration (e.g., 2h for hours, 30m for minutes; default: 48h).
-d <seconds> Set the sleep time between loops in seconds (default: 30).
-o <directory> Set the output directory for logs (default: script's '../output' folder).
-h Show this help message and exit.
各参数解析如下:
-t <time>:设置测试时长,例如 2h 表示 2 小时, 30m 表示 30 分钟,默认是 48 小时。-d <seconds>:设置循环之间的睡眠时间(以秒为单位),默认值是 30 秒。-o <directory>:设置日志输出目录,默认值是脚本所在目录的 ../output 文件夹。-h:显示帮助信息并退出脚本。
示例:
例如,使用命令: ./emmc_performance_test.sh -t 2h -d 10 -o /userdata/output 自定义测试时长 2 小时, 10 秒循环间隔,输出目录为 /userdata/output 。
eMMC 稳定性测试:
确保完成准备工作后,运行测试命令:
app/platform_samples/chip_base_test/02_emmc/
./emmc_stability_test.sh
运行一段时间后,打印结果如下:
eMMC stability test starting...
Test configuration:
Test duration: 2880 minutes
Sleep duration: 30 seconds
Output directory: /app/platform_samples/chip_base_test/log
loop_test: 1
Iozone: Performance Test of File I/O
Version $Revision: 3.493 $
Compiled for 64 bit mode.
Build: linux
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: Thu Jan 1 03:53:27 1970
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
Cross over of record size disabled.
Using minimum file size of 16384 kilobytes.
Using maximum file size of 2097152 kilobytes.
Using Maximum Record Size 16384 kB
Excel chart generation enabled
Command line used: iozone -e -I -az -n 16m -g 2g -q 16m -f /app/platform_samples/chip_base_test/log/iozone_data -Rb /app/platform_samples/chip_base_test/log/test_iozone_emmc_stability_1.xls
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 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
16384 4 16528 18226 24101 23748 24132 27420 21336 22977 21307 74257 73024 746423 508393
16384 8 23396 25740 26597 26515 22837 28021 21191 33722 21453 70527 78517 501653 507889
16384 16 32617 36313 45886 45603 39386 37817 37385 52995 37303 73691 75478 1155837 823647
16384 32 49805 56460 58152 58100 54770 27146 51481 27408 61609 82317 70461 798713 767005
16384 64 62190 60412 97321 104999 81189 36860 82208 37939 92583 81828 79986 1130242 642484
16384 128 77980 76682 133045 135420 118054 61150 110984 56217 121902 78314 76628 856053 832562
16384 256 75600 96903 151310 154328 141069 74830 114178 67056 142496 81797 74447 712936 496740
16384 512 84511 95697 140845 144154 158989 90900 153428 82660 157005 82618 73102 870147 849219
16384 1024 89460 96806 148825 159890 163213 48185 144125 94222 143921 62020 87725 1553869 827098
16384 2048 99009 90244 151417 155064 153802 96864 151189 98534 149906 61780 86793 659528 521202
16384 4096 100021 90433 156428 159981 159845 98881 155403 100275 156243 65415 73284 1298977 878545
16384 8192 101815 102025 158681 161991 161900 91054 155868 101216 158402 64583 67735 607062 815936
16384 16384 99572 103136 161970 164727 165066 102090 162238 91487 160470 72264 74101 611891 826056
32768 4 18622 21099 25151 25152 25244 28032 21607 25818 21371 75887 82629 508259 856455
32768 8 26335 30219 30169 30249 24746 30948 23299 41141 23233 76726 86830 1665040 1162150
32768 16 36097 39610 47906 48403 40690 41694 37340 58452 36658 77680 87567 847682 960966
32768 32 51848 48383 77901 82475 66412 27517 51665 27602 60524 79078 84456 1582842 1041245
32768 64 58908 61008 98257 106892 88301 38228 83961 38238 70671 78600 87072 984526 882972
32768 128 82441 84594 141841 142600 124474 58406 121304 61327 121530 78985 85211 2110116 1571606
32768 256 94575 92323 156299 157396 145970 70771 143510 78336 144694 78374 85049 2113519 1560826
32768 512 97020 92220 140765 164216 158572 91175 154818 86774 158036 35928 29897 1596103 1137501
32768 1024 31191 31041 149915 158399 164417 27155 140115 28060 142770 25172 26510 1741589 1375131
32768 2048 26899 27783 147326 148335 146382 28053 153602 27722 138546 25156 29453 1706311 1320332
32768 4096 31098 30301 154606 156154 156925 30463 152405 30380 156005 27478 28423 1633662 1319640
32768 8192 30679 30385 158022 159438 159458 29472 154650 30223 151013 27118 28941 1644072 1314189
32768 16384 29761 30626 162190 163566 163254 30455 161151 29771 154181 27460 29196 1614823 1306695
关键信息说明:
Test duration:测试持续时间 : 这是测试的持续时间,单位为分钟(即 48 小时)。Sleep duration:睡眠时间 : 在每次循环执行测试时,脚本会等待 30 秒钟,可以让系统和存储设备有足够的时间进行恢复,减少测试过程中可能的波动。Output directory:输出目录:/app/platform_samples/chip_base_test/logCommand line used:使用命令:iozone -e -I -az -n 16m -g 2g -q 16m -f /app/platform_samples/chip_base_test/log/iozone_data -Rb /app/platform_samples/chip_base_test/log/test_iozone_emmc_stability_1.xls,关键参数如下:文件大小范围:最小 16MB,最大 2GB。
记录大小范围:从 4KB 到 16384KB(即 16MB)。
主要性能指标:kB:表示文件大小(单位: KB)。
reclen:表示记录大小(单位:字节),即每次读写操作的数据块大小。
random write / rewrite / read / reread:这些列分别表示在随机写入、重写、随机读取、重读时的吞吐量。
bkwd (Backward Read):表示倒序读取( Backward Read)操作的吞吐量。
record write / record read:表示记录顺序写入和顺序读取吞吐量。
stride read / stride write:表示跳跃读取( stride read)和跳跃写入( stride write)的吞吐量。
fwrite / frewrite / fread / freread:这些列表示基于 O_DIRECT 标志进行的直接 I/O 操作的吞吐量。
eMMC 性能测试
确保已完成准备工作后,板端运行测试命令:
cd /app/platform_samples/chip_base_test/02_emmc/
./emmc_performance_test.sh
运行一段时间后,打印结果如下:
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 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
16 4 3780 8167 460 12500 12279 5310 4857 7633 7011 7194 8998 727272 1230769
16 16 6269 17718 9122 41884 38095 6619 28021 11527 8639 6090 17524 1230769 1333333
1024 4 17325 19623 18309 20130 18949 26827 18673 22446 18655 59413 62814 1519287 1214709
1024 16 31250 36644 39791 41593 37498 38246 35873 42816 36268 62488 26864 957904 699931
1024 64 57270 60937 86166 95961 83955 43208 72418 42219 76389 60685 66009 2160337 1802816
1024 256 84342 87097 122341 149227 140659 79006 112515 72660 117068 28331 72117 1914018 1532934
1024 1024 91690 93953 133664 161641 162720 98594 134013 90611 133229 75756 84838 1796491 1484057
16384 4 18423 21648 23625 23736 23659 28863 20940 25469 20881 76403 69075 518645 641302
16384 16 36059 40422 43281 43681 37900 38980 39529 57907 39596 79792 80306 2223971 1079528
16384 64 66766 75152 116098 117609 93394 40465 91837 42408 94044 75202 68624 2080243 1789036
16384 256 91077 88937 152283 159162 141655 67446 138908 77983 143531 82034 74734 1231879 637435
16384 1024 102095 99983 163597 169954 164941 84258 159818 98017 160611 81357 75563 1996344 853911
16384 4096 102216 101084 161169 160300 162896 100551 158995 91289 158698 75250 77551 1345818 1381333
16384 16384 93026 103119 157747 160792 167624 101833 163279 92495 165471 76821 76778 1279300 861046
131072 4 18723 21457 25046 25080 24999 27855 22198 25599 21949 87720 87353 1363827 1188807
131072 16 37955 40133 48228 48432 36506 38149 38223 59057 37771 90659 91102 2044709 1630938
131072 64 58971 69843 108532 108846 85083 37930 94236 39192 91901 90835 91374 2211625 1812790
131072 256 93938 96103 157272 158124 142723 69904 144578 72571 139679 92895 90228 2196504 1819635
131072 1024 97717 92395 168437 169027 164048 89288 164161 94035 162668 91980 93660 1742978 1506765
131072 4096 100309 86737 159881 159958 159632 42273 157815 30580 158251 29852 29923 1383725 1487679
131072 16384 31068 30734 161342 161741 162055 30712 160999 30645 157931 30094 30414 1662000 1493987
262144 4 16202 17899 24111 24117 21117 26843 22901 25761 22613 91624 91576 1391777 1192387
262144 16 36265 39895 48418 48431 35809 38468 41636 58951 41142 93458 84658 2084213 1674945
262144 64 57271 72327 109199 109366 83766 36119 87882 38508 91967 93643 92303 2137804 1803623
262144 256 60192 90587 156266 156170 140349 66190 145055 72361 140016 89305 91224 2224254 1826685
262144 1024 69923 97061 167924 168228 163411 87766 157521 93416 162937 94083 92071 1850332 1568569
262144 4096 70257 99365 158394 158507 157501 96434 158837 99824 158364 93752 91331 1633662 1470752
262144 16384 69600 100196 162300 162584 162611 99225 162466 100701 164261 92946 91611 1671452 1471487
关键信息说明:
Test duration:测试持续时间 : 这是测试的持续时间,单位为分钟(即 48 小时)。Sleep duration:睡眠时间 : 在每次循环执行测试时,脚本会等待 30 秒钟,可以让系统和存储设备有足够的时间进行恢复,减少测试过程中可能的波动。Output directory:输出目录:/app/platform_samples/chip_base_test/logCommand line used:使用命令:iozone -e -I -a -r 4K -r 16K -r 64K -r 256K -r 1M -r 4M -r 16M -s 16K -s 1M -s 16M -s 128M -s 256M -f "$output_dir/iozone_data" -Rb "$output_dir/test_iozone_emmc_ext4_performance_${loop_num}.xls"记录大小( Record Size)包括 4KB, 16KB, 64KB, 256KB, 1MB, 4MB, 16MB。
文件大小( File Size)设置为 16KB, 1MB, 16MB, 128MB, 256MB。
主要性能指标:kB:表示文件大小(单位: KB)。
reclen:表示记录大小(单位:字节),即每次读写操作的数据块大小。
random write / rewrite / read / reread:这些列分别表示在随机写入、重写、随机读取、重读时的吞吐量。
bkwd (Backward Read):表示倒序读取( Backward Read)操作的吞吐量。
record write / record read:表示记录顺序写入和顺序读取吞吐量。
stride read / stride write:表示跳跃读取( stride read)和跳跃写入( stride write)的吞吐量。
fwrite / frewrite / fread / freread:这些列表示基于 O_DIRECT 标志进行的直接 I/O 操作的吞吐量。
4.5.4.4. 测试指标
eMMC 稳定性测试
测试程序启动后,稳定性测试会在 /app/platform_samples/chip_base_test/log 目录下生成以下文件:
test_iozone_emmc_stability.log:记录压测时的状态信息。
test_iozone_emmc_stability_*.xls:记录压测时的数据结果。
测试目标是确保系统能够在 48 小时内稳定运行,不发生重启或挂死的情况。为确保测试过程中的稳定性,可通过以下命令检查日志文件中是否存在 fail、 error、 timeout 等异常信息:
cd "/app/platform_samples/chip_base_test/log/" && grep -iE 'error|fail|timeout' test_iozone_emmc_stability*.log
eMMC 稳定性测试结果
运行测试 24H 后检测 log 日志,并未出现异常状态信息,说明稳定性压测合格。
Test loop 1 succeeded!
Test loop 2 succeeded!
Test loop 3 succeeded!
.....
eMMC 性能测试输出
测试程序启动后,性能测试将在 /app/platform_samples/chip_base_test/log 目录下生成以下文件:
test_iozone_emmc_performance.log:记录压测时的状态信息。
test_iozone_emmc_performance_*.xls:记录压测时的数据结果
测试目标是确保系统能够在 48 小时内稳定运行,期间不发生重启或挂死现象。为检查日志中的异常信息,可使用以下命令查找 fail、 error、 timeout 等关键字:
cd /app/platform_samples/chip_base_test/output/ && grep -iE 'error|fail|timeout' test_iozone_emmc_performance*.log
此外,性能应符合实际使用中的通用标准。针对 evb_x5 ( eMMC 5.1 ),其最高支持 HS200 模式。通常,读取速度在 90 MB/s 到 150 MB/s 之间,写入速度略低,通常在 60 MB/s 到 120 MB/s 之间。
eMMC 性能测试结果
经过 48 小时的测试,使用命令检查 log 日志时未发现异常状态信息且通过日志输出,最大读取速率可达到约 168 MB/s,最大写入速率约为 102 MB/s,性能压测合格。
Test loop 1 succeeded!
Test loop 2 succeeded!
Test loop 3 succeeded!
.....