@MatheMatrix
2017-09-01T20:22:59.000000Z
字数 1364
阅读 212
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 中通过 _startUnderlyingVm
来启动虚拟机,无论是迁移还是新启动,将 _startUnderlyingVm
以线程放到 _creationThread
里,启动 agent 的时候启动。
这里的 update_device_info
是 lib.vdsm.virt.vmdevices.common.update_device_info
,会调用所有的设备提供的 update_device_info:
其中我们关注的就是:lib.vdsm.virt.vmdevices.hostdevice.HostDevice#update_device_info
ovirt 会以这样的格式添加 xml:
Create domxml for a host device.
<devices>
<hostdev mode='subsystem' type='pci' managed='no'>
<source>
<address domain='0x0000' bus='0x06' slot='0x02'
function='0x0'/>
</source>
<boot order='1'/>
</hostdev>
</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