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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5AD2DC4332F for ; Thu, 14 Dec 2023 21:35:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C293D8D00EC; Thu, 14 Dec 2023 16:35:58 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BD9CE8D00C7; Thu, 14 Dec 2023 16:35:58 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AA0FF8D00EC; Thu, 14 Dec 2023 16:35:58 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 9AF0D8D00C7 for ; Thu, 14 Dec 2023 16:35:58 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 655E11A0B58 for ; Thu, 14 Dec 2023 21:35:58 +0000 (UTC) X-FDA: 81566731596.29.6248EE1 Received: from gentwo.org (gentwo.org [62.72.0.81]) by imf07.hostedemail.com (Postfix) with ESMTP id B4A3740017 for ; Thu, 14 Dec 2023 21:35:55 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=linux.com (policy=none); spf=softfail (imf07.hostedemail.com: 62.72.0.81 is neither permitted nor denied by domain of cl@linux.com) smtp.mailfrom=cl@linux.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702589756; h=from:from:sender: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: in-reply-to:in-reply-to:references:references; bh=BGhu60RTZJrd/UpM5jDKRST13qhFv0Qi7OT0wJyjv94=; b=5K5NGqVXJFrbNFsXY1FSoxaNa1CBHItF2OfDyMzxP9H12rqHrCyG+ExwSCZCk8eLjbiF/h u4Ea9drPzPLoURCMhERxdoeThBpf4H4D+wZmfl9bHfjMzWEqA+jtLUWnaugs2LwoUKR2YP 0FmUP4I0zNhM1D2dXucyic0vdCGoPaY= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=linux.com (policy=none); spf=softfail (imf07.hostedemail.com: 62.72.0.81 is neither permitted nor denied by domain of cl@linux.com) smtp.mailfrom=cl@linux.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702589756; a=rsa-sha256; cv=none; b=YaTUoJHMMrR/S35IRC6IeSfxk7FjtfKzaCHbcXCBv4DLmEQNfUlqxw4+W10SSkv3/F6E7a YFBdmB3NA6SUekCarBr/uRLt55KgIMGRv2v/5B5RdKuGebMotYi9bhiQ40rCRp7WdbWwnG vBcZ9/fZUcQipFE9EoiJ47oLXYJ0p6Q= Received: by gentwo.org (Postfix, from userid 1003) id 41B6540E8E; Thu, 14 Dec 2023 13:35:51 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by gentwo.org (Postfix) with ESMTP id 4120D40E89; Thu, 14 Dec 2023 13:35:51 -0800 (PST) Date: Thu, 14 Dec 2023 13:35:51 -0800 (PST) From: "Christoph Lameter (Ampere)" To: Robin Murphy cc: Catalin Marinas , Marc Zyngier , Will Deacon , Ryan Roberts , Mark Rutland , Vishal Moola , linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org Subject: Re: [PATCH] ARM64: Implement arch_report_meminfo() In-Reply-To: Message-ID: References: <79f9a0ad-80cc-1fc5-2d48-cc5ba82bd844@gentwo.org> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed X-Rspam-User: X-Stat-Signature: bzo549c8ato86dera56jgydcy18t67ar X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: B4A3740017 X-HE-Tag: 1702589755-85847 X-HE-Meta: U2FsdGVkX19mI5fWME51pwwaatvLGFSvjc5XXEM+/AIqe+DaGorpA0e8tUCiebLI3O2gXg4s5Iy6Mo6ahboYJBiGZG5k0jb7QmscrSETEeIXkZUxAL0oqlXcvkVojk1eWRKqssxcgF6oNY93Am3HqN3nnD68cVY3IwI9J0eznuvp56upa3eXUoNSE8IxZ5+pnsv8+GazgTf0LpQf8pjlCzOQFNu6Iqz+cklFQ7ACpL0B9Ichr6S02rZWi/wL58+HDoQoXMugpZxvHGxcD6BFUXcaLUyaCEuegLujfrXeCRCt+AMYswK/HKKXPaLjAvNOnUAh5ZugVbzVMNSXi+MHI1l9rtBMW2WJjMQ9Cb5Xh8GhMkqXzqYhSY49mSZuzup02nT7KZy+F+7gg3r60rjzOBZSRueai8LwiTWJAuUGwZFPIEoNxezUij1DT1dszjsh4BtEP1OjGVKgtc7eYIadLpTe4cN0DUxEWDA+gmskeor0BAry41VePVrvW92xF7YYBCMIdLR+l9WNAb4EXO92FZYII0q8a0UD5/Yz3HlveyhsGeqcss03sk+aTZeUJeLWLC8yXWayzShjQ9NSSLhA2IZ5urk6GEYr8/iFg7AVt7pYDbrqtk/rl1rhkSvwsMM5o2HSKiMIjeH1kn1PoVX/zUojXUSDlziyy7FwhfK8Gu+eOvcHdkKSTSVBWIbrTy+DMwDwViUn4nIiuC3QBk20KGrBPru61yfAZuL8Th7LylRTzTK01w79ucwuRngjrcCQErQ70nimKu7DDw1H3E1hhprpibwxdJ6hj8RQPuYKLhTRS0iRIwn8wPZYKB5HFwygSQKM0bTQLxdVtoFAGucKbv6hGoF1ZKvKlRH4Vjrj/TD0L4SvlWDQB8barBZEO49oOGWscZ7SwNu76GBXZybEBVcs+WS3bDCZw7Isk3OrtIbTuQZ6tP2o2LqqISqmxQ+0kp1HOSdJTE+ND5iiYPT BEgQ0ovl 8eGGBXCGPEOFdHJm/LAggGZIpACk5KZLJLiwOK8+On+WvucQqrMv0P2RxNVr+Ysek6okgYKKYV7mpDM8VhMXq3TAcg4bx7v/gW6plgDzV3XyZunl3+8JHafrVRSPt50MVCcruEoFip1WBRQ4IDWnQ2fhGwC0CYmBYRcHrgDxMEi0HV+XRsQRjDJfKilUsG7WdFaJDYQusHdo5SOy2Dc/7njf7unl2fg4uq1r2qKxs3ugjgXKoHn44AAC3yGF1s3rNz+vhOL4oDCKbEi7pEbVz2ySxvRscUs9f3ci9mgj1r9Gs27dWLu2zMEPysQW39L8GnYU29mKhZcQbZREB0/WFKYu78IyPM3tOVbAZL8UYhgClJVvTug1Rfi5IW4veTCS6+6aN6iCsV17jOwiAx1ab8j2Pd6oNmETwYj7yQ0cfg1pULJPXy3yk+67vRatcgGN1aJAMxfq8nU0Pgu6avYWBY+SkLrVkBcg8ewDiLDxaAXjuPiRWS5w3Fu0DNAX7Va8kqt4UiqxUctTgwpUND7yc6fTb1SeGkO8DSrx5eGT5mCI9m/hH7wZpzXRpd6qoPAaUCkOdCDQ/08MzlzFZaTDPxecS/HQnqP3PmHBSbgtO8unquGUJZj+jlZQHWPI0WYQKpI1N 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: List-Subscribe: List-Unsubscribe: On Thu, 14 Dec 2023, Robin Murphy wrote: > It seems somewhat suspect that these counts only ever increase. It's not > often that we change or remove parts of the linear map, but it certainly can > happen. Well yes in the case of hotplug I guess ... Ok here is V2 >From cl@gentwo.org Fri Dec 8 13:11:58 2023 From: "Christoph Lameter (Ampere)" To: Catalin Marinas , Marc Zyngier , Will Deacon , Ryan Roberts , Mark Rutland , Vishal Moola Cc: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH] ARM64: Implement arch_report_meminfo() V1->V2 hotplug and umapping support X86 has information in /proc/meminfo showing the use of large mappings for the kernel direct map. This has now also become important for ARM since the kernel default CONFIG_RODATA_FULL_DEFAULT_ENABLED forces 4K PTE use for the direct map and users may not be aware of the performance impact of the increased TLB use etc. The output of /proc/meminfo on ARM64 is then after this patch: 4K page size: Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 155912 kB CONT DMap4k: 1176 kB DirectMap2M: 722944 kB CONT DMap2M: 28672 kB DirectMap1G: 534773760 kB 64K page size: Hugepagesize: 524288 kB Hugetlb: 0 kB DirectMap64k: 882624 kB CONT DMap64k: 19904 kB DirectMap512M: 534773760 kB CONT DMap512M: 0 kB DirectMap4096G: 0 kB Signed-off-by: Christoph Lameter (Ampere) Index: linux/arch/arm64/mm/mmu.c =================================================================== --- linux.orig/arch/arm64/mm/mmu.c +++ linux/arch/arm64/mm/mmu.c @@ -76,6 +76,13 @@ EXPORT_SYMBOL(empty_zero_page); static DEFINE_SPINLOCK(swapper_pgdir_lock); static DEFINE_MUTEX(fixmap_lock); +static atomic_t nr_pte; +static atomic_t nr_pmd; +static atomic_t nr_pud; +static atomic_t nr_pte_cont; +static atomic_t nr_pmd_cont; + + void set_swapper_pgd(pgd_t *pgdp, pgd_t pgd) { pgd_t *fixmap_pgdp; @@ -179,6 +186,7 @@ static void init_pte(pmd_t *pmdp, unsign pte_t old_pte = READ_ONCE(*ptep); set_pte(ptep, pfn_pte(__phys_to_pfn(phys), prot)); + atomic_inc(&nr_pte); /* * After the PTE entry has been populated once, we @@ -223,8 +231,10 @@ static void alloc_init_cont_pte(pmd_t *p /* use a contiguous mapping if the range is suitably aligned */ if ((((addr | next | phys) & ~CONT_PTE_MASK) == 0) && - (flags & NO_CONT_MAPPINGS) == 0) + (flags & NO_CONT_MAPPINGS) == 0) { __prot = __pgprot(pgprot_val(prot) | PTE_CONT); + atomic_inc(&nr_pte_cont); + } init_pte(pmdp, addr, next, phys, __prot); @@ -249,6 +259,7 @@ static void init_pmd(pud_t *pudp, unsign if (((addr | next | phys) & ~PMD_MASK) == 0 && (flags & NO_BLOCK_MAPPINGS) == 0) { pmd_set_huge(pmdp, phys, prot); + atomic_inc(&nr_pmd); /* * After the PMD entry has been populated once, we @@ -301,8 +312,10 @@ static void alloc_init_cont_pmd(pud_t *p /* use a contiguous mapping if the range is suitably aligned */ if ((((addr | next | phys) & ~CONT_PMD_MASK) == 0) && - (flags & NO_CONT_MAPPINGS) == 0) + (flags & NO_CONT_MAPPINGS) == 0) { __prot = __pgprot(pgprot_val(prot) | PTE_CONT); + atomic_inc(&nr_pmd_cont); + } init_pmd(pudp, addr, next, phys, __prot, pgtable_alloc, flags); @@ -346,7 +359,7 @@ static void alloc_init_pud(pgd_t *pgdp, ((addr | next | phys) & ~PUD_MASK) == 0 && (flags & NO_BLOCK_MAPPINGS) == 0) { pud_set_huge(pudp, phys, prot); - + atomic_inc(&nr_pud); /* * After the PUD entry has been populated once, we * only allow updates to the permission attributes. @@ -859,6 +872,11 @@ static void unmap_hotplug_pte_range(pmd_ continue; WARN_ON(!pte_present(pte)); + + if (pte_cont(pte)) + atomic_dec(&nr_pte_cont); + atomic_dec(&nr_pte); + pte_clear(&init_mm, addr, ptep); flush_tlb_kernel_range(addr, addr + PAGE_SIZE); if (free_mapped) @@ -883,6 +901,11 @@ static void unmap_hotplug_pmd_range(pud_ WARN_ON(!pmd_present(pmd)); if (pmd_sect(pmd)) { + + if (pmd_cont(pmd)) + atomic_dec(&nr_pmd_cont); + atomic_dec(&nr_pmd); + pmd_clear(pmdp); /* @@ -916,6 +939,9 @@ static void unmap_hotplug_pud_range(p4d_ WARN_ON(!pud_present(pud)); if (pud_sect(pud)) { + + atomic_dec(&nr_pud); + pud_clear(pudp); /* @@ -1010,6 +1036,7 @@ static void free_empty_pte_table(pmd_t * return; } + atomic_dec(&nr_pmd); pmd_clear(pmdp); __flush_tlb_kernel_pgtable(start); free_hotplug_pgtable_page(virt_to_page(ptep)); @@ -1050,6 +1077,7 @@ static void free_empty_pmd_table(pud_t * return; } + atomic_dec(&nr_pud); pud_clear(pudp); __flush_tlb_kernel_pgtable(start); free_hotplug_pgtable_page(virt_to_page(pmdp)); @@ -1225,6 +1253,7 @@ int pmd_free_pte_page(pmd_t *pmdp, unsig } table = pte_offset_kernel(pmdp, addr); + atomic_dec(&nr_pmd); pmd_clear(pmdp); __flush_tlb_kernel_pgtable(addr); pte_free_kernel(NULL, table); @@ -1253,6 +1282,7 @@ int pud_free_pmd_page(pud_t *pudp, unsig pmd_free_pte_page(pmdp, next); } while (pmdp++, next += PMD_SIZE, next != end); + atomic_dec(&nr_pud); pud_clear(pudp); __flush_tlb_kernel_pgtable(addr); pmd_free(NULL, table); @@ -1486,3 +1516,36 @@ void ptep_modify_prot_commit(struct vm_a { set_pte_at(vma->vm_mm, addr, ptep, pte); } + + +#ifdef CONFIG_PROC_FS +void arch_report_meminfo(struct seq_file *m) +{ + unsigned long pagesize_in_kb = PAGE_SIZE / 1024; + + seq_printf(m, "DirectMap%luk: %8lu kB\n", + pagesize_in_kb, + (unsigned long)atomic_read(&nr_pte) * pagesize_in_kb); + + seq_printf(m, "CONT DMap%luk: %8lu kB\n", + pagesize_in_kb, + (unsigned long)atomic_read(&nr_pte_cont) * pagesize_in_kb); + + pagesize_in_kb = PMD_SIZE / 1024; + + seq_printf(m, "DirectMap%luM: %8lu kB\n", + pagesize_in_kb / 1024, + (unsigned long)atomic_read(&nr_pmd) * pagesize_in_kb); + + seq_printf(m, "CONT DMap%luM: %8lu kB\n", + pagesize_in_kb / 1024, + (unsigned long)atomic_read(&nr_pmd_cont) * pagesize_in_kb); + + pagesize_in_kb = PUD_SIZE / 1024; + + seq_printf(m, "DirectMap%luG: %10lu kB\n", + pagesize_in_kb >> 20, + (unsigned long)atomic_read(&nr_pud) * pagesize_in_kb); +} +#endif +