RFC Guest/Guest, Host/Guest Shared Memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,
  we have a need for Guest to Guest/Host to Guest 
shared memory with interrupt support on KVM-ARM. Currently
our target are RT telco apps where we have control/data 
plane that require fast inter-guest communication.
Other needs are delivering packets from host drivers
directly to Guest, with guest polling or interrupt.

At this point our approach is similar to ivshmem
in x86 except it's not PCI based and over time 
is expected to significantly diverge especially when
it comes to Real-time performance, dynamic shared
memory discovery, discovering associated VMs.

We extended the "vexpress-a15" machine with additional
device "VEshmem" device which registers 'mmio' and 
'memory' space mappings - POSIX shared anonymous memory
Also assign an unused interrupt. 

MMIO implements few registers for reading/writing
- interrupt control - signaling interrupts to other
  guests, disabling/enabling, interrupt status...
  
- Guest driver to discover - start of physical memory,
  size, interrupt id. 

Is extending the machine with another
device the right approach or should we create a
new machine variant?

For Guest a simple loadable module is implemented it probes
the VEshmem device registers, then registers a platform device,
and binds a UIO driver to MMIO and Memory Regions.
Applications can then either poll for
data or use signaling which is eventfd based, which
for our needs has too much overhead but it's a start.

Few issues are resource assignment.
VExpress memory range, what range to use?
We noticed 'mmio' fragments the physical address
space with a gap of over 800MB.
Is there any convention to select a range?
Likewise with interrupts?

Opinions/feedback welcomed.

- mario





_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux