Xpra: Ticket #983: AF_VSOCK support

When using the ProxyServer, or just when connecting to/from a virtual machine in general, it would be very nice to support VSOCK. One could also envisage running virtual machines without any networking whatsoever (or even the host, and let the VM have the NIC instead), only the VSOCK would be used for display forwarding.



qemu ... -device vhost-vsock-pci,id=vhost-vsock-pci0
.svm_family = AF_VSOCK,
.svm_cid = VMADDR_CID_HOST,
.svm_port = 1234,

Not sure about the kernel + python support.

/usr/include/bits/socket.h:#define PF_VSOCK	40	/* vSockets.  */
/usr/include/bits/socket.h:#define AF_VSOCK	PF_VSOCK

This may require cythonizing:

>>> s=socket.socket(40)
>>> s.bind((1234, ))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: getsockaddrarg: bad family

Wed, 16 Mar 2016 05:50:44 GMT - Antoine Martin: status, milestone changed

Sat, 02 Apr 2016 16:46:30 GMT - Antoine Martin:


Sat, 02 Apr 2016 16:48:07 GMT - Antoine Martin: attachment set

patch attempting to force AF_VSOCK into the python socket class

Sun, 03 Apr 2016 05:48:58 GMT - Antoine Martin:

The vsock bits have been reverted in December 2015: VSOCK: revert virtio-vsock until device spec is finalized, which makes it very hard to test. And it's not immediately obvious because you get this unhelpful error:

qemu-system-x86_64: -device vhost-vsock-pci,id=vh0,addr=4.0,guest-cid=4: vhost-vsock: failed to open vhost device: Unknown error -2

You then have to figure out with strace that the device does not exist..

To fix this, you either have to download the kernel tree they are using (see RFC,v5,4/5 VSOCK: Introduce vhost_vsock.ko. (for example the Fedora rawhide kernels - the patch applies cleanly there still, bar the maintainers file which can be skipped anyway)

Mon, 04 Apr 2016 05:06:54 GMT - Antoine Martin: attachment set

updated patch

Mon, 04 Apr 2016 06:18:10 GMT - Antoine Martin: owner, status, milestone changed

Once I figured out that you MUST use the kernel and qemu versions from http://qemu-project.org/Features/VirtioVsock (other combinations may or may not work - this one definitely does, the patched kernel is needed at both ends too), it wasn't too difficult: done in r12309. It is very fast. The latency goes from ~12ms to 0. Packets come in 256KB chunks at about 1.1GB/s with fairly low CPU usage.


Note: I thought the connections using vsock were from guest to host only, but that is not the case: Re: AF_VSOCK status (will need re-testing).

@smo: let's discuss.


Fri, 08 Apr 2016 04:59:07 GMT - Antoine Martin:

See also ticket:1159#comment:1 for the new vsock-auth= syntax.

Mon, 11 Apr 2016 11:08:36 GMT - Antoine Martin:

Conversely, you can run a server in the guest and connect to it using the assigned CID. Re-using the same qemu command line as comment:4 (guest-cid=4). The guest can start a server:

xpra start :100 --start-child="xterm" --bind-vsock=auto:10000

And we can connect to it from the host using:

xpra attach vhost:4:10000

Fri, 27 May 2016 07:03:36 GMT - Antoine Martin:

r12698 adds it to the man page.

Mon, 03 Oct 2016 10:25:44 GMT - Antoine Martin:

VSOCK is included in kernel 4.8, here was the pull request: vhost: new features for 4.8

Fri, 18 Nov 2016 00:41:28 GMT - Smo:

Just a quick update to this old ticket.

Looks like the kernel modules are there now with Fedora 24 which is what I run on my workstation.

After loading vhost_vsock module and trying to make use of it in qemu results in

'vhost-vsock-pci' is not a valid device model name

Does qemu perhaps have to be configured with an option to enable vsock support?

Fri, 18 Nov 2016 06:29:53 GMT - Antoine Martin: attachment set

email sent to the AF_VSOCK maintainer and kvm ML

Fri, 18 Nov 2016 06:30:13 GMT - Antoine Martin:

Seems that even qemu 2.7 in Fedora 25 does not have vsock builtin. I've pinged an email to the maintainer. (attached)

Sat, 19 Nov 2016 04:26:23 GMT - Antoine Martin:

Got the answer from the 2.8 release notes http://wiki.qemu.org/ChangeLog/2.8#virtio: New device vhost-vsock.

You should be able to test with the 2.8 RC.

Mon, 21 Nov 2016 14:49:55 GMT - Antoine Martin:

Reply: https://copr.fedorainfracloud.org/coprs/stefanha/vsock/

Mon, 26 Dec 2016 09:17:03 GMT - Antoine Martin: status changed; resolution set

This has been tested, see #1387 for a follow up - closing.

Sat, 23 Jan 2021 05:11:35 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/983