androbench跑分性能排查

  • 2025-11-21 07:30:38

androbench跑分对应IO特性分析

在博文:手机IO workload解析里面已经指出androbench测试时,产生的IO都是direct IO。

因为对手机反复androbench测试多次,根据测试log和代码分析,结论是:

Android跑分测试时,direct io对应的内核路径只有__blockdev_direct_IO里面会submit 大量bio的,该路径下其他函数仅仅submit了很少量的bio,这些很少量的bio不影响跑分测试结果的.

支撑上面结论的原因是:

1) androbench在进行跑分测试时, direct io路径对应的文件读写数据都是通过__blockdev_direct_IO下发到磁盘上的,该路径其他函数也会下发数据到磁盘上,

但是要么下发的是元数据,比如vfs_fsync_range这个函数(因为带O_SYNC进行IO测试了),要么是异常情况下,下发的少量同步脏数据,比如这个filemap_write_and_wait_range函数。

这些脏数据不会算到文件总的读写测试数据里面(即我的另外一篇文档:手机IO workload解析里面提到的androbench顺序读写产生的1536MB数据),

因为androbench在进行跑分测试之前已经fsync了待测试文件,所以只有很小概率异常情况下,会走到filemap_write_and_wait_range函数里去同步文件脏数据。

2) direct io对应的都是文件覆盖写,不会在__blockdev_direct_IO里面或者其他地方触发文件系统层的new 物理块分配工作。

3) androbench测试时,