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/2] virtio-balloon: add an event queue


On Wed, Aug 10, 2022 at 04:54:01PM +0900, David Stevens wrote:
> On Wed, Aug 10, 2022 at 5:52 AM Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > On Mon, Jan 24, 2022 at 09:56:24PM +0900, David Stevens wrote:
> > > Add an event queue to the balloon to allow the driver to send events to
> > > the device, which allows the device to be more responsive to the memory
> > > needs of the guest.
> > >
> > > There are two defined events. The first event is an out of memory event.
> > > This event provides a way for the guest to handle out of memory events
> > > on a system where the host does not support deflate-on-oom. The second
> > > event is an out of puff event, which the guest can send when it fails to
> > > allocate memory while trying to inflate the balloon. This serves as an
> > > indication to the device that the driver may not be able to inflate the
> > > balloon in a timely manner.

Thanks for the answers! Pls include them in the spec too.

> > >
> > > Signed-off-by: David Stevens <stevensd@chromium.org>
> > > ---
> > >  conformance.tex |  2 ++
> > >  content.tex     | 59 +++++++++++++++++++++++++++++++++++++++++++++++++
> > >  2 files changed, 61 insertions(+)
> > >
> > > diff --git a/conformance.tex b/conformance.tex
> > > index 42f853762ebe..5e0baa5ae7df 100644
> > > --- a/conformance.tex
> > > +++ b/conformance.tex
> > > @@ -181,6 +181,7 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets}
> > >  \item \ref{drivernormative:Device Types / Memory Balloon Device / Device Operation / Free Page Hinting}
> > >  \item \ref{drivernormative:Device Types / Memory Balloon Device / Device Operation / Page Poison}
> > >  \item \ref{drivernormative:Device Types / Memory Balloon Device / Device Operation / Free Page Reporting}
> > > +\item \ref{drivernormative:Device Types / Memory Balloon Device / Device Operation / Events}
> > >  \end{itemize}
> > >
> > >  \conformance{\subsection}{SCSI Host Driver Conformance}\label{sec:Conformance / Driver Conformance / SCSI Host Driver Conformance}
> > > @@ -440,6 +441,7 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets}
> > >  \item \ref{devicenormative:Device Types / Memory Balloon Device / Device Operation / Free Page Hinting}
> > >  \item \ref{devicenormative:Device Types / Memory Balloon Device / Device Operation / Page Poison}
> > >  \item \ref{devicenormative:Device Types / Memory Balloon Device / Device Operation / Free Page Reporting}
> > > +\item \ref{devicenormative:Device Types / Memory Balloon Device / Device Operation / Events}
> > >  \end{itemize}
> > >
> > >  \conformance{\subsection}{SCSI Host Device Conformance}\label{sec:Conformance / Device Conformance / SCSI Host Device Conformance}
> > > diff --git a/content.tex b/content.tex
> > > index 32de6685c50b..3aeb319d31a7 100644
> > > --- a/content.tex
> > > +++ b/content.tex
> > > @@ -5420,6 +5420,7 @@ \subsection{Virtqueues}\label{sec:Device Types / Memory Balloon Device / Virtque
> > >  \item[2] statsq
> > >  \item[3] free_page_vq
> > >  \item[4] reporting_vq
> > > +\item[5] event_vq
> > >  \end{description}
> > >
> > >    statsq only exists if VIRTIO_BALLOON_F_STATS_VQ is set.
> > > @@ -5428,6 +5429,8 @@ \subsection{Virtqueues}\label{sec:Device Types / Memory Balloon Device / Virtque
> > >
> > >    reporting_vq only exists if VIRTIO_BALLOON_F_PAGE_REPORTING is set.
> > >
> > > +  event_vq only exists if VIRTIO_BALLOON_F_EVENT_VQ is set.
> > > +
> > >  \subsection{Feature bits}\label{sec:Device Types / Memory Balloon Device / Feature bits}
> > >  \begin{description}
> > >  \item[VIRTIO_BALLOON_F_MUST_TELL_HOST (0)] Host has to be told before
> > > @@ -5446,6 +5449,8 @@ \subsection{Feature bits}\label{sec:Device Types / Memory Balloon Device / Featu
> > >      Configuration field \field{poison_val} is valid.
> > >  \item[ VIRTIO_BALLOON_F_PAGE_REPORTING(5) ] The device has support for free
> > >      page reporting. A virtqueue for reporting free guest memory is present.
> > > +\item[ VIRTIO_BALLOON_F_EVENT_VQ(6) ] A virtqueue for sending events from
> > > +    the driver to the device.
> > >
> > >  \end{description}
> > >
> > > @@ -5529,6 +5534,8 @@ \subsection{Device Initialization}\label{sec:Device Types / Memory Balloon Devic
> > >    notify the device about the stats virtqueue buffer.
> > >  \item If the VIRTIO_BALLOON_F_PAGE_REPORTING feature bit is negotiated, then
> > >    begin reporting free pages to the device.
> > > +\item If the VIRTIO_BALLOON_F_EVENT_VQ feature bit is negotiated, then
> > > +  begin reporting events to the device.
> > >  \end{enumerate}
> > >
> > >  \subsection{Device Operation}\label{sec:Device Types / Memory Balloon Device / Device Operation}
> > > @@ -6031,6 +6038,58 @@ \subsubsection{Free Page Reporting}\label{sec:Device Types / Memory Balloon Devi
> > >  MUST NOT modify the the content of a reported page to a value other than
> > >  \field{poison_val}.
> > >
> > > +\subsubsection{Events}\label{sec:Device Types / Memory Balloon Device / Device Operation / Events}
> > > +
> > > +The events virtqueue allows the driver to signal events to the
> > > +device.
> >
> > and the following is the format used for buffers added
> > to this vq? write or read buffers?
> 
> It's the format for messages sent to the virtqueue. Written by the
> driver, read-only from the device.
> 
> >
> > > +
> > > +\begin{lstlisting}
> > > +struct virtio_balloon_event {
> > > +        u32 type;
> > > +        u32 data;
> > > +};
> > > +
> > > +#define VIRTIO_BALLOON_EVENT_OOM        1
> > > +#define VIRTIO_BALLOON_EVENT_OOPUFF     2
> > > +\end{lstlisting}
> > > +
> > > +The \field{type} determines how to interpret the event. The following
> > > +events are defined:
> > > +
> > > +\begin{itemize}
> > > +\item Out of memory
> > > +\begin{lstlisting}
> > > +#define VIRTIO_BALLOON_EVENT_OOM        1
> > > +\end{lstlisting}
> > > +The driver has encountered a situation in which using pages from the balloon
> > > +is necessary for system stability (e.g. if memory is required by applications
> > > +running within the guest). The \field{data} value indicates how many pages
> > > +the driver requires to maintain system stability.
> >
> > I'd prefer that we report info in bytes or another portable metric
> > please. Down the road we should switch balloon away from
> > using pages, too. This might mean we need to make data and type u64.
> >
> > > +\item Out of puff
> > > +\begin{lstlisting}
> > > +#define VIRTIO_BALLOON_EVENT_OOPUFF     2
> > > +\end{lstlisting}
> > > +The driver has encountered an allocation failure when trying to inflate
> > > +the balloon. The \field{data} value is unused. This event serves as a signal
> > > +that the balloon may not be able to inflate in a timely manner.
> > > +\end{itemize}
> > > +
> > > +\drivernormative{\paragraph}{Events}{Device Types / Memory Balloon Device / Device Operation / Events}
> > > +
> > > +The driver MUST update \field{actual} with any allocated pages before
> > > +sending a VIRTIO_BALLOON_EVENT_OOPUFF event.
> > > +
> > > +The driver SHOULD wait for the device to acknowledge the event
> > > +before trying to further inflate or deflate the balloon.
> >
> > Hmm what is the motivation for this?
> 
> Having the driver wait gives the device the option to respond to the
> event synchronously. For example, since a puff failure when inflating
> signals high memory pressure in the guest, the device might want to
> reduce num_pages to stop further attempts to inflate the balloon.
> And
> if the device wants to respond asynchronously, it can always do that
> after acking the event.

Question: how does device know by how much to reduce the num_pages?
Should the current balloon size be sent with this event?


> >
> > > +
> > > +If VIRTIO_BALLOON_F_DEFLATE_ON_OOM has been negotiated, the driver
> > > +SHOULD send an OOM event before using pages from the balloon.
> >
> > what does using mean here? You mean without MUST_TELL_HOST?
> >
> 
> With DEFLATE_ON_OOM, "the driver MAY use pages from the balloon when
> num_pages is less than or equal to the actual number of pages in the
> balloon if this is required for system stability". When the event
> queue is enabled, the driver should send a VIRTIO_BALLOON_EVENT_OOM
> before doing that and using pages in the balloon.

> That said, I've been
> convinced that deflate-on-oom is questionable at best, so I think it's
> better to replace the OOM event with a more generic memory pressure
> event.




> > > +
> > > +\devicenormative{\paragraph}{Events}{Device Types / Memory Balloon Device / Device Operation / Events}
> > > +
> > > +When the device receives a VIRTIO_BALLOON_EVENT_OOM event, it SHOULD deflate
> > > +the balloon by \field{data} pages before acknowledging the event.
> >
> > ... by modifying the config space field I guess?
> >
> 
> Yes, by reducing num_pages.
> 
> > > +
> > >  \section{SCSI Host Device}\label{sec:Device Types / SCSI Host Device}
> > >
> > >  The virtio SCSI host device groups together one or more virtual
> > > --
> > > 2.35.0.rc0.227.g00780c9af4-goog
> > >
> > >
> > > This publicly archived list offers a means to provide input to the
> > > OASIS Virtual I/O Device (VIRTIO) TC.
> > >
> > > In order to verify user consent to the Feedback License terms and
> > > to minimize spam in the list archive, subscription is required
> > > before posting.
> > >
> > > Subscribe: virtio-comment-subscribe@lists.oasis-open.org
> > > Unsubscribe: virtio-comment-unsubscribe@lists.oasis-open.org
> > > List help: virtio-comment-help@lists.oasis-open.org
> > > List archive: https://lists.oasis-open.org/archives/virtio-comment/
> > > Feedback License: https://www.oasis-open.org/who/ipr/feedback_license.pdf
> > > List Guidelines: https://www.oasis-open.org/policies-guidelines/mailing-lists
> > > Committee: https://www.oasis-open.org/committees/virtio/
> > > Join OASIS: https://www.oasis-open.org/join/
> >



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