平台人生
作者平台人生·2016-12-19 09:07
软件开发工程师·平台人生

添加虚拟硬件你所不知道的那些事儿

字数 5471阅读 4596评论 0赞 1

作者:任加盟
文章来自微信公众号平台人生


虚拟化的一大优势就是所谓的虚拟资源动态添加,也就是我们常说的热添加,即在虚拟机在运行状态下添加虚拟CPU,虚拟内存等等。这种技术带来的好处是显而易见的,也是各虚拟化厂商吹嘘的一点,作为系统工程师的我也中了毒似的坚信不疑,相信可以采用这个技术随时随地调整CPU资源,添加虚拟硬件,直到有一天踏入一个陷阱,才知道这个技术并不是百分之百的“热添加”。
事件过程大概是这样的,我们接到一个需求,在几台Linux6.5虚拟机上添加网卡以增加新的网络通讯,虚拟机部署在VMware vphere5.1的环境中。按照之前的理解,这个动作在虚拟化环境上实现真实太简单了,而且是热添加,系统无停顿,业务无影响,一切都是那么美好,体现虚拟化优势的时候到了。然而,在操作过程中,无情的报警短信开始轰炸,被操作虚机上的业务成功率下降到报警阀值,一张事件单摆在了面前。
接下来就是无尽的迷茫,这样的一个简单的变更怎么会引起业务成功率的下降?说好的热添加哪去了?接下来就是问题的查找,首先检查了ESXi和Linux的状态信息,一切正常,网络流量正常,系统无报错。接下来检查了ESXi的系统日志,发现了如下记录:
XXXX-XX-XXT10:44:47.607Z [7A281B90 info 'Vmsvc.vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx' opID=68CB4E98-00000529-5f-2a] State Transition (VM_STATE_ON -> VM_STATE_RECONFIGURING) 重新配置vm
XXXX-XX-XXT10:44:47.608Z [7A819B90 verbose 'Vmsvc.vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx' opID=68CB4E98-00000529-5f-2a] Device hot-add requested. 热添加设备请求

XXXX-XX-XXT10:44:55.326Z [79E81B90 verbose 'Vmsvc.vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] sleepState value is -1 vm状态改变-1
XXXX-XX-XXT10:44:55.410Z [7A302B90 info 'vm:Vix: [18230 foundryVMPowerOps.c:980]: FoundryVMPowerStateChangeCallback: /vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] vmx/execState/val = fastSuspended.
(虚拟机快速挂起)
XXXX-XX-XXT10:44:55.410Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] Disconnect check in progress.
XXXX-XX-XXT10:44:55.412Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] Unmounting the vm. (卸载vm)
XXXX-XX-XXT10:44:55.422Z [7A302B90 info 'Libs'] CnxAuthdProtoSecureConnect: Unencrypted connection, skipping thumbprint exchange.
XXXX-XX-XXT10:44:55.429Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] VMDB unmount initiated.
XXXX-XX-XXT10:44:55.429Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] Unmounting VM complete. (卸载完成vm)

