From patchwork Tue Jul 17 06:32:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Junyan He X-Patchwork-Id: 944749 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.com Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41V9Wy18Gvz9s4V for ; Tue, 17 Jul 2018 16:35:42 +1000 (AEST) Received: from localhost ([::1]:57315 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffJaF-00052O-SE for incoming@patchwork.ozlabs.org; Tue, 17 Jul 2018 02:35:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50085) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffJX6-0002y6-UE for qemu-devel@nongnu.org; Tue, 17 Jul 2018 02:32:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ffJX2-0007Vb-Gc for qemu-devel@nongnu.org; Tue, 17 Jul 2018 02:32:24 -0400 Received: from mga12.intel.com ([192.55.52.136]:18700) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ffJX2-0007Ug-7C for qemu-devel@nongnu.org; Tue, 17 Jul 2018 02:32:20 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jul 2018 23:32:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,364,1526367600"; d="scan'208";a="65242097" Received: from natrouter.sh.intel.com (HELO robinhe-hp.domain) ([10.239.13.3]) by FMSMGA003.fm.intel.com with ESMTP; 16 Jul 2018 23:32:14 -0700 From: junyan.he@gmx.com To: qemu-devel@nongnu.org Date: Tue, 17 Jul 2018 14:32:03 +0800 Message-Id: <1531809130-31088-1-git-send-email-junyan.he@gmx.com> X-Mailer: git-send-email 2.7.4 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.136 Subject: [Qemu-devel] [PATCH 0/7 V10] nvdimm: guarantee persistence of QEMU writes to persistent memory 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: xiaoguangrong.eric@gmail.com, crosthwaite.peter@gmail.com, mst@redhat.com, dgilbert@redhat.com, ehabkost@redhat.com, quintela@redhat.com, Junyan He , stefanha@redhat.com, pbonzini@redhat.com, imammedo@redhat.com, yi.z.zhang@intel.com, rth@twiddle.net Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Junyan He QEMU writes to vNVDIMM backends in the vNVDIMM label emulation and live migration. If the backend is on the persistent memory, QEMU needs to take proper operations to ensure its writes persistent on the persistent memory. Otherwise, a host power failure may result in the loss the guest data on the persistent memory. This patch series is based on Marcel's patch "mem: add share parameter to memory-backend-ram" [1] because of the changes in patch 1. [1] https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg03858.html Previous versions of this patch series can be found at: v9: https://lists.gnu.org/archive/html/qemu-devel/2018-07/msg02361.html v8: https://lists.gnu.org/archive/html/qemu-devel/2018-07/msg02279.html v7: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg02997.html v6: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg00061.html v5: https://lists.gnu.org/archive/html/qemu-devel/2018-05/msg02258.html V4: https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg06993.html v3: https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg04365.html v2: https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg01579.html v1: https://lists.gnu.org/archive/html/qemu-devel/2017-12/msg05040.html Changes in v10: * (Patch 4) Fix a nit in nvdimm docs about pmem option usage in command line The v10 patch set is all reviewed by Igor Mammedov Changes in v9: * (Patch 3 and Patch 4) Reorder these two patches to make logic right. Firstly add libpmem support, and then we can use libpmem's configure check result. Also fix some typo and grammar issues in these two patches. Changs in v8: * (Patch 3) Report a error when user set 'pmem' to file-backend, while the qemu is lack of libpmem support. In this case, we can not ensure the persistence of the file-backend, so we choose to fail the build rather than contine and make the thing more confused. Changes in v7: The v6 patch set has already reviewed by Stefan Hajnoczi No logic change in this v7 version, just: * Spelling check and some document words refined. * Rebase to "ram is migratable" patch set. Changes in v6: * (Patch 1) Expose all ram block flags rather than redefine the flags. * (Patch 4) Use pkg-config rather the hard check when configure. * (Patch 7) Sync and flush all the pmem data when migration completes, rather than sync pages one by one in previous version. Changes in v5: * (Patch 9) Add post copy check and output some messages for nvdimm. Changes in v4: * (Patch 2) Fix compilation errors found by patchew. Changes in v3: * (Patch 5) Add a is_pmem flag to ram_handle_compressed() and handle PMEM writes in it, so we don't need the _common function. * (Patch 6) Expose qemu_get_buffer_common so we can remove the unnecessary qemu_get_buffer_to_pmem wrapper. * (Patch 8) Add a is_pmem flag to xbzrle_decode_buffer() and handle PMEM writes in it, so we can remove the unnecessary xbzrle_decode_buffer_{common, to_pmem}. * Move libpmem stubs to stubs/pmem.c and fix the compilation failures of test-{xbzrle,vmstate}.c. Changes in v2: * (Patch 1) Use a flags parameter in file ram allocation functions. * (Patch 2) Add a new option 'pmem' to hostmem-file. * (Patch 3) Use libpmem to operate on the persistent memory, rather than re-implementing those operations in QEMU. * (Patch 5-8) Consider the write persistence in the migration path. Junyan: [1/7] memory, exec: Expose all memory block related flags. [6/7] migration/ram: Add check and info message to nvdimm post copy. [7/7] migration/ram: ensure write persistence on loading all date to PMEM. Haozhong: [5/7] mem/nvdimm: ensure write persistence to PMEM in label emulation Haozhong & Junyan: [2/7] memory, exec: switch file ram allocation functions to 'flags' parameters [3/7] configure: add libpmem support [4/7] hostmem-file: add the 'pmem' option [4/7] hostmem-file: add the 'pmem' option --- backends/hostmem-file.c | 42 +++++++++++++++++++++++++++++++++++++++++- configure | 29 +++++++++++++++++++++++++++++ docs/nvdimm.txt | 22 ++++++++++++++++++++++ exec.c | 38 +++++++++++++------------------------- hw/mem/nvdimm.c | 9 ++++++++- include/exec/memory.h | 31 +++++++++++++++++++++++++++++-- include/exec/ram_addr.h | 28 ++++++++++++++++++++++++++-- include/qemu/pmem.h | 24 ++++++++++++++++++++++++ memory.c | 8 +++++--- migration/ram.c | 17 +++++++++++++++++ numa.c | 2 +- qemu-options.hx | 7 +++++++ stubs/Makefile.objs | 1 + stubs/pmem.c | 23 +++++++++++++++++++++++ 14 files changed, 246 insertions(+), 35 deletions(-) create mode 100644 include/qemu/pmem.h create mode 100644 stubs/pmem.c