linux emmc读写测试,eMMC读写性能和稳定性验证

IORTest: (g=0): rw=read, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=1

...

fio-3.11-21-g307f

Starting 30 threads

Jobs: 30 (f=30): [R(30)][100.0%][r=43.4MiB/s][r=2778 IOPS][eta 00m:00s]

IORTest: (groupid=0, jobs=30): err= 0: pid=1533: Thu Jan 1 00:01:22 1970

read: IOPS=3050, BW=47.7MiB/s (49.0MB/s)(2860MiB/60019msec)

clat (usec): min=351, max=6205.4k, avg=9827.33, stdev=180070.72

lat (usec): min=353, max=6205.4k, avg=9828.22, stdev=180070.72

clat percentiles (usec):

| 1.00th=[ 791], 5.00th=[ 799], 10.00th=[ 816],

| 20.00th=[ 832], 30.00th=[ 848], 40.00th=[ 979],

| 50.00th=[ 1012], 60.00th=[ 1057], 70.00th=[ 1074],

| 80.00th=[ 1090], 90.00th=[ 1090], 95.00th=[ 1106],

| 99.00th=[ 1221], 99.50th=[ 1565], 99.90th=[3774874],

| 99.95th=[4328522], 99.99th=[5268046]

bw ( KiB/s): min= 31, ma