XXXX-XX-XXT10:44:55.509Z [7A302B90 info 'vm:Vix: [18230 foundryVMPowerOps.c:980]: FoundryVMPowerStateChangeCallback: /vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] vmx/execState/val = poweredOn. (执行vm power)
XXXX-XX-XXT10:44:55.509Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] Mount VM completion for vm.
XXXX-XX-XXT10:44:55.509Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] Mount VM completion for vm.
XXXX-XX-XXT10:44:55.510Z [7A302B90 info 'Libs'] VigorClient_ConnectOnlineVmhs: Connecting to VMHS-managed VM at /vm/#d8ab0ba9f83134f0/
XXXX-XX-XXT10:44:55.510Z [7A302B90 info 'vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] Mount VM Complete: OK (挂在虚拟机完成)
XXXX-XX-XXT10:44:55.515Z [7A302B90 info 'vm:Vix: [18230 foundryVM.c:11245]: FoundryVMMountStateChangeCallback: remount complete, signal job, VM = /vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx']
XXXX-XX-XXT10:44:55.518Z [7AC01B90 verbose 'Vmsvc.vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx'] sleepState value is 0 (vm状态为0)
XXXX-XX-XXT10:44:55.519Z [7A819B90 info 'Vmsvc.vm:/vmfs/volumes/42820d90-60f7eec3/by14fwzjhap1001/by14fwzjhap1001.vmx' opID=68CB4E98-00000529-5f-2a] State Transition (VM_STATE_RECONFIGURING -> VM_STATE_ON)虚拟机添加网卡正常

在日志中发现了如下关键字(日志中汉字部分是人工添加,并非原始系统日志):
Device hot-add requested. 热添加设备请求
sleepState value is -1 vm状态改变-1
vmx/execState/val = fastSuspended.
vmx/execState/val = poweredOn. (执行vm power)
Mount VM Complete: OK (挂在虚拟机完成)

这说明虚拟机在添加虚拟网卡的过程中,虚拟机的状态发生了改变,中间出现虚拟机挂起的过程,导致了虚拟机操作系统处于静默状态,进而造成业务的延迟。
这个现象是不是偶然现象?接下来通过实验并向VMware厂商做了求证,总结出了添加虚拟硬件虚拟机状态的变化原理,并分析了添加过程中影响系统静默时间长短的因素,为以后的变更方案给出了建议。
在测试环境中,我们针对不同的虚拟机操作系统,添加不同的虚拟硬件,不同的vphere版本做了添加虚拟硬件的实验,并逐步总结出了以下内容。
虚拟机添加虚拟硬件,虚拟机经历了以下几个过程:

  1. VM state reconfiguration
  2. VM Fastsuspended
  3. Stun VM
  4. 针对每一个虚拟设备设置checkpoint
  5. 针对新添加的设备设置中断
  6. 添加新的虚拟设备
  7. VM Fastresume
  8. VM state on

这一点在我们上面的日志中已经非常明确。然而虚机挂起的时间间隔是一个重要的数据,这涉及到影响业务的时间。通过实验和VMware三线工程师的确认,影响这个时间的因素包容如下几项:1.虚拟机的配置2.物理机性能3.OS的软件版本。根据这些因素,我们做了实验,在统一的基础环境中,针对不同vphere版本下,不同操作系统版本,添加不同的虚拟硬件,得到的数据如下:
vSphere5.1_u1_1065491
操作系统版本类型 热添加虚拟硬件名称 fastSuspended最长时间(单位:s或ms)
rhel6.5 CPU 157ms

memory    106ms
virtual disk    4.902s
virtual nic(vmxnet3)    17ms
virtual machine SCSI    1ms

rhel6.7 CPU 22ms

memory    26ms
virtual disk    17.574s
virtual nic(vmxnet3)    68ms
virtual machine SCSI    1ms

windows server 2008 r2 CPU 107ms

memory    95ms
virtual disk    596ms
virtual nic(vmxnet3)    106ms
virtual machine SCSI    209ms

vSphere5.5_u2_2718055
操作系统版本类型 热添加虚拟硬件名称 fastSuspended最长时间(单位:s或ms)
rhel6.5 CPU 95ms

memory    283ms
virtual disk    13.714s
virtual nic(vmxnet3)    102ms
virtual machine SCSI    11ms

rhel6.7 CPU 105ms

memory    127ms
virtual disk    13.686s
virtual nic(vmxnet3)    106ms
virtual machine SCSI    1ms

windows server 2008 r2 CPU 241ms

memory    192ms
virtual disk    411ms
virtual nic(vmxnet3)    286ms
virtual machine SCSI    137ms

(以上数据只是一个参考,由于基础环境的差异,以上数据并非一定准确)
通过以上实验,可以总结如下几点:
1、 添加virtual disk在Linux操作系统中,中断时间比较长,大概在10S左右,而Windows系统中断时间会短,在500MS左右,所以添加virtual disk要十分注意。
2、 添加虚拟CPU,内存,网卡时,Linux和Windows中断时间在100MS左右,差别不大。
3、 不同vphere版本下,中断时间差异不大。
4、 统一vphere版本下,不同操作系统版本间中断时间差异不大。
根据以上理论和实验,总结添加虚拟硬件操作的建议:
1、 在虚拟化环境未上线前,实际测试下在该环境中,添加不同虚拟硬件造成虚拟机处于挂起状态的时间并备案。
2、 进行添加虚拟硬件的操作前,将虚机中断时间告知应用部门,并一起确定实施时间段。
3、 建议针对业务比较繁忙,IO频繁的虚拟机做添加虚拟硬件的动作,要停止应用,或在业务低峰实施操作。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

X社区推广