Re: [PATCH 0/8] Virtio-over-PCIe on non-MIC

From: Stephen Warren
Date: Fri Jan 18 2019 - 18:58:04 EST


On 1/16/19 9:32 AM, Vincent Whitchurch wrote:
The Virtio-over-PCIe framework living under drivers/misc/mic/vop implements a
generic framework to use virtio between two Linux systems, given shared memory
and a couple of interrupts. It does not actually require the Intel MIC
hardware, x86-64, or even PCIe for that matter. This patch series makes it
buildable on more systems and adds a loopback driver to test it without special
hardware.

Note that I don't have access to Intel MIC hardware so some testing of the
patchset (especially the patch "vop: Use consistent DMA") on that platform
would be appreciated, to ensure that the series does not break anything there.

So a while ago I took a look at running virtio over PCIe. I found virtio basically had two parts:

1) The protocol used to enumerate which virtio devices exist, and perhaps configure them.

2) The ring buffer protocol that actually transfers the data.

I recall that data transfer was purely based on simple shared memory and interrupts, and hence could run over PCIe (e.g. via the PCIe endpoint subsystem in the kernel) without issue.

However, the enumeration/configuration protocol requires the host to be able to do all kinds of strange things that can't possibly be emulated over PCIe; IIRC the configuration data contains "registers" that when written select the data other "registers" access. When the virtio device is exposed by a hypervisor, and all the accesses are emulated synchronously through a trap, this is easy enough to implement. However, if the two ends of this configuration parsing are on different ends of a PCIe bus, there's no way this can work.

Are you thinking of doing something different for enumeration/configuration, and just using the virtio ring buffer protocol over PCIe?

I did post asking about this quite a while back, but IIRC I didn't receive much of a response. Yes, here it is:

https://lists.linuxfoundation.org/pipermail/virtualization/2018-March/037276.html
"virtio over SW-defined/CPU-driven PCIe endpoint"