[关闭]
@MatheMatrix 2017-09-01T20:22:59.000000Z 字数 1364 阅读 212

ovirt 代码简介与 ovirt 中的 GPU 设备

ovirt gpu


概览

ovirt 代码大概结构可以参考:
https://www.slideshare.net/panliyang/ovirt

ovirt 原始代码在 http://gerrit.ovirt.org,在 Github 上有 clone:https://github.com/oVirt

其中 agent 部分代码在这个仓库:git@github.com:oVirt/vdsm.git,官方提供了一个 development guide,不过面向的是 CentOS/Fedora 上。

macOS 如果想通过安装 vdsm 然后来方便查引用关系的话应该是不可行的,因为代码依赖 cpopen,而 cpopen 依赖 ,这个应该是 Linux specific 的。

所以只能靠搜索了。

vdsm

vdsm 中通过 _startUnderlyingVm 来启动虚拟机,无论是迁移还是新启动,将 _startUnderlyingVm 以线程放到 _creationThread 里,启动 agent 的时候启动。

Created with Raphaël 2.1.2_startUnderlyingVm_startUnderlyingVm_run_run_domDependentInit_domDependentInit_getUnderlyingVmDevicesInfo_getUnderlyingVmDevicesInfoupdate_device_infoupdate_device_infowith domain_required()if initDomain

这里的 update_device_infolib.vdsm.virt.vmdevices.common.update_device_info,会调用所有的设备提供的 update_device_info:
image.png-146.1kB
其中我们关注的就是:lib.vdsm.virt.vmdevices.hostdevice.HostDevice#update_device_info

gpu

ovirt 会以这样的格式添加 xml:

  1. Create domxml for a host device.
  2. <devices>
  3. <hostdev mode='subsystem' type='pci' managed='no'>
  4. <source>
  5. <address domain='0x0000' bus='0x06' slot='0x02'
  6. function='0x0'/>
  7. </source>
  8. <boot order='1'/>
  9. </hostdev>
  10. </devices>

如果是 hotplug 的话,走 lib.vdsm.virt.vm.Vm#hostdevHotplug,会先执行 lib.vdsm.hostdev.detach_detachable,不过对于 PCI 设备实际没有执行太多东西。

lib.vdsm.virt.vm.Vm#hostdevHotunplug 时会执行 _dom.detachDevice,然后 _waitForDeviceRemoval,原因参考 http://libvirt.org/html/libvirt-libvirt-domain.html#virDomainDetachDeviceFlags

image.png-128.1kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注