From: Haozhong Zhang <haozhong.zhang@intel.com>
To: xen-devel@lists.xen.org
Cc: Haozhong Zhang <haozhong.zhang@intel.com>,
Kevin Tian <kevin.tian@intel.com>, Keir Fraser <keir@xen.org>,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Jun Nakajima <jun.nakajima@intel.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Jan Beulich <jbeulich@suse.com>, Wei Liu <wei.liu2@citrix.com>
Subject: [PATCH 0/4] add support for vNVDIMM
Date: Tue, 29 Dec 2015 19:31:47 +0800 [thread overview]
Message-ID: <1451388711-18646-1-git-send-email-haozhong.zhang@intel.com> (raw)
This patch series is the Xen part patch to provide virtual NVDIMM to
guest. The corresponding QEMU patch series is sent separately with the
title "[PATCH 0/2] add vNVDIMM support for Xen".
* Background
NVDIMM (Non-Volatile Dual In-line Memory Module) is going to be
supported on Intel's platform. NVDIMM devices are discovered via ACPI
and configured by _DSM method of NVDIMM device in ACPI. Some
documents can be found at
[1] ACPI 6: http://www.uefi.org/sites/default/files/resources/ACPI_6.0.pdf
[2] NVDIMM Namespace: http://pmem.io/documents/NVDIMM_Namespace_Spec.pdf
[3] DSM Interface Example: http://pmem.io/documents/NVDIMM_DSM_Interface_Example.pdf
[4] Driver Writer's Guide: http://pmem.io/documents/NVDIMM_Driver_Writers_Guide.pdf
The upstream QEMU (commits 5c42eef ~ 70d1fb9) has added support to
provide virtual NVDIMM in PMEM mode, in which NVDIMM devices are
mapped into CPU's address space and are accessed via normal memory
read/write and three special instructions (clflushopt/clwb/pcommit).
This patch series and the corresponding QEMU patch series enable Xen
to provide vNVDIMM devices to HVM domains.
* Design
Supporting vNVDIMM in PMEM mode has three requirements.
(1) Support special instructions to operate on cache lines
(clflushopt & clwb) and persistent memory (pcommit).
clflushopt and clwb take linear address as parameters and we
allow them to be executed directly (w/o emulation) in HVM
domains. This is done by Xen patch 1.
pcommit is also allowed to be executed directly by L1 guest, and
we let L1 hypervisor handle pcommit in L2 guest. This is done by
Xen patch 2.
(2) When NVDIMM works in PMEM mode, it must be mapped in CPU's
address space.
When a HVM domain is created, if it does not use the guest
address space above 4 GB, vNVDIMM will be mapped to the guest
address space from 4 GB. If the maximum used guest address above
4 GB is X, vNVDIMM will be mapped to the guest address space
above X. This is done by QEMU patch 1.
(3) NVDIMM is discovered and configured through ACPI. A primary and
complicated part of vNVDIMM implementation in upstream QEMU is to
build those ACPI tables. To avoid reimplementing similar code in
hvmloader again, we decide to reuse those ACPI tables from QEMU.
We patch QEMU to build NFIT and other ACPI tables of vNVDIMM when
it's used as Xen's device model, and then copy them to the end of
guest memory below 4 GB. The guest address and size of those ACPI
tables are saved to xenstore so that hvmloader can find those
tables. This is done by QEMU patch 2.
We also patch hvmloader to loader above extra ACPI tables. We
reuse and extend the existing mechanism in hvmloader that loads
passthrough ACPI tables for this purpose. This is done by Xen
patch 4.
In addition, Xen patch 3 adds a xl configuration 'nvdimm' and passes
parsed parameters to QEMU to create vNVDIMM devices.
* Test
(1) A patched upstream qemu is used for test. QEMU patch series is
sent separately with title "[PATCH 0/2] add vNVDIMM support for
Xen". (vNVDIMM support has not been in qemu-xen commit f165e58,
so we choose upstream qemu instead)
(2) Prepare a memory backend file:
dd if=/dev/zero of=/tmp/nvm0 bs=1G count=10
(3) Add the following line to a HVM domain's configuration xl.cfg:
nvdimm = [ 'file=/tmp/nvm0,size=10240' ]
(4) Launch a HVM domain from above xl.cfg.
(5) If guest Linux kernel is 4.2 or newer and kernel modules
libnvdimm, nfit, nd_btt and nd_pmem are loaded, then you will see
the whole nvdimm device used as a single namespace and /dev/pmem0
will appear.
Haozhong Zhang (4):
x86/hvm: allow guest to use clflushopt and clwb
x86/hvm: add support for pcommit instruction
tools/xl: add a new xl configuration 'nvdimm'
hvmloader: add support to load extra ACPI tables from qemu
docs/man/xl.cfg.pod.5 | 19 ++++++++++++++
tools/firmware/hvmloader/acpi/build.c | 34 ++++++++++++++++++++-----
tools/libxc/xc_cpufeature.h | 4 ++-
tools/libxc/xc_cpuid_x86.c | 5 +++-
tools/libxl/libxl_dm.c | 15 +++++++++--
tools/libxl/libxl_types.idl | 9 +++++++
tools/libxl/xl_cmdimpl.c | 45 +++++++++++++++++++++++++++++++++
xen/arch/x86/hvm/hvm.c | 10 ++++++++
xen/arch/x86/hvm/vmx/vmcs.c | 6 ++++-
xen/arch/x86/hvm/vmx/vmx.c | 1 +
xen/arch/x86/hvm/vmx/vvmx.c | 3 +++
xen/include/asm-x86/cpufeature.h | 7 +++++
xen/include/asm-x86/hvm/vmx/vmcs.h | 3 +++
xen/include/asm-x86/hvm/vmx/vmx.h | 1 +
xen/include/public/hvm/hvm_xs_strings.h | 3 +++
15 files changed, 154 insertions(+), 11 deletions(-)
--
2.4.8
next reply other threads:[~2015-12-29 11:31 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-29 11:31 Haozhong Zhang [this message]
2015-12-29 11:31 ` [PATCH 1/4] x86/hvm: allow guest to use clflushopt and clwb Haozhong Zhang
2015-12-29 15:46 ` Andrew Cooper
2015-12-30 1:35 ` Haozhong Zhang
2015-12-30 2:16 ` Haozhong Zhang
2015-12-30 10:33 ` Andrew Cooper
2015-12-29 11:31 ` [PATCH 2/4] x86/hvm: add support for pcommit instruction Haozhong Zhang
2015-12-29 11:31 ` [PATCH 3/4] tools/xl: add a new xl configuration 'nvdimm' Haozhong Zhang
2016-01-04 11:16 ` Wei Liu
2016-01-06 12:40 ` Jan Beulich
2016-01-06 15:28 ` Haozhong Zhang
2015-12-29 11:31 ` [PATCH 4/4] hvmloader: add support to load extra ACPI tables from qemu Haozhong Zhang
2016-01-15 17:10 ` Jan Beulich
2016-01-18 0:52 ` Haozhong Zhang
2016-01-18 8:46 ` Jan Beulich
2016-01-19 11:37 ` Wei Liu
2016-01-19 11:46 ` Jan Beulich
2016-01-20 5:14 ` Tian, Kevin
2016-01-20 5:58 ` Zhang, Haozhong
2016-01-20 5:31 ` Haozhong Zhang
2016-01-20 8:46 ` Jan Beulich
2016-01-20 8:58 ` Andrew Cooper
2016-01-20 10:15 ` Haozhong Zhang
2016-01-20 10:36 ` Xiao Guangrong
2016-01-20 13:16 ` Andrew Cooper
2016-01-20 14:29 ` Stefano Stabellini
2016-01-20 14:42 ` Haozhong Zhang
2016-01-20 14:45 ` Andrew Cooper
2016-01-20 14:53 ` Haozhong Zhang
2016-01-20 15:13 ` Konrad Rzeszutek Wilk
2016-01-20 15:29 ` Haozhong Zhang
2016-01-20 15:41 ` Konrad Rzeszutek Wilk
2016-01-20 15:54 ` Haozhong Zhang
2016-01-21 3:35 ` Bob Liu
2016-01-20 15:05 ` Stefano Stabellini
2016-01-20 18:14 ` Andrew Cooper
2016-01-20 14:38 ` Haozhong Zhang
2016-01-20 11:04 ` Haozhong Zhang
2016-01-20 11:20 ` Jan Beulich
2016-01-20 15:29 ` Xiao Guangrong
2016-01-20 15:47 ` Konrad Rzeszutek Wilk
2016-01-20 16:25 ` Xiao Guangrong
2016-01-20 16:47 ` Konrad Rzeszutek Wilk
2016-01-20 16:55 ` Xiao Guangrong
2016-01-20 17:18 ` Konrad Rzeszutek Wilk
2016-01-20 17:23 ` Xiao Guangrong
2016-01-20 17:48 ` Konrad Rzeszutek Wilk
2016-01-21 3:12 ` Haozhong Zhang
2016-01-20 17:07 ` Jan Beulich
2016-01-20 17:17 ` Xiao Guangrong
2016-01-21 8:18 ` Jan Beulich
2016-01-21 8:25 ` Xiao Guangrong
2016-01-21 8:53 ` Jan Beulich
2016-01-21 9:10 ` Xiao Guangrong
2016-01-21 9:29 ` Andrew Cooper
2016-01-21 10:26 ` Jan Beulich
2016-01-21 10:25 ` Jan Beulich
2016-01-21 14:01 ` Haozhong Zhang
2016-01-21 14:52 ` Jan Beulich
2016-01-22 2:43 ` Haozhong Zhang
2016-01-26 11:44 ` George Dunlap
2016-01-26 12:44 ` Jan Beulich
2016-01-26 12:54 ` Juergen Gross
2016-01-26 14:44 ` Konrad Rzeszutek Wilk
2016-01-26 15:37 ` Jan Beulich
2016-01-26 15:57 ` Haozhong Zhang
2016-01-26 16:34 ` Jan Beulich
2016-01-26 19:32 ` Konrad Rzeszutek Wilk
2016-01-27 7:22 ` Haozhong Zhang
2016-01-27 10:16 ` Jan Beulich
2016-01-27 14:50 ` Konrad Rzeszutek Wilk
2016-01-27 10:55 ` George Dunlap
2016-01-26 13:58 ` George Dunlap
2016-01-26 14:46 ` Konrad Rzeszutek Wilk
2016-01-26 15:30 ` Haozhong Zhang
2016-01-26 15:33 ` Haozhong Zhang
2016-01-26 15:57 ` Jan Beulich
2016-01-27 2:23 ` Haozhong Zhang
2016-01-20 15:07 ` Konrad Rzeszutek Wilk
2016-01-06 15:37 ` [PATCH 0/4] add support for vNVDIMM Ian Campbell
2016-01-06 15:47 ` Haozhong Zhang
2016-01-20 3:28 ` Tian, Kevin
2016-01-20 12:43 ` Stefano Stabellini
2016-01-20 14:26 ` Zhang, Haozhong
2016-01-20 14:35 ` Stefano Stabellini
2016-01-20 14:47 ` Zhang, Haozhong
2016-01-20 14:54 ` Andrew Cooper
2016-01-20 15:59 ` Haozhong Zhang
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=1451388711-18646-1-git-send-email-haozhong.zhang@intel.com \
--to=haozhong.zhang@intel.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).