From nobody Fri Nov 7 11:16:29 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.intel.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548212651308718.3074919005627; Tue, 22 Jan 2019 19:04:11 -0800 (PST) Received: from localhost ([127.0.0.1]:54140 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8pm-0004cH-DK for importer@patchew.org; Tue, 22 Jan 2019 22:04:10 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46390) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8lc-00023t-5Q for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gm8lX-0000Bk-82 for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:52 -0500 Received: from mga04.intel.com ([192.55.52.120]:51915) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gm8l3-0007y8-D6 for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:47 -0500 Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jan 2019 18:59:16 -0800 Received: from dazhang1-ssd.sh.intel.com (HELO localhost) ([10.239.48.91]) by fmsmga005.fm.intel.com with ESMTP; 22 Jan 2019 18:59:13 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,509,1539673200"; d="scan'208";a="313984456" From: "Zhang, Yi" To: xiaoguangrong.eric@gmail.com, stefanha@redhat.com, pbonzini@redhat.com, pagupta@redhat.com, yu.c.zhang@linux.intel.com, richardw.yang@linux.intel.com, mst@redhat.com, ehabkost@redhat.com Date: Wed, 23 Jan 2019 10:59:37 +0800 Message-Id: X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.120 Subject: [Qemu-devel] [PATCH V10 1/4] util/mmap-alloc: switch 'shared' to 'flags' parameter X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: imammedo@redhat.com, dan.j.williams@intel.com, qemu-devel@nongnu.org, Zhang Yi Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Zhang Yi As more flag parameters besides the existing 'shared' are going to be added to qemu_ram_mmap() and qemu_ram_alloc_from_{file,fd}(), let's switch 'shared' to a 'flags' parameter in advance, so as to ease the further additions. Signed-off-by: Haozhong Zhang Signed-off-by: Zhang Yi --- exec.c | 7 ++++--- include/qemu/mmap-alloc.h | 19 ++++++++++++++++++- util/mmap-alloc.c | 8 +++++--- util/oslib-posix.c | 9 ++++++++- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/exec.c b/exec.c index bb6170d..e92a7da 100644 --- a/exec.c +++ b/exec.c @@ -1810,6 +1810,7 @@ static void *file_ram_alloc(RAMBlock *block, ram_addr_t memory, int fd, bool truncate, + uint32_t flags, Error **errp) { void *area; @@ -1859,8 +1860,7 @@ static void *file_ram_alloc(RAMBlock *block, perror("ftruncate"); } =20 - area =3D qemu_ram_mmap(fd, memory, block->mr->align, - block->flags & RAM_SHARED); + area =3D qemu_ram_mmap(fd, memory, block->mr->align, flags); if (area =3D=3D MAP_FAILED) { error_setg_errno(errp, errno, "unable to map backing store for guest RAM"); @@ -2279,7 +2279,8 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, Mem= oryRegion *mr, new_block->used_length =3D size; new_block->max_length =3D size; new_block->flags =3D ram_flags; - new_block->host =3D file_ram_alloc(new_block, size, fd, !file_size, er= rp); + new_block->host =3D file_ram_alloc(new_block, size, fd, !file_size, + ram_flags, errp); if (!new_block->host) { g_free(new_block); return NULL; diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h index 50385e3..6fe6ed4 100644 --- a/include/qemu/mmap-alloc.h +++ b/include/qemu/mmap-alloc.h @@ -7,7 +7,24 @@ size_t qemu_fd_getpagesize(int fd); =20 size_t qemu_mempath_getpagesize(const char *mem_path); =20 -void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared); +/** + * qemu_ram_mmap: mmap the specified file or device. + * + * Parameters: + * @fd: the file or the device to mmap + * @size: the number of bytes to be mmaped + * @align: if not zero, specify the alignment of the starting mapping add= ress; + * otherwise, the alignment in use will be determined by QEMU. + * @flags: specifies additional properties of the mapping, which can be o= ne or + * bit-or of following values + * - RAM_SHARED: mmap with MAP_SHARED flag + * Other bits are ignored. + * + * Return: + * On success, return a pointer to the mapped area. + * On failure, return MAP_FAILED. + */ +void *qemu_ram_mmap(int fd, size_t size, size_t align, uint32_t flags); =20 void qemu_ram_munmap(void *ptr, size_t size); =20 diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c index fd329ec..8f0a740 100644 --- a/util/mmap-alloc.c +++ b/util/mmap-alloc.c @@ -13,6 +13,7 @@ #include "qemu/osdep.h" #include "qemu/mmap-alloc.h" #include "qemu/host-utils.h" +#include "exec/memory.h" =20 #define HUGETLBFS_MAGIC 0x958458f6 =20 @@ -75,7 +76,7 @@ size_t qemu_mempath_getpagesize(const char *mem_path) return getpagesize(); } =20 -void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) +void *qemu_ram_mmap(int fd, size_t size, size_t align, uint32_t flags) { /* * Note: this always allocates at least one extra page of virtual addr= ess @@ -92,11 +93,12 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, = bool shared) * anonymous memory is OK. */ int anonfd =3D fd =3D=3D -1 || qemu_fd_getpagesize(fd) =3D=3D getpages= ize() ? -1 : fd; - int flags =3D anonfd =3D=3D -1 ? MAP_ANONYMOUS : MAP_NORESERVE; - void *ptr =3D mmap(0, total, PROT_NONE, flags | MAP_PRIVATE, anonfd, 0= ); + int mmap_flags =3D anonfd =3D=3D -1 ? MAP_ANONYMOUS : MAP_NORESERVE; + void *ptr =3D mmap(0, total, PROT_NONE, mmap_flags | MAP_PRIVATE, anon= fd, 0); #else void *ptr =3D mmap(0, total, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -= 1, 0); #endif + bool shared =3D flags & RAM_SHARED; size_t offset; void *ptr1; =20 diff --git a/util/oslib-posix.c b/util/oslib-posix.c index fbd0dc8..75a0171 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -54,6 +54,7 @@ #endif =20 #include "qemu/mmap-alloc.h" +#include "exec/memory.h" =20 #ifdef CONFIG_DEBUG_STACK_USAGE #include "qemu/error-report.h" @@ -203,7 +204,13 @@ void *qemu_memalign(size_t alignment, size_t size) void *qemu_anon_ram_alloc(size_t size, uint64_t *alignment, bool shared) { size_t align =3D QEMU_VMALLOC_ALIGN; - void *ptr =3D qemu_ram_mmap(-1, size, align, shared); + uint32_t flags =3D 0; + void *ptr; + + if (shared) { + flags =3D RAM_SHARED; + } + ptr =3D qemu_ram_mmap(-1, size, align, flags); =20 if (ptr =3D=3D MAP_FAILED) { return NULL; --=20 2.7.4 From nobody Fri Nov 7 11:16:29 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.intel.com Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548212532981723.4007204966318; Tue, 22 Jan 2019 19:02:12 -0800 (PST) Received: from localhost ([127.0.0.1]:54122 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8nf-00037S-T7 for importer@patchew.org; Tue, 22 Jan 2019 22:01:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46379) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8lb-00023s-Tu for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gm8lX-0000CL-AE for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:51 -0500 Received: from mga03.intel.com ([134.134.136.65]:5264) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gm8lC-00086U-3y for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:47 -0500 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jan 2019 18:59:23 -0800 Received: from dazhang1-ssd.sh.intel.com (HELO localhost) ([10.239.48.91]) by orsmga001.jf.intel.com with ESMTP; 22 Jan 2019 18:59:21 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,509,1539673200"; d="scan'208";a="129937597" From: "Zhang, Yi" To: xiaoguangrong.eric@gmail.com, stefanha@redhat.com, pbonzini@redhat.com, pagupta@redhat.com, yu.c.zhang@linux.intel.com, richardw.yang@linux.intel.com, mst@redhat.com, ehabkost@redhat.com Date: Wed, 23 Jan 2019 10:59:45 +0800 Message-Id: <286542bc2f48b0dd6a657f363a8e933806cac92d.1548136274.git.yi.z.zhang@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [PATCH V10 2/4] util/mmap-alloc: support MAP_SYNC in qemu_ram_mmap() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: imammedo@redhat.com, dan.j.williams@intel.com, qemu-devel@nongnu.org, Zhang Yi Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Zhang Yi When a file supporting DAX is used as vNVDIMM backend, mmap it with MAP_SYNC flag in addition which can ensure file system metadata synced in each guest writes to the backend file, without other QEMU actions (e.g., periodic fsync() by QEMU). Current, We have below different possible use cases: 1. pmem=3Don is set, shared=3Don is set, MAP_SYNC supported: a: backend is a dax supporting file. - MAP_SYNC will active. b: backend is not a dax supporting file. - mmap will result in an EOPNOTSUPP error. 2. The rest of cases: - we will never pass the MAP_SYNC to mmap2 Signed-off-by: Haozhong Zhang Signed-off-by: Zhang Yi --- include/qemu/mmap-alloc.h | 1 + include/qemu/osdep.h | 21 +++++++++++++++++++++ util/mmap-alloc.c | 7 ++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h index 6fe6ed4..a95d91c 100644 --- a/include/qemu/mmap-alloc.h +++ b/include/qemu/mmap-alloc.h @@ -18,6 +18,7 @@ size_t qemu_mempath_getpagesize(const char *mem_path); * @flags: specifies additional properties of the mapping, which can be o= ne or * bit-or of following values * - RAM_SHARED: mmap with MAP_SHARED flag + * - RAM_PMEM: mmap with MAP_SYNC flag * Other bits are ignored. * * Return: diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 457d24e..3bcf155 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -419,6 +419,27 @@ void qemu_anon_ram_free(void *ptr, size_t size); # define QEMU_VMALLOC_ALIGN getpagesize() #endif =20 +/* + * MAP_SHARED_VALIDATE and MAP_SYNC are introduced in Linux kernel + * 4.15, so they may not be defined when compiling on older kernels. + */ +#ifdef CONFIG_LINUX + +#include + +#ifndef MAP_SYNC +#define MAP_SYNC 0x0 +#endif + +#ifndef MAP_SHARED_VALIDATE +#define MAP_SHARED_VALIDATE 0x0 +#endif + +#else /* !CONFIG_LINUX */ +#define MAP_SYNC 0x0 +#define MAP_SHARED_VALIDATE 0x0 +#endif /* CONFIG_LINUX */ + #ifdef CONFIG_POSIX struct qemu_signalfd_siginfo { uint32_t ssi_signo; /* Signal number */ diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c index 8f0a740..a4ce9b5 100644 --- a/util/mmap-alloc.c +++ b/util/mmap-alloc.c @@ -99,6 +99,8 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, ui= nt32_t flags) void *ptr =3D mmap(0, total, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -= 1, 0); #endif bool shared =3D flags & RAM_SHARED; + bool is_pmem =3D flags & RAM_PMEM; + int mmap_xflags =3D 0; size_t offset; void *ptr1; =20 @@ -109,12 +111,15 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align= , uint32_t flags) assert(is_power_of_2(align)); /* Always align to host page size */ assert(align >=3D getpagesize()); + if (shared && is_pmem) { + mmap_xflags |=3D (MAP_SYNC | MAP_SHARED_VALIDATE); + } =20 offset =3D QEMU_ALIGN_UP((uintptr_t)ptr, align) - (uintptr_t)ptr; ptr1 =3D mmap(ptr + offset, size, PROT_READ | PROT_WRITE, MAP_FIXED | (fd =3D=3D -1 ? MAP_ANONYMOUS : 0) | - (shared ? MAP_SHARED : MAP_PRIVATE), + (shared ? MAP_SHARED : MAP_PRIVATE) | mmap_xflags, fd, 0); if (ptr1 =3D=3D MAP_FAILED) { munmap(ptr, total); --=20 2.7.4 From nobody Fri Nov 7 11:16:29 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.intel.com Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548212532913693.0944438581437; Tue, 22 Jan 2019 19:02:12 -0800 (PST) Received: from localhost ([127.0.0.1]:54120 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8ne-00035T-2S for importer@patchew.org; Tue, 22 Jan 2019 22:01:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46344) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8lb-00023q-8u for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gm8lX-0000Cl-BD for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:51 -0500 Received: from mga07.intel.com ([134.134.136.100]:14705) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gm8lJ-0008IL-Kb for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:47 -0500 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jan 2019 18:59:32 -0800 Received: from dazhang1-ssd.sh.intel.com (HELO localhost) ([10.239.48.91]) by orsmga002.jf.intel.com with ESMTP; 22 Jan 2019 18:59:29 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,509,1539673200"; d="scan'208";a="128109764" From: "Zhang, Yi" To: xiaoguangrong.eric@gmail.com, stefanha@redhat.com, pbonzini@redhat.com, pagupta@redhat.com, yu.c.zhang@linux.intel.com, richardw.yang@linux.intel.com, mst@redhat.com, ehabkost@redhat.com Date: Wed, 23 Jan 2019 10:59:53 +0800 Message-Id: <5db91f1f6d25bcb040208e1228e4035c7bae79ce.1548136274.git.yi.z.zhang@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.100 Subject: [Qemu-devel] [PATCH V10 3/4] hostmem: add more information in error messages X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: imammedo@redhat.com, dan.j.williams@intel.com, qemu-devel@nongnu.org, Zhang Yi Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Zhang Yi When there are multiple memory backends in use, including the object type name and the property name in the error message can help users to locate the error. Signed-off-by: Haozhong Zhang Signed-off-by: Zhang Yi Reviewed-by: Eduardo Habkost Reviewed-by: Stefano Garzarella --- backends/hostmem-file.c | 6 ++++-- backends/hostmem.c | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c index e640749..0dd7a90 100644 --- a/backends/hostmem-file.c +++ b/backends/hostmem-file.c @@ -82,7 +82,8 @@ static void set_mem_path(Object *o, const char *str, Erro= r **errp) HostMemoryBackendFile *fb =3D MEMORY_BACKEND_FILE(o); =20 if (host_memory_backend_mr_inited(backend)) { - error_setg(errp, "cannot change property value"); + error_setg(errp, "cannot change property 'mem-path' of %s", + object_get_typename(o)); return; } g_free(fb->mem_path); @@ -120,7 +121,8 @@ static void file_memory_backend_set_align(Object *o, Vi= sitor *v, uint64_t val; =20 if (host_memory_backend_mr_inited(backend)) { - error_setg(&local_err, "cannot change property value"); + error_setg(&local_err, "cannot change property '%s' of %s", + name, object_get_typename(o)); goto out; } =20 diff --git a/backends/hostmem.c b/backends/hostmem.c index 1a89342..e2bcf9f 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -47,7 +47,8 @@ host_memory_backend_set_size(Object *obj, Visitor *v, con= st char *name, uint64_t value; =20 if (host_memory_backend_mr_inited(backend)) { - error_setg(&local_err, "cannot change property value"); + error_setg(&local_err, "cannot change property %s of %s ", + name, object_get_typename(obj)); goto out; } =20 @@ -56,8 +57,9 @@ host_memory_backend_set_size(Object *obj, Visitor *v, con= st char *name, goto out; } if (!value) { - error_setg(&local_err, "Property '%s.%s' doesn't take value '%" - PRIu64 "'", object_get_typename(obj), name, value); + error_setg(&local_err, + "property '%s' of %s doesn't take value '%" PRIu64 "'", + name, object_get_typename(obj), value); goto out; } backend->size =3D value; --=20 2.7.4 From nobody Fri Nov 7 11:16:29 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.intel.com Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548212532524575.8126254986298; Tue, 22 Jan 2019 19:02:12 -0800 (PST) Received: from localhost ([127.0.0.1]:54118 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8nd-00034x-SK for importer@patchew.org; Tue, 22 Jan 2019 22:01:57 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46372) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm8lb-00023r-SG for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gm8lX-0000Cg-BB for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:51 -0500 Received: from mga02.intel.com ([134.134.136.20]:65322) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gm8lS-00006q-U8 for qemu-devel@nongnu.org; Tue, 22 Jan 2019 21:59:47 -0500 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jan 2019 18:59:41 -0800 Received: from dazhang1-ssd.sh.intel.com (HELO localhost) ([10.239.48.91]) by fmsmga006.fm.intel.com with ESMTP; 22 Jan 2019 18:59:38 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,509,1539673200"; d="scan'208";a="312594586" From: "Zhang, Yi" To: xiaoguangrong.eric@gmail.com, stefanha@redhat.com, pbonzini@redhat.com, pagupta@redhat.com, yu.c.zhang@linux.intel.com, richardw.yang@linux.intel.com, mst@redhat.com, ehabkost@redhat.com Date: Wed, 23 Jan 2019 11:00:02 +0800 Message-Id: <78014185dc40dea43750eaa50ae093806e3dab66.1548136274.git.yi.z.zhang@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.20 Subject: [Qemu-devel] [PATCH V10 4/4] docs: Added MAP_SYNC documentation X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: imammedo@redhat.com, dan.j.williams@intel.com, qemu-devel@nongnu.org, Zhang Yi Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Zhang Yi Signed-off-by: Zhang Yi --- docs/nvdimm.txt | 29 ++++++++++++++++++++++++++++- qemu-options.hx | 4 ++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/nvdimm.txt b/docs/nvdimm.txt index 5f158a6..166c395 100644 --- a/docs/nvdimm.txt +++ b/docs/nvdimm.txt @@ -142,11 +142,38 @@ backend of vNVDIMM: Guest Data Persistence ---------------------- =20 +vNVDIMM is designed and implemented to guarantee the guest data +persistence on the backends in case of host crash or a power failures. +However, there are still some requirements and limitations +as explained below. + Though QEMU supports multiple types of vNVDIMM backends on Linux, -currently the only one that can guarantee the guest write persistence +if MAP_SYNC is not supported by the host kernel and the backends, +the only backend that can guarantee the guest write persistence is the device DAX on the real NVDIMM device (e.g., /dev/dax0.0), to which all guest access do not involve any host-side kernel cache. =20 +mmap(2) flag MAP_SYNC is added since Linux kernel 4.15. On such +systems, QEMU can mmap(2) the dax backend files with MAP_SYNC, which +ensures filesystem metadata consistency in case of a host crash or a power +failure. Enabling MAP_SYNC in QEMU requires below conditions + + - 'pmem' option of memory-backend-file is 'on': + The backend is a file supporting DAX, e.g., a file on an ext4 or + xfs file system mounted with '-o dax'. if your pmem=3Don ,but the backe= nd is + not a file supporting DAX, mapping with this flag results in an EOPNOTS= UPP + error. + + - 'share' option of memory-backend-file is 'on': + MAP_SYNC flag available only with the MAP_SHARED_VALIDATE mapping type. + + - 'MAP_SYNC' is supported on linux kernel.(default opened since Linux 4.1= 5) + +Otherwise, We will ignore the MAP_SYNC flag. + +For more details, please reference mmap(2) man page: +http://man7.org/linux/man-pages/man2/mmap.2.html. + When using other types of backends, it's suggested to set 'unarmed' option of '-device nvdimm' to 'on', which sets the unarmed flag of the guest NVDIMM region mapping structure. This unarmed flag indicates diff --git a/qemu-options.hx b/qemu-options.hx index 08f8516..0cd41f4 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4002,6 +4002,10 @@ using the SNIA NVM programming model (e.g. Intel NVD= IMM). If @option{pmem} is set to 'on', QEMU will take necessary operations to guarantee the persistence of its own writes to @option{mem-path} (e.g. in vNVDIMM label emulation and live migration). +Also, we will map the backend-file with MAP_SYNC flag, which can ensure +the file metadata is in sync to @option{mem-path} in case of host crash +or a power failure. MAP_SYNC requires support from both the host kernel +(since Linux kernel 4.15) and @option{mem-path} (only files supporting DAX= ). =20 @item -object memory-backend-ram,id=3D@var{id},merge=3D@var{on|off},dump= =3D@var{on|off},share=3D@var{on|off},prealloc=3D@var{on|off},size=3D@var{si= ze},host-nodes=3D@var{host-nodes},policy=3D@var{default|preferred|bind|inte= rleave} =20 --=20 2.7.4