OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [virtio-comment] [PATCH 1/3] shared memory: Define shared memory regions


* Cornelia Huck (cohuck@redhat.com) wrote:
> On Fri, 11 Jan 2019 11:41:58 +0000
> "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> wrote:
> 
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > 
> > Define the requirements and idea behind shared memory regions.
> > 
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > ---
> >  content.tex    |  3 +++
> >  shared-mem.tex | 25 +++++++++++++++++++++++++
> >  2 files changed, 28 insertions(+)
> >  create mode 100644 shared-mem.tex
> > 
> > diff --git a/content.tex b/content.tex
> > index b101d1b..321a2f4 100644
> > --- a/content.tex
> > +++ b/content.tex
> > @@ -331,6 +331,9 @@ Virtqueue format, or both.
> >  \input{split-ring.tex}
> >  
> >  \input{packed-ring.tex}
> > +
> > +\input{shared-mem.tex}
> > +
> >  \chapter{General Initialization And Device Operation}\label{sec:General Initialization And Device Operation}
> >  
> >  We start with an overview of device initialization, then expand on the
> > diff --git a/shared-mem.tex b/shared-mem.tex
> > new file mode 100644
> > index 0000000..6da249c
> > --- /dev/null
> > +++ b/shared-mem.tex
> > @@ -0,0 +1,25 @@
> > +\section{Shared Memory Regions}\label{sec:Basic Facilities of a Virtio Device / Shared Memory Regions}
> > +
> > +Shared memory regions are an additional facility
> > +available to devices that need a region of memory that's
> > +continuously shared between the host and the guest, rather
> > +than passed between them in the way virtqueue elements are.
> > +
> > +Example uses include shared caches and version pools for versioned
> > +data structures.
> > +
> > +Shared memory regions MUST NOT be used to control the operation
> > +of the device, nor to stream data; those should still be performed
> > +using virtqueues.
> > +
> > +A device may have multiple shared memory regions associated with
> > +it.  Each region has a \field{shmid} to identify it, the meaning
> > +of which is device specific.
> > +
> > +Enumeration and location of shared memory regions is performed
> > +using a transport-specific data structure.
> 
> "data structure and mechanism"?

Changed; thanks.

> > +
> > +The guest physical address and the host virtual address MUST NOT
> > +be used to identify structures within the memory regions; all
> > +addressing MUST be relative to the start of a particular region.
> > +
> 
> Is the intended implementation that the device provides a certain
> memory region (in host memory) and exposes it to the driver? Are there
> supposed to be any notifications of writes? Or do both simply write to
> the region and get whatever updates the other side has made when they
> read from the region again?

There's no notification;  in our case we have two main uses:
  a) Direct mapping of host files into the guests memory

  b) Mapping of a version table with quickly updated version numbers for
     data structures to do quick invalidation

> I'm a bit unsure how to implement this for the ccw transport. Maybe a
> new pair of ccws to read/write shared memory regions?

Without knowing anything about CCW itself, I don't think you'd want
to do calls to perform the reads/writes - remember these are entirely
emulated devices, and the shared memory regions just correspond to
memory regions in the hypervisor; so in most ways they just behave
like a region of RAM.  If the drivers can't treat them like RAM there's
probably no point in using this feature in that environment.

> But we'd also
> need a mechanism to discover the ids of those shared memory regions, I
> think.

Yes, I'm assuming you'll need a call to enumerate them.

Dave

> 
> Halil, do you have any thoughts?
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]