[libvirt] Introducing Fabian Freyer (GSoC 2016 student)

Cole Robinson crobinso at redhat.com
Wed May 4 14:56:34 UTC 2016


Welcome Fabian!

- Cole

On 05/04/2016 07:50 AM, Roman Bogorodskiy wrote:
> Hi,
> 
> I'd like to introduce Fabian Freyer (CCed), he's taking part in Google
> Support of Code this year within FreeBSD organization and his project is
> called "Improving libvirt support for bhyve".
> 
> Below I'm sharing a tentative plan we currently have. Or, to be more
> specific, it's a list of ideas for the bhyve driver with things were
> implementation is clear going first, followed by items were some
> additional research and working on approach needed. There's no goal to
> implement everything from this list though.
> 
> This list was assembled by Fabian with some minor edits from me.
> 
> Suggestions and ideas are very welcome.
> 
> ---
> 
> The primary aim of this project is to implement missing calls and
> functionality in the libvirt bhyve driver. According to the libvirt API
> Support Matrix [1], there are a large number of calls not yet implemented. While
> some missing API calls are not applicable to bhyve, a number of them are,
> among them the following calls:
> 
>  General calls:
> 
>   - virConnectDomainXMLFromNative
>     This would mostly be an argument parser for a bhyve(8) and bhyvectl(8)
> command line.
>   - virConnectGetCPUModelNames
>     This needs a research: bhyve is not very flexible in configuration of
>     what CPU model is exposed to the guest, need to figure out if that’s
>     worth implementing now. 
> 
>  Connection calls: 
>    
>    Most of these include some form of authentication handling and are
> therefore not applicable. However, the following do apply to bhyve and are
> easy to implement:
> 
>   - virConnectGetType
>     Trivially return “BHYVE”
>   - virConnectIsAlive
>     Trivially return 1, since “A connection will be classed as
>     alive if it is [...] local” and /dev/vmm is local. 
>   - virConnectIsEncrypted
>     Trivially return 0, since bhyve does not support encrypted interfaces.
> 
>  General Domain calls:
> 
>   - virDomainGetMaxMemory
>     Since bhyve does not support memory ballooning, just
>     return the amount of memory allocated here
>   - virDomainGetMaxVcpus, virDomainGetVcpus
>     Would use the approach described in this mailing list
>     thread: “Until the vCPU state is exposed by bhyvectl, or we provide a
>     sysctl, you can use heuristics: the number of vCPU threads for the bhyve
>     process, or scan all vCPUs and only count those that have a non-zero RIP.” [2]
>   - virDomainGetCPUStats
>   - virDomainGetTime
>   - virDomainInjectNMI
>     Call bhyvectl --inject-nmi
>   - virDomainReset
>     Reset a bhyve VM with ‘bhyvectl --force-reset’ and then clean things up
>     using bhyvectl --destroy; update bhyve monitor code to handle exit
>     code 0 from bhyve(8) that’s corresponding to reset (0 - reset
>     / reboot, 1 - shutdown, 2 - halt) to trigger re-starting of the VM.
>   - virDomainReboot
> 
>  Block-Device level calls:
> 
>    These would implement access to the vdev block storage layer. The
> plan is implement support for both file-backed and zvol-backed virtual
> machines for the following API calls:
> 
>   - virDomainGetBlockInfo
>   - virDomainBlockPeek
>   - virDomainBlockCopy
>   - virDomainBlockStats
>   - virDomainBlockStatsFlags
> 
>    Going further, since zvols support snapshotting, I
> plan to implement the following for zvol-backed storage:
> 
>   - virDomainBlockCommit
>   - virDomainBlockPull
> 
>  VirtFS layer
>    I would like to create patches to support
> specifying filesystems when creating the domain as well as the following
> calls to be merged at a later time when VirtFS-9p support for bhyve becomes
> ready:
>   - virDomainFSFreeze
>   - virDomainFSThaw
> 
>   Memory inspection
>   - virDomainMemoryPeek
>     A guest’s memory space is exposed in /dev/vmm, so this
>     call would have to read from that. 
>   - virDomainMemoryStats
> 
>  Virt-host-validate(1) bhyve support
> 
>    Add bhyve support to virt-host-validate:
>   - Check support of CPU supports features required for bhyve
>   - Check if the vmm module is available
>   - Check if essential networking things are available
>     (if_bridge(4), if_tap(4)) + nmdm(4) for console
> 
>  Networking support
> 
>    Currently the bhyve’s libvirt driver (as well as libxl/FreeBSD driver)
> only supports L2 interface bridging. There’s no support for upper level schemas
> like NAT for example. This is a huge task that involves research of what
> firefall is more applicable (ipfw or pf), designing of the firewall rules and
> the actual implemtation.
> 
>  PCI passthrough support
>    I.e. the the "bhyve ... -s 7:0,passthru,4/0/0" thing. Probably that will
> involve the HAL nodedev driver modifications.
> 
> ---
> 
> PS For historic purposes, I've stashed the original proposal:
> 
> https://people.freebsd.org/~novel/misc/FabianFreyer_GoogleSummerofCode2016proposalImprovingbhyvesupportforlibvirt.pdf
> 
> 1: https://libvirt.org/hvsupport.html
> 2:
> https://lists.freebsd.org/pipermail/freebsd-virtualization/2014-April/002467.html
> 
> Roman Bogorodskiy
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 




More information about the libvir-list mailing list