我想在运行于Android模拟器上的Android应用上模拟慢/高延迟磁盘IO的效果。
与节流网络IO不同,我无法在Android Emulator文档中找到有关如何执行此操作的任何内容。我发现qemu显然支持节流磁盘IO-是否可以在Android应用程序中执行此操作?
答案 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
...