<think>我们正在讨论eMMC存储设备的读写性能测试。根据用户的需求,我们需要提供一些测试方法工具。 根据引用[1]引用[2]的内容,我们可以使用`dd`命令测试顺序读写速度,使用`fio`工具测试随机读写性能。但是注意,引用[2]提到使用fio时可能会破坏文件系统,因此需要谨慎操作,建议在非系统分区或者使用文件进行测试,避免直接对块设备操作(除非你明确知道不会破坏数据)。 另外,还可以使用`hdparm`工具测试读取速度。 步骤: 1. 顺序写测试:使用`dd`命令向eMMC设备写入一个大文件(注意:如果直接写入块设备如`/dev/mmcblk0p1`会覆盖该分区数据,请确保该分区没有重要数据或已挂载为只读,或者使用一个文件进行测试)。 2. 顺序读测试:使用`dd`命令从eMMC设备读取数据。 3. 随机读写测试:使用`fio`工具,可以配置不同的测试模式(顺序、随机、读写比例等)。 注意:测试性能时,为了避免缓存影响,需要设置合适的参数(如`dd`命令使用`oflag=direct`,或者使用`fio`的`direct=1`选项)。 具体命令示例: 1. 使用dd测试顺序写速度(注意:这会销毁目标设备上的数据!) ``` dd if=/dev/zero of=/dev/block/mmcblk0pX bs=4k count=100000 oflag=direct ``` 其中`/dev/block/mmcblk0pX`是你要测试eMMC分区,请替换为实际分区。`oflag=direct`表示绕过缓存直接写入。 2. 使用dd测试顺序读速度(从设备读取到空设备,不会破坏数据): ``` dd if=/dev/block/mmcblk0pX of=/dev/null bs=4k count=100000 iflag=direct ``` 3. 使用fio测试随机读写(更安全的方法是测试一个文件,而不是直接测试块设备,以避免破坏文件系统): 首先,在要测试的分区上挂载的文件系统中创建一个文件,然后使用fio测试该文件。 例如,测试4K随机写: ```bash fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --size=1G --numjobs=1 --runtime=60 --group_reporting --filename=./testfile --direct=1 ``` 测试4K随机读: ```bash fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --size=1G --numjobs=1 --runtime=60 --group_reporting --filename=./testfile --direct=1 ``` 另外,使用`hdparm`测试读取速度: ``` hdparm -tT /dev/block/mmcblk0pX ``` 注意事项: - 直接对块设备进行写操作会破坏该设备上的数据,请确保数据已备份或该设备可被覆盖。 - 使用文件测试时,文件大小应足够大以避免缓存影响(如1G以上),并且使用`direct=1`绕过系统缓存。 - 测试过程中应避免其他IO操作干扰。 引用[1]中使用了`dd`测试eMMC的写入速度,引用[2]提到了使用`fio`测试磁盘IO(但警告可能会破坏rootfs),因此我们建议在测试时谨慎选择目标设备或文件。 因此,针对用户的问题,我们给出以下步骤: 步骤1:确定eMMC设备的分区 使用`lsblk`或`df -h`命令查看eMMC设备的分区,通常为`/dev/mmcblk0`或类似,分区为`/dev/mmcblk0p1`等。 步骤2:选择测试方法 如果用户希望快速测试顺序读写,可以使用`dd`命令(注意数据安全)。 如果用户希望得到更全面的性能数据(如随机读写、IOPS等),则使用`fio`。 步骤3:执行测试并分析结果 另外,还可以使用其他工具如`ioping`测试延迟,`iostat`监控IO状态等。 由于用户可能在不同的操作系统环境下(如Linux),我们假设用户使用的是Linux系统。 下面给出一个更详细的测试方案: ### 1. 顺序读写测试(使用dd) - 顺序写:`dd if=/dev/zero of=测试目标 bs=块大小 count=数量 oflag=direct` - 顺序读:`dd if=测试目标 of=/dev/null bs=块大小 count=数量 iflag=direct` 注意:测试目标可以是块设备(如`/dev/mmcblk0p1`)或者文件系统中的大文件(如`./testfile`)。如果使用文件,请确保文件系统挂载在eMMC分区上。 ### 2. 随机读写测试(使用fio) 安装fio:`sudo apt-get install fio` 或 `sudo yum install fio` 编写一个fio配置文件,例如`emmc_test.fio`: ``` [global] ioengine=libaio iodepth=32 direct=1 size=1G runtime=60 group_reporting [sequential-write] rw=write bs=128k filename=/path/to/testfile [sequential-read] rw=read bs=128k filename=/path/to/testfile [random-write] rw=randwrite bs=4k filename=/path/to/testfile [random-read] rw=randread bs=4k filename=/path/to/testfile ``` 然后运行:`fio emmc_test.fio` 这样可以得到顺序读写随机读写性能报告。 注意:测试文件`/path/to/testfile`应该位于要测试eMMC分区上。 最后,我们提醒用户,测试写操作会破坏数据,请提前备份重要数据。 根据上述内容,我们生成相关问题。</think>### eMMC存储设备读写性能测试指南 eMMC(嵌入式多媒体卡)存储设备的性能测试主要通过以下工具方法进行: #### 1. **顺序读写测试(使用dd命令)** - **顺序写入测试**(销毁目标分区数据,谨慎操作): ```bash sync; time dd if=/dev/zero of=/dev/block/mmcblk0pX bs=8k count=100000 conv=fdatasync ``` - `/dev/block/mmcblk0pX`:目标eMMC分区(通过`lsblk`确认) - `conv=fdatasync`:确保数据完全写入物理介质 - 结果示例:`100000+0 records in` → 计算 `字节数/耗时` 得写入速度[^1] - **顺序读取测试**: ```bash echo 3 > /proc/sys/vm/drop_caches # 清缓存 time dd if=/dev/block/mmcblk0pX of=/dev/null bs=8k count=100000 ``` #### 2. **随机读写测试(使用fio工具)** 更安全的专业级测试(避免直接写块设备): ```bash sudo apt install fio fio --name=emmc_test --filename=./testfile --size=1G --rw=randrw --bs=4k --direct=1 --ioengine=libaio --iodepth=32 --runtime=60 --group_reporting ``` - **关键参数**: - `--rw=randrw`:混合随机读写(可改为`randread`/`randwrite`) - `--bs=4k`:模拟典型小文件I/O - `--direct=1`:绕过系统缓存 - `--iodepth=32`:队列深度模拟并发 - **输出解读**: ``` read: IOPS=15.3k, BW=60.1MiB/s write: IOPS=5120, BW=20.5MiB/s ``` #### 3. **内存缓存干扰排除** 所有测试必须添加: - `sync`:写入后强制同步 - `direct`标志(fio)或`oflag=direct`(dd) - 清缓存:`echo 3 > /proc/sys/vm/drop_caches` #### 4. **补充诊断工具** - **eMMC信息获取**: ```bash mmc extcsd read /dev/mmcblk0 | grep -i speed # 查看理论速度 ``` - **实时监控**: ```bash iostat -dxm 2 /dev/mmcblk0 # 实时IO统计 ``` #### 注意事项 1. **数据安全**:直接写块设备(如`/dev/mmcblk0pX`)会永久擦除分区数据,建议: - 使用文件测试(`--filename=./testfile`) - 在专用测试分区操作 2. **性能干扰**: - 关闭后台进程 - 测试≥3次取平均值 3. **硬件限制**:eMMC 5.1理论速度约400MB/s,实际受控制器、文件系统影响 > 测试案例:某Cortex-A9平台eMMC测试显示顺序写72MB/s,随机写4K IOPS=1.8k[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值