OpenRemoved_Tina_Linux_存储性能_参考指南
1 概述
1.1 编写目的
介绍TinaLinux 存储性能的测试方法和历史数据,提供参考。
1.2 适用范围
Tina V3.0 及其后续版本。
1.3 相关人员
适用于TinaLinux 平台的客户及相关技术人员。
2 经验性能值
Flash 性能与实际使用物料有关,受不同存储介质、不同厂家、不同型号甚至不同老化程度的影响,所以经验值仅供参考。
2.1 顺序读写性能经验值
IC | 物料类型 | Flash 型号 | 顺序读性能 | 顺序写性能 | 其他说明 |
---|---|---|---|---|---|
R16 | raw nand | K9F4G08U0F | 40M/s | 5.6M/s | |
R6 | spi nand | MX35LF1GE4AB | 4M/s | 2M/s | 见注1 |
R6 | spi nor | FM25Q128 | 5.6M/s | 3.1M/s | 见注2 |
R30 | mmc | KLM8G1WEPD-B031 | 77M/s | 7.7M/s | 见注3 |
R333 | spi nand | F50L1G41LB | 5.7M/s | 2.0M/s | 见注1 |
R328 | spi nand | DS35X1GAXXX | 12.1M/s | 4M/s | 见注4 |
R328 | spi nand | W25N01GVZE1G | 6.9M/s | 2.7M/s | 见注5 |
R329 | spi nand | GD5F1GQ4UBYIG | 7.5M/s | 2.9M/s | 见注6 |
R528 | spi nand | GD5F1GQ4UBYIG | 5.1M/s | 2.8M/s | 见注6 |
MR813 | mmc | THGBMBG7D2KBAIL | 165.56M/s | 32.18M/s | 见注7 |
R528 | mmc | THGBMJG6C1LBAB7 | 62.5M/s | 17.4M/s | 见注8 |
R528 | mmc | KLM8G1GESD | 63M/s | 20.4M/s | 见注8 |
R528 | mmc | KLM8G1GESD | 61.8M/s | 39.5M/s | 见注9 |
D1 | spi nand | MX35LF2GE4AD | 4.8M/s | 2.9M/s | 见注10 |
V853 | emmc | THGBMJG6C1LBAU7 | 156M/s | 25M/s | 见注7 |
V853 | emmc | THGBMJG6C1LBAU7 | 69M/s | 25M/s | 见注8 |
V853 | spinand | MX35LF1GE4AB-Z4I | 7.7M/s | 2.9M/s | 见注11 |
V853 | spi nor | GD25F256 | 7.4M/s | 270KB/s | 见注4 |
说明
- 单线写,双线读,100MHz。
- 单线写,单线读,50MHz。
- HS400,50MHz,8 线。
- 四线读写,100MHz。
- ubifs,非压缩,四线读写,100MHz。
- ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz,performance 调频策略。
- hs400,100MHz,8 线。
- hs200,150MHz,4 线, 1.8V。
- hs200,150MHz,4 线, 1.8V, 不带O_SYNC
- ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz。performance 调频策略, cpu 频率1440000Hz, dram频率792MHz;
- ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz。performance 调频策略, cpu 频率1104000Hz, dram频率936MHz;
2.2 随机读写性能经验值
IC | 物料类型 | Flash 型号 | 顺序读性能 | 顺序写性能 | 其他说明 |
---|---|---|---|---|---|
R6 | raw nand | K9F4G08U0F | 2486 | 146 | 见注1 |
R333 | spi nand | F50L1G41LB | 959 | 266 | 见注1 |
R329 | spi nand | GD5F1GQ4UBYIG | 1890 | 592 | 见注2 |
R528 | spi nand | GD5F1GQ4UBYIG | 907 | 385 | 见注2 |
MR813 | mmc | THGBMJG6C1LBAU | 6015 | 1596 | 见注3 |
R528 | mmc | THGBMJG6C1LBAB7 | 2657 | 830 | 见注4 |
R528 | mmc | THGBMJG6C1LBAB7 | 2657 | 830 | 见注4 |
R528 | mmc | KLM8G1GESD | 2582 | 872 | 见注4 |
R528 | mmc | KLM8G1GESD | 2038 | 2220 | 见注5 |
D1 | spi nand | MX35LF2GE4AD | 919 | 425 | 见注6 |
V853 | emmc | THGBMJG6C1LBAU7 | 4407 | 1363 | 见注3 |
V853 | emmc | THGBMJG6C1LBAU7 | 3833 | 1287 | 见注4 |
V853 | spinand | MX35LF1GE4AB-Z4I | 1773 | 590 | 见注7 |
说明
- 单线写,双线读,100MHz
- ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz,performance 调频策略。
- hs400,100MHz,8 线
- hs200,150MHz,4 线, 1.8V
- hs200,150MHz,4 线, 1.8V, 不带O_SYNC
- ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz,performance 调频策略, cpu 频率1440000Hz, dram频率792MHz;
- ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz。performance 调频策略, cpu 频率1104000Hz, dram频率936MHz;
3 顺序读写性能
3.1 顺序写性能理论值计算
物料的数据手册一般会提供擦除和写的耗时,关注数据手册中Block Erase time、PageProgram time 此类关键字数值。以GD25Q256E(spi nor)为例,Block Erase time:0.12s/0.15s typical(Block size 64KByte) ,Page Program time: 0.25ms typical(Page size 256Byte)。
代码语言:javascript复制| High Speed Clock Frequency | Fast Program/Erase Speed |
| 133MHz for fast read with 30PF load | Page Program time: 0.25ms typical |
| Dual I/O Data transfer up to 266Mbits/s | Sector Erase time: 45ms typical |
| Quad I/O Data transfer up to 532Mbits/s | Block Erase time: 0.12s/0.15s typical |
上面的Quad 的传输速率,是通过133MHZ * 4 line 计算到的,是一个理论数据,而实际的使用场景,我们要读数据前要用1 line 发送5(6)Bytes 数据,即cmd addr[3(4)] dummy(大于16M 的FLASH,需要发4byte 地址), 其次我们SPI 控制器最大输出频率100Mhz。假设 发一次命令读N bytes 数据,则命令和数据所占时间的比例为5 : (N/4), 那么实际4 line 的极限速度等于(N/4) / [5 (N/4)] * CLK * 4Mbits/s。以100Mhz 4line 为例,理论极限速度为47.68MB/s。
代码语言:javascript复制speed = 32MByte/(erase_time program_time spi_time)
= 32MByte/(0.15s*(32MByte/64KByte) 0.25ms*(32MByte/256Byte) 32MByte/47.68MB/s)
= 32MByte/(76.8s 32.8s 0.67s)
= 290KByte/s
以GD5F1GQ4UAYIG(spinand)为例,Block Erase time: 3ms typical(Block size128KByte) ,Page Program time: 0.4ms typical(Page size 2048Byte)。
代码语言:javascript复制speed = 128MByte/(erase_time program_time)
= 128MByte/(3ms*(128MByte/128KByte) 0.4ms*(128MByte/2048Byte) 128MByte/47.68MB/s)
= 128MByte/(3072ms 26214.4ms 2684ms)
= 4.0MByte/s
3.2 顺序性能测试方法
Tina 测试平台有2 个顺序读写性能的测试用例,分别如下。
代码语言:javascript复制/spec/storage/seq #适用于>64M 内存的方案
/spec/storage/tiny-seq #适用于<=64M 内存的方案和使用ubifs的存储方案
特别注意的是,在测试文件数据量非常小时,内存对测试影响太大,测试出来的读数据会非常不准确。例如,对spinor 的测试分区只有5M 大小,而内存有64M,测试出的读可能达到100 M/s,此时的读数据不具有参考价值。
3.3 顺序性能解读
顺序读写性能以读写速度(KB/s;MB/s) 作为衡量标准,主要体现大文件连续读写的性能。此时,速度值越大,顺序读写性能越好。 不同存储介质的读写性能是有差异的,甚至同一种存储介质,不同厂家不同型号可能都有差别。 以mmc 为例,有的mmc 写性能只能达到10M/s,而有的mmc 写性能达到150M/s。一般来说,MMC 的规格书中有体现性能估值。 常见的,不同介质顺序读写性能排序如下。
代码语言:javascript复制读: mmc > raw nand > spinor > spinand
写: mmc > raw nand > spinand > spinor
4 随机读写性能
4.1 随机性能测试方法
Tina 测试平台有1 个随机读写性能的测试用例,且只适用于>64M内存方案。
代码语言:javascript复制/spec/storage/rand
4.2 随机性能解读
随机读写性能以IOPS(IO per second) 为衡量标准,理解为每秒处理多少个IO 请求。此指标反应的是小文件的读写性能。此数值越高,表示其随机读写性能越好。 与顺序读写相似的是,其数值也与实际物料,当前工作模式有关。
5 读写性能的影响因素
5.1 O_SYNC
注意Tina 使用iozone 时,默认参数是使能了O_SYNC 的,降低了cache 的影响。应用正常运行时,一般不使用O_SYNC,可获得比所测数据更佳的性能。 如需测不带O_SYNC 的性能,需修改iozone 参数,测试用例的menuconfig 中提供了ASYNC选项,选上即可。 测试用例运行过程会打印出iozone 的参数,具体参数含义请查看iozone 的帮助。
5.2 调频策略
不同调频策略会对读写性能造成影响,建议在测试的时候切换到performance 策略。
代码语言:javascript复制find . -name scaling_governor #找到调频节点
echo "performance" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor #修改策略
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor #确认策略切换成功
5.3 其他
对比性能时,需保持其他条件尽可能一致,包括但不限于CPU 频率,DDR 频率,DDR 类型,系统负载等。多次测试会有波动,可以烧录固件后第一次测试的数据为准,或多次取平均。