From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7DB5DC433E0 for ; Mon, 3 Aug 2020 07:48:12 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 08EEE20738 for ; Mon, 3 Aug 2020 07:48:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HBgUvNXv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 08EEE20738 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id C6F2B8D00EE; Mon, 3 Aug 2020 03:48:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C206B8D00E9; Mon, 3 Aug 2020 03:48:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B0E648D00EE; Mon, 3 Aug 2020 03:48:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0138.hostedemail.com [216.40.44.138]) by kanga.kvack.org (Postfix) with ESMTP id 9B1368D00E9 for ; Mon, 3 Aug 2020 03:48:11 -0400 (EDT) Received: from smtpin22.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 1EF4B181AEF09 for ; Mon, 3 Aug 2020 07:48:11 +0000 (UTC) X-FDA: 77108479182.22.magic32_1b098fd26f9c Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin22.hostedemail.com (Postfix) with ESMTP id D86E818038E71 for ; Mon, 3 Aug 2020 07:48:10 +0000 (UTC) X-HE-Tag: magic32_1b098fd26f9c X-Filterd-Recvd-Size: 15722 Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by imf41.hostedemail.com (Postfix) with ESMTP for ; Mon, 3 Aug 2020 07:48:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1596440889; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=+IhXjbbp3DRnwKGh7EJaRwzYvPFzXS04sIsNp19zYB0=; b=HBgUvNXvXGuqiSUc5DrXbqiqeV2JqWYx41XgHr/xSwG11eWBy/XO+PzysG/FPwtiwHw18x RQVU7VUlVZxCtJp6bhLTHqKO89HvnciEK1UbUDc9q4fc0D0g5tlnWmM/zQDCV3Sx9F73U/ 4t+UXp+VChpnNgAVqVrTTaDjY8MYl8U= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-316-krbLoYQqMnGZ5bY33JqPIw-1; Mon, 03 Aug 2020 03:48:03 -0400 X-MC-Unique: krbLoYQqMnGZ5bY33JqPIw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 35E24100AA29; Mon, 3 Aug 2020 07:47:57 +0000 (UTC) Received: from [10.36.112.252] (ovpn-112-252.ams2.redhat.com [10.36.112.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id E49075D994; Mon, 3 Aug 2020 07:47:40 +0000 (UTC) Subject: Re: [PATCH v4 00/23] device-dax: Support sub-dividing soft-reserved ranges To: Dan Williams , akpm@linux-foundation.org Cc: Ira Weiny , Ard Biesheuvel , Mike Rapoport , Borislav Petkov , Vishal Verma , David Airlie , Will Deacon , Catalin Marinas , Ard Biesheuvel , Joao Martins , Tom Lendacky , Dave Jiang , "Rafael J. Wysocki" , Jonathan Cameron , Wei Yang , x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Greg Kroah-Hartman , Pavel Tatashin , Peter Zijlstra , Ben Skeggs , Benjamin Herrenschmidt , Jason Gunthorpe , Jia He , Ingo Molnar , Dave Hansen , Paul Mackerras , Brice Goglin , Jeff Moyer , Michael Ellerman , "Rafael J. Wysocki" , Daniel Vetter , Andy Lutomirski , "Rafael J. Wysocki" , linux-mm@kvack.org, linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, dri-devel@lists.freedesktop.org References: <159643094279.4062302.17779410714418721328.stgit@dwillia2-desk3.amr.corp.intel.com> From: David Hildenbrand Autocrypt: addr=david@redhat.com; prefer-encrypt=mutual; keydata= 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 WNyWQQ== Organization: Red Hat GmbH Message-ID: Date: Mon, 3 Aug 2020 09:47:39 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <159643094279.4062302.17779410714418721328.stgit@dwillia2-desk3.amr.corp.intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Rspamd-Queue-Id: D86E818038E71 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam03 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: [...] > Well, no v5.8-rc8 to line this up for v5.9, so next best is early > integration into -mm before other collisions develop. >=20 > Chatted with Justin offline and it currently appears that the missing > numa information is the fault of the platform firmware to populate all > the necessary NUMA data in the NFIT. I'm planning on looking at some bits of this series this week, but some questions upfront ... >=20 > --- > Cover: >=20 > The device-dax facility allows an address range to be directly mapped > through a chardev, or optionally hotplugged to the core kernel page > allocator as System-RAM. It is the mechanism for converting persistent > memory (pmem) to be used as another volatile memory pool i.e. the > current Memory Tiering hot topic on linux-mm. >=20 > In the case of pmem the nvdimm-namespace-label mechanism can sub-divide > it, but that labeling mechanism is not available / applicable to > soft-reserved ("EFI specific purpose") memory [3]. This series provides > a sysfs-mechanism for the daxctl utility to enable provisioning of > volatile-soft-reserved memory ranges. >=20 > The motivations for this facility are: >=20 > 1/ Allow performance differentiated memory ranges to be split between > kernel-managed and directly-accessed use cases. >=20 > 2/ Allow physical memory to be provisioned along performance relevant > address boundaries. For example, divide a memory-side cache [4] alon= g > cache-color boundaries. >=20 > 3/ Parcel out soft-reserved memory to VMs using device-dax as a securit= y > / permissions boundary [5]. Specifically I have seen people (ab)usin= g > memmap=3Dnn!ss (mark System-RAM as Persistent Memory) just to get th= e > device-dax interface on custom address ranges. A follow-on for the V= M > use case is to teach device-dax to dynamically allocate 'struct page= ' at > runtime to reduce the duplication of 'struct page' space in both the > guest and the host kernel for the same physical pages. I think I am missing some important pieces. Bear with me. 1. On x86-64, e820 indicates "soft-reserved" memory. This memory is not automatically used in the buddy during boot, but remains untouched (similar to pmem). But as it involves ACPI as well, it could also be used on arm64 (-e820), correct? 2. Soft-reserved memory is volatile RAM with differing performance characteristics ("performance differentiated memory"). What would be examples of such memory? Like, memory that is faster than RAM (scratch pad), or slower (pmem)? Or both? :) Is it a valid use case to use pmem in a hypervisor to back this memory? 3. There seem to be use cases where "soft-reserved" memory is used via DAX. What is an example use case? I assume it's *not* to treat it like PMEM but instead e.g., use it as a fast buffer inside applications or similar. 4. There seem to be use cases where some part of "soft-reserved" memory is used via DAX, some other is given to the buddy. What is an example use case? Is this really necessary or only some theoretical use case? 5. The "provisioned along performance relevant address boundaries." part is unclear to me. Can you give an example of how this would look like from user space? Like, split that memory in blocks of size X with alignment Y and give them to separate applications? 6. If you add such memory to the buddy, is there any way the system can differentiate it from other memory? E.g., via fake/other NUMA nodes? Also, can you give examples of how kmem-added memory is represented in /proc/iomem for a) pmem and b) soft-resered memory after this series (skimming over the patches, I think there is a change for pmem, right?)? I am really wondering if it's the right approach to squeeze this into our pmem/nvdimm infrastructure just because it's easy to do. E.g., man "ndctl" - "ndctl - Manage "libnvdimm" subsystem devices (Non-volatile Memory)" speaks explicitly about non-volatile memory. >=20 > [2]: http://lore.kernel.org/r/20200713160837.13774-11-joao.m.martins@or= acle.com > [3]: http://lore.kernel.org/r/157309097008.1579826.12818463304589384434= .stgit@dwillia2-desk3.amr.corp.intel.com > [4]: http://lore.kernel.org/r/154899811738.3165233.12325692939590944259= .stgit@dwillia2-desk3.amr.corp.intel.com > [5]: http://lore.kernel.org/r/20200110190313.17144-1-joao.m.martins@ora= cle.com >=20 > --- >=20 > Dan Williams (19): > x86/numa: Cleanup configuration dependent command-line options > x86/numa: Add 'nohmat' option > efi/fake_mem: Arrange for a resource entry per efi_fake_mem insta= nce > ACPI: HMAT: Refactor hmat_register_target_device to hmem_register= _device > resource: Report parent to walk_iomem_res_desc() callback > mm/memory_hotplug: Introduce default phys_to_target_node() implem= entation > ACPI: HMAT: Attach a device for each soft-reserved range > device-dax: Drop the dax_region.pfn_flags attribute > device-dax: Move instance creation parameters to 'struct dev_dax_= data' > device-dax: Make pgmap optional for instance creation > device-dax: Kill dax_kmem_res > device-dax: Add an allocation interface for device-dax instances > device-dax: Introduce 'seed' devices > drivers/base: Make device_find_child_by_name() compatible with sy= sfs inputs > device-dax: Add resize support > mm/memremap_pages: Convert to 'struct range' > mm/memremap_pages: Support multiple ranges per invocation > device-dax: Add dis-contiguous resource support > device-dax: Introduce 'mapping' devices >=20 > Joao Martins (4): > device-dax: Make align a per-device property > device-dax: Add an 'align' attribute > dax/hmem: Introduce dax_hmem.region_idle parameter > device-dax: Add a range mapping allocation attribute >=20 >=20 > Documentation/x86/x86_64/boot-options.rst | 4=20 > arch/powerpc/kvm/book3s_hv_uvmem.c | 14=20 > arch/x86/include/asm/numa.h | 8=20 > arch/x86/kernel/e820.c | 16=20 > arch/x86/mm/numa.c | 11=20 > arch/x86/mm/numa_emulation.c | 3=20 > arch/x86/xen/enlighten_pv.c | 2=20 > drivers/acpi/numa/hmat.c | 76 -- > drivers/acpi/numa/srat.c | 9=20 > drivers/base/core.c | 2=20 > drivers/dax/Kconfig | 4=20 > drivers/dax/Makefile | 3=20 > drivers/dax/bus.c | 1046 +++++++++++++++++++++= ++++++-- > drivers/dax/bus.h | 28 - > drivers/dax/dax-private.h | 60 +- > drivers/dax/device.c | 134 ++-- > drivers/dax/hmem.c | 56 -- > drivers/dax/hmem/Makefile | 6=20 > drivers/dax/hmem/device.c | 100 +++ > drivers/dax/hmem/hmem.c | 65 ++ > drivers/dax/kmem.c | 199 +++--- > drivers/dax/pmem/compat.c | 2=20 > drivers/dax/pmem/core.c | 22 - > drivers/firmware/efi/x86_fake_mem.c | 12=20 > drivers/gpu/drm/nouveau/nouveau_dmem.c | 15=20 > drivers/nvdimm/badrange.c | 26 - > drivers/nvdimm/claim.c | 13=20 > drivers/nvdimm/nd.h | 3=20 > drivers/nvdimm/pfn_devs.c | 13=20 > drivers/nvdimm/pmem.c | 27 - > drivers/nvdimm/region.c | 21 - > drivers/pci/p2pdma.c | 12=20 > include/acpi/acpi_numa.h | 14=20 > include/linux/dax.h | 8=20 > include/linux/memory_hotplug.h | 5=20 > include/linux/memremap.h | 11=20 > include/linux/numa.h | 11=20 > include/linux/range.h | 6=20 > kernel/resource.c | 11=20 > lib/test_hmm.c | 15=20 > mm/memory_hotplug.c | 10=20 > mm/memremap.c | 299 +++++--- > tools/testing/nvdimm/dax-dev.c | 22 - > tools/testing/nvdimm/test/iomap.c | 2=20 > 44 files changed, 1825 insertions(+), 601 deletions(-) > delete mode 100644 drivers/dax/hmem.c > create mode 100644 drivers/dax/hmem/Makefile > create mode 100644 drivers/dax/hmem/device.c > create mode 100644 drivers/dax/hmem/hmem.c >=20 > base-commit: 01830e6c042e8eb6eb202e05d7df8057135b4c26 >=20 --=20 Thanks, David / dhildenb