4.5.4. eMMC 压力测试
4.5.4.1. 测试原理
eMMC 压力
创建
测试 文件: 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 稳定性压力测试
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 命令
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 性能/app 挂载
2. 确认emmc_performance_test.sh 和 emmc_stability_test 两个
02_emmc/
├── emmc_performance_test.sh
└── emmc_stability_test.sh
4.5.4.3. 测试方法
压测
./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 自定义
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:记录
压 测时 的 数据 结果。
测试
cd "/app/platform_samples/chip_base_test/log/" && grep -iE 'error|fail|timeout' test_iozone_emmc_stability*.log
eMMC 稳定性测试结果
运行
Test loop 1 succeeded!
Test loop 2 succeeded!
Test loop 3 succeeded!
.....
eMMC 性能测试输出
测试程序
test_iozone_emmc_performance.log:记录
压 测时 的 状态 信息。 test_iozone_emmc_performance_*.xls:记录
压 测时 的 数据 结果
测试
cd /app/platform_samples/chip_base_test/output/ && grep -iE 'error|fail|timeout' test_iozone_emmc_performance*.log
此外,性能
eMMC 性能测试结果
经过 48 小时
Test loop 1 succeeded!
Test loop 2 succeeded!
Test loop 3 succeeded!
.....