AndroBench 是由阿姆斯特丹自由大学开发的,用于评估 Android 设备存储(如内部存储、SD 卡)读写性能的工具,它通过模拟真实世界的工作负载,给出一系列直观的分数。
核心测试模式
在解释具体参数之前,首先要理解 AndroBench 的两种核心测试模式,这是最关键的“参数”选择:
-
Sequential (顺序读写)
- 模拟场景:下载大文件、观看高清视频、复制大文件。
- 工作原理:数据被连续地写入或读出存储介质,磁头/读写指针不需要频繁移动。
- 特点:这是所有存储设备(包括机械硬盘 HDD)都能轻松完成的任务,速度最快,它主要反映了存储介质的理论最高带宽。
-
Random (随机读写)
- 模拟场景:启动 App、加载游戏、系统日常操作、多任务处理。
- 工作原理:数据在存储介质上随机、不连续地分布,读写操作需要频繁地移动磁头/改变读写位置。
- 特点:这是衡量固态硬盘 性能的关键指标,对于 SSD 随机性能比顺序性能更能体现其真实用户体验,机械硬盘在随机读写下性能会急剧下降。
要全面评估一块存储的性能,必须同时运行 Sequential 和 Random 测试,特别是对于手机或平板,Random 4K 的读写速度是衡量其日常使用流畅度的“金标准”。
详细参数解释
在 AndroBench 的 UI 界面或命令行模式下,你会看到以下可配置的参数:
Test Type (测试类型)
这是最核心的参数,决定了你运行的是哪种测试。
-
All Tests (所有测试):
- 功能:运行所有可用的测试项目,包括不同文件大小、不同队列深度的顺序和随机测试。
- 适用场景:最全面的性能评估,耗时最长,但结果最完整,适合需要详细了解存储设备所有性能指标的用户。
-
Sequential Read/Write (顺序读写):
- 功能:只运行顺序读写测试。
- 适用场景:快速评估存储的理论最大读写带宽,例如测试视频剪辑、文件传输的速度。
-
Random Read/Write (随机读写):
- 功能:只运行随机读写测试。
- 适用场景:重点评估存储的日常应用性能,特别是启动 App、加载游戏等场景下的表现,这是判断存储“快不快”的关键。
-
Database (数据库测试):
- 功能:模拟数据库操作,如 SQLite 的读写。
- 适用场景:专门针对需要进行大量数据库操作的应用进行性能评估,如社交 App、笔记软件等。
-
Android (Android 典型操作):
- 功能:模拟 Android 系统和典型 App 的混合工作负载,包括顺序和随机读写。
- 适用场景:更贴近真实 Android 用户体验的综合性能评估。
File Size (文件大小)
这个参数定义了测试所用单个测试文件的大小。
- 常见选项:4KB, 16KB, 512KB, 1MB, 4MB, 16MB, 32MB, 128MB, 256MB, 512MB, 1GB。
- 解释:
- 小文件 (如 4KB, 16KB):主要影响随机读写性能,因为随机读写本身就是由大量小 I/O 操作组成的。
- 大文件 (如 128MB, 1GB):主要影响顺序读写性能,大文件能更好地利用存储的持续读写带宽。
- 选择建议:
- 如果你想看最核心的随机性能,关注 Random 4K 的结果。
- 如果你想看顺序性能,关注大文件(如 128MB)的顺序读写结果。
Queue Depth (队列深度)
这个参数非常重要,它模拟了有多少个读写请求在同时等待处理。
- 解释:
- Queue Depth = 1:单队列,单次只处理一个 I/O 请求,这代表了存储设备在处理简单、串行任务时的性能。
- Queue Depth > 1:多队列,2, 4, 8,这模拟了多任务并发场景(如后台下载、游戏加载、系统更新同时进行),现代 SSD 的控制器可以并行处理多个请求,因此队列深度越高,理论上的峰值性能也越高。
- 选择建议:
- Queue Depth = 1 的结果更能反映存储介质本身的物理极限。
- 较高的 Queue Depth (如 4, 8) 的结果更能反映在重度多任务下的真实性能。
Multi-threading (多线程)
这个参数决定了测试程序会同时启动多少个线程来执行 I/O 操作。
- 解释:线程数越多,对存储 I/O 子系统的并发压力就越大。
- 与 Queue Depth 的关系:
线程数和队列深度通常会一起作用,4个线程,每个线程的队列深度为2,总共就会产生 4 * 2 = 8 个并发 I/O 请求。 - 选择建议:
- 线程数 = 1:最简单的测试,压力最小。
- 多线程 (如 4, 8):模拟更复杂的真实世界负载,对存储的性能考验更全面。
Use AIO (使用异步 I/O)
这是一个高级选项,影响 I/O 操作的执行模式。
- 同步 I/O (SIO):发起一个 I/O 请求后,程序必须等待这个请求完成才能继续执行下一步,这会阻塞线程。
- 异步 I/O (AIO):发起一个 I/O 请求后,程序可以立即继续做其他事情,无需等待,当 I/O 完成后,系统会通过回调等方式通知程序。
- 解释:AIO 是现代高性能系统(包括 Android)普遍采用的方式,尤其是在处理并发 I/O 时效率更高,开启 AIO 通常能获得更真实、更高的性能分数。
- 选择建议:保持开启,除非你有特殊的研究需求,否则始终使用 AIO 来进行测试。
Test Directory (测试目录)
指定测试文件在设备上的存放位置。
- 解释:你可以将测试放在不同的分区,
/storage/emulated/0/:设备的内部共享存储空间。/storage/sdcard1/:可移动的 SD 卡(如果存在)。- 通过开发者选项挂载的特定分区。
- 选择建议:根据你的测试目标选择,想测手机内置存储,就用默认路径;想测 SD 卡,就修改为 SD 卡的路径。
Wipe Cache (清除缓存)
在每次测试开始前,是否清除测试目录。
- 解释:强烈建议始终开启这个选项,这样可以保证每次测试都在一个“干净”的环境下进行,避免了上次测试产生的缓存数据干扰本次测试结果的准确性。
如何选择参数组合?(实战指南)
| 测试目标 | 推荐的 Test Type | 关键关注结果 | 简要说明 |
|---|---|---|---|
| 快速了解综合性能 | All Tests | Random 4K Read/Write,总分 | 最全面的测试,耗时较长,Random 4K 是核心指标。 |
| 评估日常使用流畅度 | Random Read/Write | Random 4K Read/Write,Random 4K QD1 Read/Write | 直接关系到 App 启动速度和游戏加载速度。 |
| 评估文件传输/视频剪辑 | Sequential Read/Write | Sequential 128MB Read/Write | 反映存储的理论最大带宽。 |
| 评估数据库性能 | Database | Random 4K Read/Write (针对数据库操作) | 模拟特定应用场景的性能。 |
| 极限性能测试 | All Tests | Random 4K QD8 Read/Write | 在高并发压力下的性能表现,适合顶级设备对比。 |
结果解读
AndroBench 会给出每个测试项目的 MB/s (兆字节/秒) 和 IOPS (Input/Output Operations Per Second,每秒读写次数)。
- MB/s (Throughput / 吞吐量):衡量数据传输的“管道”有多粗。顺序读写主要看这个指标。
顺序读取 500 MB/s 意味着每秒可以读取 500MB 的数据。
- IOPS (Operations / 操作次数):衡量处理小请求的“速度”有多快。随机读写主要看这个指标。
随机读取 50K IOPS 意味着每秒可以完成 50,000 次独立的读写操作。
对于普通用户来说,看懂 AndroBench 的关键在于:
- 区分顺序和随机:顺序看 MB/s,随机看 IOPS。
- 抓住核心指标:Random 4K Read/Write 的 IOPS 是衡量日常体验最重要的指标。
- 保持测试条件一致:如果要对比不同设备或不同存储,请尽量使用相同的测试参数组合(例如都使用 "All Tests"),这样结果才有可比性。
