From: Pankaj Gupta <pagupta@redhat.com>
To: virtio-dev@lists.oasis-open.org
Cc: nilal@redhat.com, riel@surriel.com, stefanha@redhat.com,
aarcange@redhat.com, david@redhat.com, mst@redhat.com,
cohuck@redhat.com, lcapitulino@redhat.com
Subject: Re: [virtio-dev] [PATCH v3] add virtio-pmem device specification
Date: Wed, 21 Aug 2019 04:03:17 -0400 (EDT) [thread overview]
Message-ID: <1589398338.9627688.1566374597846.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <20190717070916.16196-1-pagupta@redhat.com>
Ping.
Cornelia, reviewed the spec except pmem specific changes.
Incorporated all the review suggestions.
Thanks,
Pankaj
>
> This patch proposes a virtio specification for new
> virtio pmem device. Virtio pmem is a paravirtualized
> device which solves two problems:
>
> - Provides emulation of persistent memory on host regular
> (non NVDIMM) storage.
> - Allows the guest to bypass the page cache.
>
> Signed-off-by: Pankaj Gupta <pagupta@redhat.com>
> ---
> This is changed version from previous v2 [1], as per suggestions by
> cornelia. Incorporated v2 changes suggested by Stefan, Michael &
> Cornerlia in RFC[2].
>
> [1] https://lists.oasis-open.org/archives/virtio-dev/201907/msg00007.html
> [2] https://lists.oasis-open.org/archives/virtio-dev/201903/msg00083.html
>
> conformance.tex | 22 ++++++++++--
> content.tex | 1 +
> virtio-pmem.tex | 109
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 130 insertions(+), 2 deletions(-)
> create mode 100644 virtio-pmem.tex
>
> diff --git a/conformance.tex b/conformance.tex
> index 42f702a..b383ef3 100644
> --- a/conformance.tex
> +++ b/conformance.tex
> @@ -15,14 +15,14 @@ \section{Conformance Targets}\label{sec:Conformance /
> Conformance Targets}
> \begin{itemize}
> \item Clause \ref{sec:Conformance / Driver Conformance}.
> \item One of clauses \ref{sec:Conformance / Driver Conformance / PCI
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / MMIO
> Driver Conformance} or \ref{sec:Conformance / Driver Conformance /
> Channel I/O Driver Conformance}.
> - \item One of clauses \ref{sec:Conformance / Driver Conformance / Network
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Block
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Console
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Entropy
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Traditional
> Memory Balloon Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / SCSI Host Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / Input Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / Crypto Driver Conformance} or \ref{sec:Conformance / Driver
> Conformance / Socket Driver Conformance}.
> + \item One of clauses \ref{sec:Conformance / Driver Conformance / Network
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Block
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Console
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Entropy
> Driver Conformance}, \ref{sec:Conformance / Driver Conformance / Traditional
> Memory Balloon Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / SCSI Host Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / Input Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / Crypto Driver Conformance}, \ref{sec:Conformance / Driver
> Conformance / Socket Driver Conformance} or \ref{sec:Conformance / Driver
> Conformance / PMEM Driver Conformance}.
> \item Clause \ref{sec:Conformance / Legacy Interface: Transitional
> Device and Transitional Driver Conformance}.
> \end{itemize}
> \item[Device] A device MUST conform to four conformance clauses:
> \begin{itemize}
> \item Clause \ref{sec:Conformance / Device Conformance}.
> \item One of clauses \ref{sec:Conformance / Device Conformance / PCI
> Device Conformance}, \ref{sec:Conformance / Device Conformance / MMIO
> Device Conformance} or \ref{sec:Conformance / Device Conformance /
> Channel I/O Device Conformance}.
> - \item One of clauses \ref{sec:Conformance / Device Conformance / Network
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Block
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Console
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Entropy
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Traditional
> Memory Balloon Device Conformance}, \ref{sec:Conformance / Device
> Conformance / SCSI Host Device Conformance}, \ref{sec:Conformance / Device
> Conformance / Input Device Conformance}, \ref{sec:Conformance / Device
> Conformance / Crypto Device Conformance} or \ref{sec:Conformance / Device
> Conformance / Socket Device Conformance}.
> + \item One of clauses \ref{sec:Conformance / Device Conformance / Network
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Block
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Console
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Entropy
> Device Conformance}, \ref{sec:Conformance / Device Conformance / Traditional
> Memory Balloon Device Conformance}, \ref{sec:Conformance / Device
> Conformance / SCSI Host Device Conformance}, \ref{sec:Conformance / Device
> Conformance / Input Device Conformance}, \ref{sec:Conformance / Device
> Conformance / Crypto Device Conformance}, \ref{sec:Conformance / Device
> Conformance / Socket Device Conformance} or \ref{sec:Conformance / Device
> Conformance / PMEM Device Conformance}.
> \item Clause \ref{sec:Conformance / Legacy Interface: Transitional
> Device and Transitional Driver Conformance}.
> \end{itemize}
> \end{description}
> @@ -183,6 +183,14 @@ \section{Conformance Targets}\label{sec:Conformance /
> Conformance Targets}
> \item \ref{drivernormative:Device Types / Socket Device / Device Operation /
> Device Events}
> \end{itemize}
>
> +\conformance{\subsection}{PMEM Driver Conformance}\label{sec:Conformance /
> Driver Conformance / PMEM Driver Conformance}
> +
> +A PMEM driver MUST conform to the following normative statements:
> +
> +\begin{itemize}
> +\item \ref{drivernormative:Device Types / PMEM Driver / Driver Operation /
> Virtqueue command}
> +\end{itemize}
> +
> \conformance{\section}{Device Conformance}\label{sec:Conformance / Device
> Conformance}
>
> A device MUST conform to the following normative statements:
> @@ -336,6 +344,16 @@ \section{Conformance Targets}\label{sec:Conformance /
> Conformance Targets}
> \item \ref{devicenormative:Device Types / Socket Device / Device Operation /
> Receive and Transmit}
> \end{itemize}
>
> +\conformance{\subsection}{PMEM Device Conformance}\label{sec:Conformance /
> Device Conformance / PMEM Device Conformance}
> +
> +A PMEM device MUST conform to the following normative statements:
> +
> +\begin{itemize}
> +\item \ref{devicenormative:Device Types / PMEM Device / Device
> Initialization}
> +\item \ref{devicenormative:Device Types / PMEM Device / Device Operation /
> Virtqueue flush}
> +\item \ref{devicenormative:Device Types / PMEM Device / Device Operation /
> Virtqueue return}
> +\end{itemize}
> +
> \conformance{\section}{Legacy Interface: Transitional Device and
> Transitional Driver Conformance}\label{sec:Conformance / Legacy Interface:
> Transitional Device and Transitional Driver Conformance}
> A conformant implementation MUST be either transitional or
> non-transitional, see \ref{intro:Legacy
> diff --git a/content.tex b/content.tex
> index 8f0498e..28e747c 100644
> --- a/content.tex
> +++ b/content.tex
> @@ -5598,6 +5598,7 @@ \subsubsection{Legacy Interface: Framing
> Requirements}\label{sec:Device
> \input{virtio-input.tex}
> \input{virtio-crypto.tex}
> \input{virtio-vsock.tex}
> +\input{virtio-pmem.tex}
>
> \chapter{Reserved Feature Bits}\label{sec:Reserved Feature Bits}
>
> diff --git a/virtio-pmem.tex b/virtio-pmem.tex
> new file mode 100644
> index 0000000..b824ffe
> --- /dev/null
> +++ b/virtio-pmem.tex
> @@ -0,0 +1,109 @@
> +\section{PMEM Device}\label{sec:Device Types / PMEM Device}
> +
> +virtio pmem is an emulated persistent memory device using virtio.
> +
> +The device works as fake nvdimm device when emulated on a host regular
> +(non NVDIMM) device. The device provides a virtio based asynchronous
> +flush mechanism to persist the guest writes. This avoids the
> +need of separate caching inside the guest and host side caching
> +is used. Under memory pressure, the host makes efficient memory
> +reclaim decisions on uniform view of memory.
> +
> +\subsection{Device ID}\label{sec:Device Types / PMEM Device / Device ID}
> + 27
> +
> +\subsection{Virtqueues}\label{sec:Device Types / PMEM Device / Virtqueues}
> +\begin{description}
> +\item[0] req_vq
> +\end{description}
> +
> +\subsection{Feature bits}\label{sec:Device Types / PMEM Device / Feature
> bits}
> +
> +There are currently no feature bits defined for this device.
> +
> +\subsection{Device configuration layout}\label{sec:Device Types / PMEM
> Device / Device configuration layout}
> +
> +\begin{lstlisting}
> +struct virtio_pmem_config {
> + uint64_t start;
> + uint64_t size;
> +};
> +\end{lstlisting}
> +
> +\field{start} contains the physical address of the start of the persistent
> memory range.
> +\field{size} contains the length of address range in bytes.
> +
> +\subsection{Device Initialization}\label{sec:Device Types / PMEM Device /
> Device Initialization}
> +
> +The device hot-plugs physical memory to guest address space. The persistent
> memory device
> +is emulated at host side.
> +
> +\begin{enumerate}
> + \item The driver reads the physical start address from \field{start}.
> + \item The driver reads the length of the persistent memory range from
> \field{size}.
> + \end{enumerate}
> +
> +\devicenormative{\subsubsection}{Device Initialization}{Device Types / PMEM
> Device / Device Initialization}
> +
> +The host memory region MUST be mapped to guest address space in a
> +way so that updates are visible to other processes mapping the
> +same memory region.
> +
> +\subsection{Driver Initialization}\label{sec:Device Types / PMEM Driver /
> Driver Initialization}
> +
> +Memory stores to the persistent memory range are not guaranteed to be
> +persistent without further action. An explicit flush command is
> +required to ensure persistence. The req_vq is used to perform flush
> +commands.
> +
> +\subsection{Driver Operations}\label{sec:Device Types / PMEM Driver / Driver
> Operation}
> +
> +The VIRTIO_PMEM_REQ_TYPE_FLUSH command persists all memory writes that were
> performed
> +before the command was submitted. Once the command completes those writes
> are guaranteed
> +to be persistent.
> +
> +\drivernormative{\subsubsection}{Driver Operation: Virtqueue command}{Device
> Types / PMEM Driver / Driver Operation / Virtqueue command}
> +
> +The driver MUST submit a VIRTIO_PMEM_REQ_TYPE_FLUSH command after performing
> memory writes
> +that require persistence.
> +
> +The driver MUST wait for the VIRTIO_PMEM_REQ_TYPE_FLUSH command to complete
> before
> +assuming previous writes are persistent.
> +
> +\subsection{Device Operations}\label{sec:Device Types / PMEM Driver / Device
> Operation}
> +
> +\devicenormative{\subsubsection}{Device Operations: Virtqueue flush}{Device
> Types / PMEM Device / Device Operation / Virtqueue flush}
> +
> +The device SHOULD handle multiple flush requests simultaneously using
> +corresponding host flush mechanisms.
> +
> +\devicenormative{\subsubsection}{Device operations: Virtqueue return}{Device
> Types / PMEM Device / Device Operation / Virtqueue return}
> +
> +The device MUST return integer '0' for success and '!0' for failure.
> +
> +\subsection{Possible security implications}\label{sec:Device Types / PMEM
> Device / Possible Security Implications}
> +
> +Two devices actually sharing the same memory creates a potential information
> +leak; as access patterns of one driver could be observable by another
> driver.
> +
> +This can happen for example if two devices are implemented in software
> +by a hypervisor, and two drivers are parts of VMs running on the
> +hypervisor. In this case, the timing of access to device memory
> +might leak information about access patterns from one VM to another.
> +
> +This can include, but might not be limited to:
> +\begin{enumerate}
> +\item Configurations sharing a single region of device memory (even in a
> read-only configuration)
> +\item Configurations with a shared cache between devices (e.g. Linux page
> cache)
> +\item Configurations with memory deduplication techniques such as KSM;
> similar side-channels
> + might be present if the device memory is shared with another system, e.g.
> information about
> + the hypervisor/host page cache might leak into a VM guest.
> +\end{enumerate}
> +
> +\subsection{Countermeasures}\label{sec:Device Types / PMEM Device / Possible
> Security Implications / Countermeasures}
> +Solution is to avoid sharing resources between devices.
> +\begin{enumerate}
> +\item Each VM must have its own device memory, not shared with any other VM
> or process.
> +\item If the VM workload is a special application and there is no risk, it
> is okay to share the device memory.
> +\item Don't allow host cache eviction from VM when device memory is shared
> with other VM or host process.
> +\end{enumerate}
> --
> 2.14.5
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org
prev parent reply other threads:[~2019-08-21 8:03 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-17 7:09 [virtio-dev] [PATCH v3] add virtio-pmem device specification Pankaj Gupta
2019-07-19 10:23 ` [virtio-dev] " Cornelia Huck
2019-07-19 10:25 ` Pankaj Gupta
2019-08-21 8:03 ` Pankaj Gupta [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1589398338.9627688.1566374597846.JavaMail.zimbra@redhat.com \
--to=pagupta@redhat.com \
--cc=aarcange@redhat.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mst@redhat.com \
--cc=nilal@redhat.com \
--cc=riel@surriel.com \
--cc=stefanha@redhat.com \
--cc=virtio-dev@lists.oasis-open.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.