如何在Android Emulator中模拟慢速磁盘IO?

时间:2018-11-21 01:10:22

标签: android

我想在运行于Android模拟器上的Android应用上模拟慢/高延迟磁盘IO的效果。

与节流网络IO不同,我无法在Android Emulator文档中找到有关如何执行此操作的任何内容。我发现qemu显然支持节流磁盘IO-是否可以在Android应用程序中执行此操作?

1 个答案:

答案 0 :(得分:2)

找到了如何使用Android模拟器来做到这一点:

QEMU支持以下用于IO限制的选项(-drive选项的子选项):

|-----------------------+-----------------------|
| -drive                | block_set_io_throttle |
|-----------------------+-----------------------|
| throttling.iops-total | iops                  |
| throttling.iops-read  | iops_rd               |
| throttling.iops-write | iops_wr               |
| throttling.bps-total  | bps                   |
| throttling.bps-read   | bps_rd                |
| throttling.bps-write  | bps_wr                |
|-----------------------+-----------------------|

如果使用-verbose选项运行仿真器,则可以检查用于启动VM的QEMU选项是什么:

emulator -avd [avd name] -verbose

例如,用于userdata的图像驱动器选项可能如下所示:

-drive if=none,index=2,id=userdata,file=/path/to/userdata-qemu.img.qcow2,overlap-check=none,cache=unsafe,l2-cache-size=1048576

将路径复制到图像(/path/to/userdata-qemu.img.qcow2)并手动传递:

emulator -avd [avd name] -data /path/to/userdata-qemu.img.qcow2

如果使用此命令启动仿真器,它将使用此路径存储用户数据映像,而不是自动发现。现在,我们可以使用它只是将QEMU选项连接起来的事实,以注入我们的节流参数:

emulator -avd [avd name] -data /path/to/userdata-qemu.img.qcow2,throttling.iops-total=10,serial=qwerty

最终的QEMU选项字符串如下所示:

...
-drive if=none,index=2,id=userdata,file=/path/to/userdata-qemu.img.qcow2,throttling.iops-total=1,serial=test.qcow2,overlap-check=none,cache=unsafe,l2-cache-size=1048576
...