Page 333 - 《软件学报》2021年第10期
P. 333
陈兴蜀 等:VMOffset:虚拟机自省中一种语义重构改进方法 3305
3.2 性能测试
本节通过相关测试评估 VMOffset 对 TVM 的性能影响,并考察 VMOffset 重构 TVM 进程视图及对 TVM 中
进程代码段进行完整性度量的效率.最后对比了 VMOffset 与现有其他虚拟机自省工具,评估了 VMOffset 的有
效性与通用性.
VMOffset 需在 TVM 启动阶段拦截其特定内核函数调用,以触发进程偏移量的获取流程.这一操作会导致
本不会发生的 VM-EXIT,对 TVM 的启动带来影响.由于 VMOffset 在获取所需进程偏移量后会还原修改,因此本
节通过测试 VMOffset 对 TVM 启动时间的影响,及 VMOffset 导致 TVM 发生 VM-EXIT 的次数与 TVM 启动阶
段调用 do_fork()及 release_task()总次数的占比,来评估 VMOffset 对 TVM 启动阶段的性能影响.
表 3 为对 VM2 及 VM4 分别使用 VMOffset 获取 10 次进程偏移量所得测试结果的平均值,VM2 及 VM4
的配置信息见表 2.表 3 中,TVM 的启动时间通过开源工具软件 BootChart 测试得到,总次数为 TVM 启动阶段相
关内核函数调用的总次数,以出现用户登录界面表示 TVM 启动阶段的结束.可见:对于 VM2,VMOffset 运行阶段
导致的 VM-EXIT 次数仅占总次数的 3.74%,引入的时间损耗为 0.042%;对 VM4 的 VM-EXIT 占比则为 4.62%,
引入的时间损耗仅为 0.041%.测试结果表明:VMOffset 在 TVM 启动完成之前即可获取全部所需进程偏移量,
对 TVM 启动阶段引入的时间损耗在 0.05%以内.实验同时测试了 VMOffset 运行过程中,TVM 中出现的最大 pid
值,其中 VM2 出现的最大 pid 值为 63,VM4 中则为 120,均小于公式(6)中设定的 32 768,因此设定该上限值是可
行的.此外,测试了 VMOffset 运行过程中部分成员偏移量候选项满足其约束条件的事件发生的次数,如 task_
struct 中,tasks、children、sibling 均为链表节点.在 90 次 VM-EXIT 中,children 及 sibling 满足基于 tasks 制定的
约束条件的次数仅为 2 次,其内存内容满足约束条件的事件发生的概率小于 1,因此多次迭代后均会被删除,从
而得到 tasks 成员的真正偏移量.类似可知,多次迭代之后,VMOffset 可得到全部所需进程偏移量.
Table 3 Performance test result of TVM in start-up stage
表 3 TVM 启动阶段性能测试结果
启动时间/s 启动时间/s VM-EXIT VM-EXIT 时间
虚拟机 总次数
(未部署 VMOffset) (部署 VMOffset) 次数 占比/% 损耗/%
VM2 47.44 47.46 90 2 402 3.74 0.042
VM4 48.80 48.82 152 3 285 4.62 0.041
本节同时采用 UnixBench 微基准测试工具评估 VMOffset 对 TVM 运行时的性能影响,图 11 为部署与未部
署 VMOffset 环境下,VM2 的系统性能测试结果.UnixBench 各测试项中,评分越高,表明性能越好.
Fig.11 Performance test result of TVM in running stage
图 11 TVM 运行阶段性能测试结果
由图 11 可知,VM2 的进程创建与切换(process creation, pipe-based context switching)、系统调用(system call
overhead, excel throughput)、shell 脚本测试(shell scripts)、文件传输(file copy)等方面的性能在部署与未部署
VMOffset 环境下均无明显波动.因 VMOffset 对 TVM 的性能影响主要源于拦截其内核函数调用导致的 VM-