[virt-tools-list] [vhostmd virtio PATCH v3 4/6] Add virtio functions

Jim Fehlig jfehlig at suse.com
Thu Nov 15 15:30:41 UTC 2018


On 11/15/18 5:13 AM, Trapp, Michael wrote:
> 
> 
> On 15.11.18, 00:35, "Jim Fehlig" <jfehlig at suse.com> wrote:
> 
>      On 11/12/18 8:12 AM, Michael Trapp wrote:
>      > At the vhostmd side virtio channels are Unix domain sockets from QEMU
>      > which are created during a VM start and removed when the VM is stopped.
>      >
>      > Basically this implementation
>      > - monitors a directory for new virtio channels (channel names contain VM UUID)
>      > - for valid UUIDs, also known by libvirtd, it connects to the UDS
>      > - buffers VM/HOST metrics and handles request/response on the sockets

[...]
>      > +/*
>      > + * lookup UDS sockets in the directory
>      > + * for valid type/name/mbuffer connect and register channel
>      > + */
>      
>      For a long time libvirt has been able to generate a socket path for unix
>      channels. The standard path prefix is /var/lib/libvirt/qemu/channel/target. When
>      a domain is started a subdir is created with name 'domain-<domid>-<domname>,
>      where each unix socket is created based on name attribute of target element. So
>      e.g. a domain with id '5' and name 'foobar' containing the following channel config
>      
>           <channel type='unix'>
>             <source mode='bind'/>
>             <target type='virtio' name='org.qemu.guest_agent.0'/>
>           </channel>
>           <channel type='unix'>
>             <source mode='bind'/>
>             <target type='virtio' name='org.github.vhostmd.1'/>
>           </channel>
>      
>      will result in
>      
>      /var/lib/libvirt/qemu/channel/target/domain-5-foobar/org.qemu.guest_agent.0
>      /var/lib/libvirt/qemu/channel/target/domain-5-foobar/org.github.vhostmd.1
>      
>      Within the VM you have
>      
>      /dev/virtio-ports/org.qemu.guest_agent.0
>      /dev/virtio-ports/org.github.vhostmd.1
>      
>      For consistency with other channels like the guest agent it would be nice to not
>      require specifying the channel path in the source element. I realize the
>      importance of uuid throughout this patch, but would it be possible to make this
>      work using libvirt's naming scheme? Sorry for not noticing this earlier :-(.
>      
>      Regards,
>      Jim
> 
> That's quite interesting and, beside the fact that it integrates in the available name scheme and directory structure
> of qemu,  it would reduce administration and potential misconfiguration.
>  From my understanding the vu_vm.id of a VM must be unique on the host and based on that I can switch my internal 'index'
> from uuid to id and use the config you suggested.

Ah right, the key only needs to be unique per host. 'id' should be fine.

> I guess we can rely on the fact that the unix socket of a virtio channel is immediately closed
> and removed from the filesystem with the 'virsh destroy' command, right?

Yes. libvirt will close the socket and unlink the path. In fact, the entire 
/var/lib/libvirt/qemu/channel/target/domain-<id>-<name> directory is removed 
when the VM is shutdown.

Regards,
Jim




More information about the virt-tools-list mailing list