From patchwork Thu Apr 17 00:02:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054623 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 84FDAC369C2 for ; Thu, 17 Apr 2025 00:06:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EFC386B02DD; Wed, 16 Apr 2025 20:06:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E84FF6B02DF; Wed, 16 Apr 2025 20:06:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CD5056B02E0; Wed, 16 Apr 2025 20:06:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id ACF486B02DD for ; Wed, 16 Apr 2025 20:06:17 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 3BF6ABBA50 for ; Thu, 17 Apr 2025 00:06:18 +0000 (UTC) X-FDA: 83341593636.29.4455812 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf11.hostedemail.com (Postfix) with ESMTP id 81D1F40005 for ; Thu, 17 Apr 2025 00:06:16 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WstyhEPn; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848376; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=RVq/V6kv0JN45ZLrYl5+wg/xnTqkuoTtgwETvad5uYo=; b=xr9aDzBIrSFqrlQQu9Tp9EDzUEHM+eWryslPARBGBjQRG7JYV2zBaLzK47Qxd6hubgCk4R oevOMVrdDk/jTlXN4NCsU3L/v+vkBhQ7ubjIF1cEB0NU7YbqIHaAEJsv1hh4BjOIQKnMMy M3w34S1qwNHyiAr8sK9tflBBXTG5duw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848376; a=rsa-sha256; cv=none; b=E+4Jz2V0koZdamCpNKOCQTzrr7/PBXtzR0NwHI1KlJ7g8/eaUrzHZ1JAbx4zT7WhOeEDUS MwNFbTgU+8yMesisyexdDE9XtFEN4Q4AXKmZU1DIpvCm59R0Xc3YDm9g/n2AkY/+1tkmjx tq2zSQt9DdcFdIl+KqoDy2GhaFnmHQ4= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WstyhEPn; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848375; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RVq/V6kv0JN45ZLrYl5+wg/xnTqkuoTtgwETvad5uYo=; b=WstyhEPnSVUhbJxUaCrLk9Ehw/3SNJLY2WMLAGrsHBYfR7JBkLtfQruoYvVwV01tCdXb3A b3JLzro724JxJ47sKt6NOorJ83+DwygrkuNMK5yb2ipQyunvsLfH9zcFePHOWLl/1DRTPl FSj0rhoz7S/M6wQhqmsaOeMl1kqapoQ= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-302-C30RwnqPPOSrXDaLCZZx7Q-1; Wed, 16 Apr 2025 20:06:14 -0400 X-MC-Unique: C30RwnqPPOSrXDaLCZZx7Q-1 X-Mimecast-MFC-AGG-ID: C30RwnqPPOSrXDaLCZZx7Q_1744848370 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8174F1800446; Thu, 17 Apr 2025 00:06:08 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 560011800352; Thu, 17 Apr 2025 00:05:59 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 01/12] introduce khugepaged_collapse_single_pmd to unify khugepaged and madvise_collapse Date: Wed, 16 Apr 2025 18:02:27 -0600 Message-ID: <20250417000238.74567-2-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 81D1F40005 X-Rspam-User: X-Stat-Signature: n6hwk6xfjn8sn3uyt3b4jrsqgpyrs1ww X-HE-Tag: 1744848376-877356 X-HE-Meta: U2FsdGVkX1+xJ6UZVaI3+JKjZKkj9y0ysCINP1ce4jIlY1OUlz0CYankjT+V4Zvo5w2X2HuyfjBUEsC5anHdwO8t1inBWm2Uf/Fdy6gowl2pfoK+MMWn4pMV1jdbfWJ0ffGE3FWZrcS3cJo5/c3qZeE4a6arjzQHgGnYXYZo8QzuLPAPqg6OkPX9MCvUjD2OItE4yRDJRq8mHNzz3j611XRok91lCcrFC/wU6wDjyuuRjABLaEi27y3pOJ/YNQEoAAVh1N3a+RoDzh4yUQ6qt4MN9LC1JO8hsENfNGKjprAh/AqhdMb3s5KgLp+6/3eX7PoQwMhVFufRh1o4s3fF2r42e9GUUYlTcZZJ6CJK/SHqPGyE//8NMviqCDsIJ4NuoMSi4dvMGKBDvL/vsUxZLCcu1x+Mus5J0vgpzkxFQ5UdcHxc190CxN8WKYmmuyoVEz3HXsHXtkcMELUdgtIHJnhC09huUIRloynURN2azqXaM18AtVngT3qL+yjbBlx/h5rY7KGC4MyP4xgtsd/DjrqJXBeoFqfl/jU0VlqI9jMP5Orrg9WQobU/lddWzaC/Fyk0+t7Ev1ytDwPo15W1wHledjzRfT4kfYbjszFdio+EPUnhJ4iQ5bcdZdD7nSkKo25TodskQwT0slHIHUsssk4lht4Rx0WPOdDam14je1I7wOXVCqaVL5bo+kPpGLWIRs5/lxKK7XIpqS7KYM6K4HAbH5qQoobFEgKT0vsJZQJeh99iIWZFDGfKLjHPfwf/WadVS1sJHgLO57y5xcG81QuNoaGXQd5gG2mLoCAECquXirE9V0y/2QgXAvh0CWe/ZEFn8JeVAmvETjUqOsobzKSkbpskiC5ACHjv1msxgd3bQZ5MaDOhAUF+vHJNqULDj/fXahMTdZsEEatLHmGwtDodSnjVqsAJhSmVMslkrjuHHajLeAnWQaNta6R5qqfvXaP2BX6JalWGd+Kq5Yw /Qwgzhao uCma9eXkKFUIfiv90GDRB/qPQXZqhNbTLTi0VVrADPIHSYSQw7+J0aGfw2Rpb54/7iFdvn4nphDdmqQ/ARLsFIyHxlX6JEpn/pihErrTGCbcHsCETwQ7digzQQeIUC8spS+ZKIMFPQl4XV3NkgvPK+Hof4eqn6OXHrc+bhOuugqxxMpGXMUywt36mb8uRcoI5NoerMBF4I1bqvsd3kxmJC4gddxJr/hZrcDWuTXaE+xfadoz6ZCRx6lKdc1rYM4S5mKl/wa0qeF854RhKbgERSH2FsfU5jXtFMQHT3FcVqzonwbYFEV8tnc3mja8UHCAA5XldCtXqKkjo7Nf+hjt7v0DweUpYMT8zeTUatgk7hVpF+cbuZdBu2egKoIESFsYeLxH2LTPfcQ6TvqTNQFdq3E3DIX+JbbculVYnSOMKiQnYs6zt5+T5tOMZ/UjjWgBDw2cXoE6MGVazPXA= 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: The khugepaged daemon and madvise_collapse have two different implementations that do almost the same thing. Create khugepaged_collapse_single_pmd to increase code reuse and create an entry point for future khugepaged changes. Refactor madvise_collapse and khugepaged_scan_mm_slot to use the new khugepaged_collapse_single_pmd function. Signed-off-by: Nico Pache --- mm/khugepaged.c | 92 ++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index b8838ba8207a..cecadc4239e7 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -2363,6 +2363,48 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, } #endif +/* + * Try to collapse a single PMD starting at a PMD aligned addr, and return + * the results. + */ +static int khugepaged_collapse_single_pmd(unsigned long addr, + struct vm_area_struct *vma, bool *mmap_locked, + struct collapse_control *cc) +{ + int result = SCAN_FAIL; + struct mm_struct *mm = vma->vm_mm; + unsigned long tva_flags = cc->is_khugepaged ? TVA_ENFORCE_SYSFS : 0; + + if (thp_vma_allowable_order(vma, vma->vm_flags, + tva_flags, PMD_ORDER)) { + if (IS_ENABLED(CONFIG_SHMEM) && !vma_is_anonymous(vma)) { + struct file *file = get_file(vma->vm_file); + pgoff_t pgoff = linear_page_index(vma, addr); + + mmap_read_unlock(mm); + *mmap_locked = false; + result = hpage_collapse_scan_file(mm, addr, file, pgoff, + cc); + fput(file); + if (result == SCAN_PTE_MAPPED_HUGEPAGE) { + mmap_read_lock(mm); + if (hpage_collapse_test_exit_or_disable(mm)) + goto end; + result = collapse_pte_mapped_thp(mm, addr, + !cc->is_khugepaged); + mmap_read_unlock(mm); + } + } else { + result = hpage_collapse_scan_pmd(mm, vma, addr, + mmap_locked, cc); + } + if (cc->is_khugepaged && result == SCAN_SUCCEED) + ++khugepaged_pages_collapsed; + } +end: + return result; +} + static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, struct collapse_control *cc) __releases(&khugepaged_mm_lock) @@ -2437,33 +2479,9 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, VM_BUG_ON(khugepaged_scan.address < hstart || khugepaged_scan.address + HPAGE_PMD_SIZE > hend); - if (IS_ENABLED(CONFIG_SHMEM) && !vma_is_anonymous(vma)) { - struct file *file = get_file(vma->vm_file); - pgoff_t pgoff = linear_page_index(vma, - khugepaged_scan.address); - mmap_read_unlock(mm); - mmap_locked = false; - *result = hpage_collapse_scan_file(mm, - khugepaged_scan.address, file, pgoff, cc); - fput(file); - if (*result == SCAN_PTE_MAPPED_HUGEPAGE) { - mmap_read_lock(mm); - if (hpage_collapse_test_exit_or_disable(mm)) - goto breakouterloop; - *result = collapse_pte_mapped_thp(mm, - khugepaged_scan.address, false); - if (*result == SCAN_PMD_MAPPED) - *result = SCAN_SUCCEED; - mmap_read_unlock(mm); - } - } else { - *result = hpage_collapse_scan_pmd(mm, vma, - khugepaged_scan.address, &mmap_locked, cc); - } - - if (*result == SCAN_SUCCEED) - ++khugepaged_pages_collapsed; + *result = khugepaged_collapse_single_pmd(khugepaged_scan.address, + vma, &mmap_locked, cc); /* move to next address */ khugepaged_scan.address += HPAGE_PMD_SIZE; @@ -2783,36 +2801,18 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, mmap_assert_locked(mm); memset(cc->node_load, 0, sizeof(cc->node_load)); nodes_clear(cc->alloc_nmask); - if (IS_ENABLED(CONFIG_SHMEM) && !vma_is_anonymous(vma)) { - struct file *file = get_file(vma->vm_file); - pgoff_t pgoff = linear_page_index(vma, addr); - mmap_read_unlock(mm); - mmap_locked = false; - result = hpage_collapse_scan_file(mm, addr, file, pgoff, - cc); - fput(file); - } else { - result = hpage_collapse_scan_pmd(mm, vma, addr, - &mmap_locked, cc); - } + result = khugepaged_collapse_single_pmd(addr, vma, &mmap_locked, cc); + if (!mmap_locked) *prev = NULL; /* Tell caller we dropped mmap_lock */ -handle_result: switch (result) { case SCAN_SUCCEED: case SCAN_PMD_MAPPED: ++thps; break; case SCAN_PTE_MAPPED_HUGEPAGE: - BUG_ON(mmap_locked); - BUG_ON(*prev); - mmap_read_lock(mm); - result = collapse_pte_mapped_thp(mm, addr, true); - mmap_read_unlock(mm); - goto handle_result; - /* Whitelisted set of results where continuing OK */ case SCAN_PMD_NULL: case SCAN_PTE_NON_PRESENT: case SCAN_PTE_UFFD_WP: From patchwork Thu Apr 17 00:02:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054624 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 E5C9AC369BD for ; Thu, 17 Apr 2025 00:06:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A3630280133; Wed, 16 Apr 2025 20:06:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A0B6E280132; Wed, 16 Apr 2025 20:06:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8D3C2280133; Wed, 16 Apr 2025 20:06:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 7047E280132 for ; Wed, 16 Apr 2025 20:06:29 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id B083E5817C for ; Thu, 17 Apr 2025 00:06:29 +0000 (UTC) X-FDA: 83341594098.18.F72D177 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf17.hostedemail.com (Postfix) with ESMTP id E191A40005 for ; Thu, 17 Apr 2025 00:06:27 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JpP16PUn; spf=pass (imf17.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848388; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mx5KxNm3rdkIJjf+E+9/GYwRzAba+MveT9ttHHV1VDE=; b=3plljqewSiv+NlAtlQSMIsCqmA31EJP3CjadrKeBH2vFyZ21/4B4Ij7KfN2kMoaA5xBBDT jwliiAD4lj/PHbh2Hb6vAKfCGYM6o7h0EeKmtSemctiohxLt8CvMv08AFQhVA15qXm9aGR BTlNevCasv0SEzQTgOrb5dAaIpF/wCY= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JpP16PUn; spf=pass (imf17.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848388; a=rsa-sha256; cv=none; b=4PONB4XWPOUNsR3qXsRWOSfX/D5lKXiUsFC0TkXFrsgBkVfjmscEohUpk2t4getEsrPsgA SXe2kAUVvXIUQt/XMkUGXiR2bp19m+VVHsoWTN6aytzdUj0w6eyePPfmAtSr8kEJ0ZMJax ydeHRv1zJJsEw9pIx6FZyMDg+nFk+Wk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848387; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mx5KxNm3rdkIJjf+E+9/GYwRzAba+MveT9ttHHV1VDE=; b=JpP16PUnsCtHDrIgKLhbp976oMuUyNd7e2qQHrpvFWp1yBjT0RV+9AFtwqnTCIySqY8J6R La40udGOEf8mDcngyTbnjT1HmgeO4Pu4m/cuMjn5uXJkHaTeTH/3CGHmzZm/6Nf3napaxQ w/usURnP8DVokBcGSsnrGKcBjNSqHL0= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-397-GTQ8-yPoMzutlcqlj3YaKg-1; Wed, 16 Apr 2025 20:06:22 -0400 X-MC-Unique: GTQ8-yPoMzutlcqlj3YaKg-1 X-Mimecast-MFC-AGG-ID: GTQ8-yPoMzutlcqlj3YaKg_1744848378 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D32321800370; Thu, 17 Apr 2025 00:06:17 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EB1E71801765; Thu, 17 Apr 2025 00:06:08 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 02/12] khugepaged: rename hpage_collapse_* to khugepaged_* Date: Wed, 16 Apr 2025 18:02:28 -0600 Message-ID: <20250417000238.74567-3-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: E191A40005 X-Stat-Signature: biycryw9itpyhcngud7y5ejh1pfhb6wb X-HE-Tag: 1744848387-757859 X-HE-Meta: U2FsdGVkX19dV9aIwD4RAyzA6jIvKqn3uUk1Ciwgy/b/cID5BcFAFnBxBuWz5I57fGRX64ufWRrN9cc1sKuY9HnaSyTawT53A39l/P0uymSf1ouIZURDjEFO1WBirx8Dqr4et5uthSqwLrHEA2D3lcdhkOBPK6kavmoWDGsDuoWqfIwUnJJsBU8JVQY7wcV3Hd/gDoAsUIUxqzKpQDckO+d0WZDzdF2x9SkulNvs8osQXoIpEaX/Ra1Idvw2kxRrpMPBt4Ps+KNR4TX4XD9p3pIh6AW6GiTwupQjdbARUm+1B8AvMDB+o55BQtjDTqO3Kk0bTNQFm2ijOGsAce5gEdOUZQTWK9FHkxLnYu23FcnRM4mkHUUC4OCbqce+uKr1lF2sWokusLTpWLl32TiclXMksV990IVHBlbpiZWeQ6NiHsMYI+Jur9qbeGBEKnpB+xHd7P7qh3fhfW9OKc+XDWMVKsT7Eeer0EBPIuZrPuJ0c9u/KGKZyo/tqW6zL+4QTcRtn/9/mNcy1bDquuaBRVw4eEuu1na+YtNmt6Thk54AHJ9LshyTJcjGy3QktlwPAH9XwGyAsxuluHTDYT37qoG+izN3PH8qQrMy7lh5r/yUVuFO6DnUpUCHp9Aq8ewu9jIhX1DZWNCyMmvJly0Uuq/m7bN11l3OooAmgGlAmsPJkc4HTT9HQe+6jW0bCXUSxNcSIbJNwRxYbK9tsLnTNW+de2B6GxF1F3J3f3Z5iO/sYH4Z93CuyxVBOSVeaQ+EZhYiz+40tGeRwiy110cKzhHaY3Md55N4RZ8jDLvFfB/rqQ8XYbTgkN0EWJ9iJ1XXeZrqd0E+fqAZrLRlzn0pqKzg7Au0XDXT5mq+r/NJOV+RtgSGprp9IYnnbRRIihIo6wQuS40gKGcIxL7SKQkie5bYG2+psq3oTUD+0dX+f1P4QOoT7rTOZfhJYXyDb5BM4psgA7NBjfkLvgZmm/7 +dPEu4dk 1RDYqPzXVtx1PJUppMhwXL1iauQwydfQciIkzD47Uwiy+yRwzeXQLc5txtUGYQjNqG0FI1Zx0Hg+ro2IsX+fQdgmKxErjJl54jrVMmWMRlTzzhXHNm+694xNaWG33Y+5xbLdxgHMhXgv7k0q/QBflDAK/vaJiRj/3G3S30FzPPGJdCMyIaJapW6sXGScLBwA8XpRb/H2JkmbKpRNPC6syybrqhuHpTP4nn9rGKBMv3HgVvyZjReQ3+Pwm1jibjTqk9Slvu36tYDWrQOkQWs+yKnspZvomjFrDJF9n5O0xBd2jSvFs3Qcmg9cMXNEVWvXVnWIn6qXZF7y2E/aK695Ko5X4kTxtGcYlpMPkC0RlS3jDJPEFhxmPk273cAhYlINj0FIYFBhhr5Whw6qx8p1l8edhUSW+prqCXLHo7SyMYAilkqG4XHzb4ZrrLN0Avz116hDjE3coilqTJ2A= 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: functions in khugepaged.c use a mix of hpage_collapse and khugepaged as the function prefix. rename all of them to khugepaged to keep things consistent and slightly shorten the function names. Signed-off-by: Nico Pache --- mm/khugepaged.c | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index cecadc4239e7..b6281c04f1e5 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -402,14 +402,14 @@ void __init khugepaged_destroy(void) kmem_cache_destroy(mm_slot_cache); } -static inline int hpage_collapse_test_exit(struct mm_struct *mm) +static inline int khugepaged_test_exit(struct mm_struct *mm) { return atomic_read(&mm->mm_users) == 0; } -static inline int hpage_collapse_test_exit_or_disable(struct mm_struct *mm) +static inline int khugepaged_test_exit_or_disable(struct mm_struct *mm) { - return hpage_collapse_test_exit(mm) || + return khugepaged_test_exit(mm) || test_bit(MMF_DISABLE_THP, &mm->flags); } @@ -444,7 +444,7 @@ void __khugepaged_enter(struct mm_struct *mm) int wakeup; /* __khugepaged_exit() must not run from under us */ - VM_BUG_ON_MM(hpage_collapse_test_exit(mm), mm); + VM_BUG_ON_MM(khugepaged_test_exit(mm), mm); if (unlikely(test_and_set_bit(MMF_VM_HUGEPAGE, &mm->flags))) return; @@ -503,7 +503,7 @@ void __khugepaged_exit(struct mm_struct *mm) } else if (mm_slot) { /* * This is required to serialize against - * hpage_collapse_test_exit() (which is guaranteed to run + * khugepaged_test_exit() (which is guaranteed to run * under mmap sem read mode). Stop here (after we return all * pagetables will be destroyed) until khugepaged has finished * working on the pagetables under the mmap_lock. @@ -851,7 +851,7 @@ struct collapse_control khugepaged_collapse_control = { .is_khugepaged = true, }; -static bool hpage_collapse_scan_abort(int nid, struct collapse_control *cc) +static bool khugepaged_scan_abort(int nid, struct collapse_control *cc) { int i; @@ -886,7 +886,7 @@ static inline gfp_t alloc_hugepage_khugepaged_gfpmask(void) } #ifdef CONFIG_NUMA -static int hpage_collapse_find_target_node(struct collapse_control *cc) +static int khugepaged_find_target_node(struct collapse_control *cc) { int nid, target_node = 0, max_value = 0; @@ -905,7 +905,7 @@ static int hpage_collapse_find_target_node(struct collapse_control *cc) return target_node; } #else -static int hpage_collapse_find_target_node(struct collapse_control *cc) +static int khugepaged_find_target_node(struct collapse_control *cc) { return 0; } @@ -925,7 +925,7 @@ static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address, struct vm_area_struct *vma; unsigned long tva_flags = cc->is_khugepaged ? TVA_ENFORCE_SYSFS : 0; - if (unlikely(hpage_collapse_test_exit_or_disable(mm))) + if (unlikely(khugepaged_test_exit_or_disable(mm))) return SCAN_ANY_PROCESS; *vmap = vma = find_vma(mm, address); @@ -992,7 +992,7 @@ static int check_pmd_still_valid(struct mm_struct *mm, /* * Bring missing pages in from swap, to complete THP collapse. - * Only done if hpage_collapse_scan_pmd believes it is worthwhile. + * Only done if khugepaged_scan_pmd believes it is worthwhile. * * Called and returns without pte mapped or spinlocks held. * Returns result: if not SCAN_SUCCEED, mmap_lock has been released. @@ -1078,7 +1078,7 @@ static int alloc_charge_folio(struct folio **foliop, struct mm_struct *mm, { gfp_t gfp = (cc->is_khugepaged ? alloc_hugepage_khugepaged_gfpmask() : GFP_TRANSHUGE); - int node = hpage_collapse_find_target_node(cc); + int node = khugepaged_find_target_node(cc); struct folio *folio; folio = __folio_alloc(gfp, HPAGE_PMD_ORDER, node, &cc->alloc_nmask); @@ -1264,7 +1264,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, return result; } -static int hpage_collapse_scan_pmd(struct mm_struct *mm, +static int khugepaged_scan_pmd(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, bool *mmap_locked, struct collapse_control *cc) @@ -1378,7 +1378,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm, * hit record. */ node = folio_nid(folio); - if (hpage_collapse_scan_abort(node, cc)) { + if (khugepaged_scan_abort(node, cc)) { result = SCAN_SCAN_ABORT; goto out_unmap; } @@ -1447,7 +1447,7 @@ static void collect_mm_slot(struct khugepaged_mm_slot *mm_slot) lockdep_assert_held(&khugepaged_mm_lock); - if (hpage_collapse_test_exit(mm)) { + if (khugepaged_test_exit(mm)) { /* free mm_slot */ hash_del(&slot->hash); list_del(&slot->mm_node); @@ -1742,7 +1742,7 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff) if (find_pmd_or_thp_or_none(mm, addr, &pmd) != SCAN_SUCCEED) continue; - if (hpage_collapse_test_exit(mm)) + if (khugepaged_test_exit(mm)) continue; /* * When a vma is registered with uffd-wp, we cannot recycle @@ -2264,7 +2264,7 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr, return result; } -static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, +static int khugepaged_scan_file(struct mm_struct *mm, unsigned long addr, struct file *file, pgoff_t start, struct collapse_control *cc) { @@ -2309,7 +2309,7 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, } node = folio_nid(folio); - if (hpage_collapse_scan_abort(node, cc)) { + if (khugepaged_scan_abort(node, cc)) { result = SCAN_SCAN_ABORT; break; } @@ -2355,7 +2355,7 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, return result; } #else -static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, +static int khugepaged_scan_file(struct mm_struct *mm, unsigned long addr, struct file *file, pgoff_t start, struct collapse_control *cc) { @@ -2383,19 +2383,19 @@ static int khugepaged_collapse_single_pmd(unsigned long addr, mmap_read_unlock(mm); *mmap_locked = false; - result = hpage_collapse_scan_file(mm, addr, file, pgoff, + result = khugepaged_scan_file(mm, addr, file, pgoff, cc); fput(file); if (result == SCAN_PTE_MAPPED_HUGEPAGE) { mmap_read_lock(mm); - if (hpage_collapse_test_exit_or_disable(mm)) + if (khugepaged_test_exit_or_disable(mm)) goto end; result = collapse_pte_mapped_thp(mm, addr, !cc->is_khugepaged); mmap_read_unlock(mm); } } else { - result = hpage_collapse_scan_pmd(mm, vma, addr, + result = khugepaged_scan_pmd(mm, vma, addr, mmap_locked, cc); } if (cc->is_khugepaged && result == SCAN_SUCCEED) @@ -2443,7 +2443,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, goto breakouterloop_mmap_lock; progress++; - if (unlikely(hpage_collapse_test_exit_or_disable(mm))) + if (unlikely(khugepaged_test_exit_or_disable(mm))) goto breakouterloop; vma_iter_init(&vmi, mm, khugepaged_scan.address); @@ -2451,7 +2451,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, unsigned long hstart, hend; cond_resched(); - if (unlikely(hpage_collapse_test_exit_or_disable(mm))) { + if (unlikely(khugepaged_test_exit_or_disable(mm))) { progress++; break; } @@ -2473,7 +2473,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, bool mmap_locked = true; cond_resched(); - if (unlikely(hpage_collapse_test_exit_or_disable(mm))) + if (unlikely(khugepaged_test_exit_or_disable(mm))) goto breakouterloop; VM_BUG_ON(khugepaged_scan.address < hstart || @@ -2509,7 +2509,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, * Release the current mm_slot if this mm is about to die, or * if we scanned all vmas of this mm. */ - if (hpage_collapse_test_exit(mm) || !vma) { + if (khugepaged_test_exit(mm) || !vma) { /* * Make sure that if mm_users is reaching zero while * khugepaged runs here, khugepaged_exit will find From patchwork Thu Apr 17 00:02:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054625 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 E889CC369C2 for ; Thu, 17 Apr 2025 00:06:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 961A6280134; Wed, 16 Apr 2025 20:06:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 911C3280132; Wed, 16 Apr 2025 20:06:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7B160280134; Wed, 16 Apr 2025 20:06:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 5C447280132 for ; Wed, 16 Apr 2025 20:06:38 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id A46E41A0F40 for ; Thu, 17 Apr 2025 00:06:38 +0000 (UTC) X-FDA: 83341594476.21.BF8D29B Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf13.hostedemail.com (Postfix) with ESMTP id 009BA20002 for ; Thu, 17 Apr 2025 00:06:36 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=fWHhj2CF; spf=pass (imf13.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848397; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=eeP+ASa848B04l6hN/xeJdd8j96iNql4Kt8P0gksKvQ=; b=yXu9KwCh2I3+ZiO6asKFzkWXMi2r4xtsMR1XlJj4NrWXIElX4eyjVsz2mOIdvW7xZXzuIO HsYrmWFOUFzwxJtDgwVSZet6VnDRYONK9UQ3/h/qaAhk33D+xNspds6YDoSeywn5vTC2RH 7Z/MCJr6YbGHJ7yP0wVyAejePvkzxTI= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=fWHhj2CF; spf=pass (imf13.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848397; a=rsa-sha256; cv=none; b=TW9iGkPDUR2miAsH4Sw/GOprSjPSATFDR+4CnxZTHbrGhgYr20B+TZSiNcMTbVaryhakBh 9ZJeklWEu/kggWeAaULgcA0nxHXubSae88+6H/OyAkHPNq3evEC6QynHDA3XgeNwKNtObr TsiRvYYWIH43gRXlhsK6jBHp/djLyy0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848396; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eeP+ASa848B04l6hN/xeJdd8j96iNql4Kt8P0gksKvQ=; b=fWHhj2CFLLN2ZzxbxDUAU0Jkoi8UpLSQtdDL4vqH9ejceQBhnBjqfZrV7ORE+amCPkgzt4 Uk12Me9hkS4D/INUL+IS6eWeklWTLl/udlL/ZF+xZ2JDEb8kmtI5+XPHYClJKaO0lupaOR cFcXDqqKSAiKJ8bT3aOeffwT7UTjVzA= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-190-aYi93XnTOHC_yoU0ZrvIyg-1; Wed, 16 Apr 2025 20:06:31 -0400 X-MC-Unique: aYi93XnTOHC_yoU0ZrvIyg-1 X-Mimecast-MFC-AGG-ID: aYi93XnTOHC_yoU0ZrvIyg_1744848387 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7A49D1800EC8; Thu, 17 Apr 2025 00:06:26 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 354A4180045B; Thu, 17 Apr 2025 00:06:18 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 03/12] khugepaged: generalize hugepage_vma_revalidate for mTHP support Date: Wed, 16 Apr 2025 18:02:29 -0600 Message-ID: <20250417000238.74567-4-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Stat-Signature: qjryw3ibd3zdr1smktksfkp14dcophnj X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 009BA20002 X-Rspam-User: X-HE-Tag: 1744848396-665723 X-HE-Meta: U2FsdGVkX19AJuaE6c6hA9HD+3JKWNSPCtfdF7Mty0J7TlcWXyDXvl/WQL4/RXYbsaKy8IqKSwKY5/S/x2OA5Yj2tOE+/AmOy0GyDfRIrWFADW9EPJACkIVScVbdGA1bI4m1h6xYr/uTdZKmnfAXRPnqAQVgZFyTzm4MQkgVTD1CcUOXcSvSoiBoO8veIoaBhW6AtdhfKP/G6vMAmcIaTLIVt0EznBkoamPxPSg2uY7uYEgqLvXM5LBETwHv+9Ksk7jo7N/v0lkxyRvl2zmFLWKMc4Th/gaxaZJfxWMPsSlSARZ1zFncuyWi1zdn/gMWAknnw1/eIdqIo/uY08GYm0kBYGXaSx3RmSvbRsOkl2ZSpmJZ1Zgc/07dSfBpMWZ6oHEhf9vrJhnnfTN2YGkapATd7Yk05kxXCsiGZ22L/4sBXw+R3GFa4cTsvZYNFs8TTPm5jLK99wYByBkIK+a69bsFIH5Kacloc/i+mMFIeqqtE6jsP6TN/9X56h49Wi1QQ6ysO9pqe/JPvIg5f0GtXVZG1JSvA4yzPLiDVs5yiM0nASSCRZUb39fgnjB//VCeOUXnn7GnB/yuD4wxGbMzN5xHEYQ+YqxwZ35pvXbhTuQJZPKmcrcXhZQKY/5z18S4yu+67p2O/emVrp43jB6RGh5jgPhGZS98TqPGByrJFYpa4SHLx/mSeXmL++TBqL9fIHsjU1g631gYK3Af3sL1AtYoaZzL2/O5uGL/eIblXjuV0zsy+YwXfFnfGrXru9L36S0IfBDWZA/PTE86vHEGbwZ5bkrldXn+UIv48TjEYHshJe4r7JsIv6QvgH9n3DbyAsOXqUeXITlFpOz+y2MqbVpGqcC0SScB5Ljjx9l5U3RdZmKPRwoQ9zu+Wr38y+pbeW/HXl5cfazbIKXcOaGxoAsBaR+k9aMhoRz5quoYbLxktY51ldcvg7PvOofSzy6vprt0SbVt2IR37MtNotN dxiXxV0q zQ4rwPd51CoQBuSv506PJ571IKQNW4Yo9hoIl+j7p1gQTL4d4xX8/QxNI9VnBQmHAQ8jzSmqwk9EhM3YtNdNUaq5h09rAIZbTezOLYSpQaCA8Lh/Er4f86nmJJrfdTATA1RL6siPfVSANsdht27PbawkRwmoAmiQhMiRau9d20qZ5B/zwuVwsuT79QQvSlU+ArfTesTQJUQKdGuodbeD18oTTAeVYAUjNNaMFlFGDBS7FV2mqhAEgBown51WKLS6ZGLQwgc43xxkIoH65tvEQCgmHNvlPRahckdZMSSAGyv8j1rVRiGGv3B3S4YU055FoqO2k0JAJSKsHEzQDbBLELXXq49PmDZ4vtKWH5U5zmGSeU2h47fCLY7QXef0rXqTdVvll4+gg6Yaca9ipYoSPt3KoGm6Le9sqDjkUPWKU3asO7sr4BrRokTVRAWSudTSz4ArVQiNGLa4mq+GfpF2khOO4L0YiPwP/jfg8YRNBMzmF/iQ28X0CAjcv6/4jm9O0D09b 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: For khugepaged to support different mTHP orders, we must generalize this function for arbitrary orders. No functional change in this patch. Co-developed-by: Dev Jain Signed-off-by: Dev Jain Signed-off-by: Nico Pache --- mm/khugepaged.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index b6281c04f1e5..54d7f43da69c 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -920,7 +920,7 @@ static int khugepaged_find_target_node(struct collapse_control *cc) static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address, bool expect_anon, struct vm_area_struct **vmap, - struct collapse_control *cc) + struct collapse_control *cc, int order) { struct vm_area_struct *vma; unsigned long tva_flags = cc->is_khugepaged ? TVA_ENFORCE_SYSFS : 0; @@ -932,9 +932,9 @@ static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address, if (!vma) return SCAN_VMA_NULL; - if (!thp_vma_suitable_order(vma, address, PMD_ORDER)) + if (!thp_vma_suitable_order(vma, address, order)) return SCAN_ADDRESS_RANGE; - if (!thp_vma_allowable_order(vma, vma->vm_flags, tva_flags, PMD_ORDER)) + if (!thp_vma_allowable_order(vma, vma->vm_flags, tva_flags, order)) return SCAN_VMA_CHECK; /* * Anon VMA expected, the address may be unmapped then @@ -1130,7 +1130,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, goto out_nolock; mmap_read_lock(mm); - result = hugepage_vma_revalidate(mm, address, true, &vma, cc); + result = hugepage_vma_revalidate(mm, address, true, &vma, cc, HPAGE_PMD_ORDER); if (result != SCAN_SUCCEED) { mmap_read_unlock(mm); goto out_nolock; @@ -1164,7 +1164,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, * mmap_lock. */ mmap_write_lock(mm); - result = hugepage_vma_revalidate(mm, address, true, &vma, cc); + result = hugepage_vma_revalidate(mm, address, true, &vma, cc, HPAGE_PMD_ORDER); if (result != SCAN_SUCCEED) goto out_up_write; /* check if the pmd is still valid */ @@ -2790,7 +2790,7 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, mmap_read_lock(mm); mmap_locked = true; result = hugepage_vma_revalidate(mm, addr, false, &vma, - cc); + cc, HPAGE_PMD_ORDER); if (result != SCAN_SUCCEED) { last_fail = result; goto out_nolock; From patchwork Thu Apr 17 00:02:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054626 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 E7463C369C7 for ; Thu, 17 Apr 2025 00:06:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9F1B5280135; Wed, 16 Apr 2025 20:06:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 97953280132; Wed, 16 Apr 2025 20:06:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7F30B280135; Wed, 16 Apr 2025 20:06:48 -0400 (EDT) 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 5F90E280132 for ; Wed, 16 Apr 2025 20:06:48 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id AEC22140FBE for ; Thu, 17 Apr 2025 00:06:48 +0000 (UTC) X-FDA: 83341594896.12.D450DB6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf26.hostedemail.com (Postfix) with ESMTP id E5C45140002 for ; Thu, 17 Apr 2025 00:06:46 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=iLucLXwS; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf26.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848407; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7xxSKiBkdmqkIjAIssZjRDTVvuT77x5sjso/cP0sO58=; b=i4bVc/OHW4wvVP/8KM6raR+e5vzTOfykVJzOwUWmkJw4mQmIfjrvvJKxd0luWkZkIrlRCg x58nby8XGRdMj2Z5z37MEYzv9tp6x8yDoLxipVfQYOncK6CnFN3rOaC5Uezea7d/D5KP2H ZCZ++WGiQKzpz9Wkmlr9tURRskj30Mk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848407; a=rsa-sha256; cv=none; b=WUnDJ/l5A7IAfiyohc47fs2aBNKuulRJxIjD+NpEsIGC/4htjDA9eRjg4XrMdr5RF6jvxB LPlYp9o6xr+8n97bkTae3CmsoidZp5GBnTcgBykCrM0cVQcHHKpFsqBSbhPoUipLjQFC41 uHBA15CqLlhmCopk/b1nwLVTzTgXlcI= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=iLucLXwS; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf26.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848406; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7xxSKiBkdmqkIjAIssZjRDTVvuT77x5sjso/cP0sO58=; b=iLucLXwS9x/8aSdF9JC9eKjB198rooKTdKuReeQLo2ZgePYqiY+/hNXf8kAm+UPlzKvDre lFiBNcpqtEJ74Zy8kD4/x95vmw1+EnBQOteEBhoy7U94fndmHJiP22R//r89ncaehxkF8D qn5Xx4nZOH1wQvNCQQwYJPXKFP6T0hg= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-350-EWqX6UDENnqmnvHn5DKWzw-1; Wed, 16 Apr 2025 20:06:41 -0400 X-MC-Unique: EWqX6UDENnqmnvHn5DKWzw-1 X-Mimecast-MFC-AGG-ID: EWqX6UDENnqmnvHn5DKWzw_1744848396 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3F8EA1800263; Thu, 17 Apr 2025 00:06:36 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EA8DA1800352; Thu, 17 Apr 2025 00:06:26 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 04/12] khugepaged: generalize alloc_charge_folio() Date: Wed, 16 Apr 2025 18:02:30 -0600 Message-ID: <20250417000238.74567-5-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: E5C45140002 X-Rspam-User: X-Stat-Signature: jsnan9qat57je6r9iozk4mnokdebzwmn X-HE-Tag: 1744848406-645212 X-HE-Meta: U2FsdGVkX1+Nep4WnhKADMNU1XPmWqScdCXtc98tkZ/HJ3cPkNcbDdkdiWzjeK5xaQ1jfnvpD/DyQMi3g122dlLQDLwuwRdRq10x+1INZ+qH8CrKKhEN95Z4OLtGiRrILc9+d2rkFPT/1K0mx1GNjeylOUTPKKc96fVPkMk12Nm2cdqD7m01CBCpe1+wfAsM3nZcidb7I9xDN3Lg7wsRKKkj0rkzVmNOEYKiHkUDIyoG6QD3JznLy3sZlSF4xslbydyvbsBTf56I48pM/aAkoQ9jCB678yitzTIc3FbZdxzYpgtAE48E+dvDrojoceupCVLGkWKSEgStk//v3HkrFhLkHPGo+PKq3vKPF/iuVV51314Cqa98ReAprc6oNu9bn0IgXe4/4VQ+rx7p0wuI46MM76HDCf1ohpuRre4WX3HzxLQm5qDDvth6x9rq/0MSUZ+Nyy06Rf/hNFDfIIsJ1nv0Lnm9Kq5oVqmXxoyd9Vx4+tRlW2Q6/hbgJCPEO6SOUhXsx6ptnXG8vmVsGyfHpYeWYqjPvUgTTRksGoTZQ/EBlna8hl6pddZipKm0A/qcCGpDDqL+b6avdgvR9pOJ66y65Z+/5Hwn8plE6EJ/wTB/KKkf9QJginnvIoDP9bVSeShJpQnESNUnThgYab8zA1Vo2lmDAILeC7lHF+ip1/eNtHRTQ3eLYEZO5i/HM1cLJ78xchkQTs9MziXJ6+/1xd9lImwD5PoCy0xU7Tefly/WuvCFb7sISgmI7p5/12oIIVdpM0DhINSsTtfG4EXhwMi4j3qI2vKkF8krYoyHG+y48tsDOO39hyvmYh9wad5pKNxrBNtPHAjcPHMnUD+SE/7f2/LWc+WpLt8r14mYGzLmH9DSbwdeR+3uAimpdhyeK1Ck6kE5soXJkmODjIKGEYop4cCQjMRl+k6eziT5giL0w3ywVorjWkuQt3mDzXGe5Y21CVfqihAREmJJ3iK kS61ifkl 19NDhSib4GB2ZYsak/mx6sunwc/SY0GM8GaWdoki+19Gsjhft3ALEufIXXcJPG/BE1rGnZafjHQuKnb12dvGoMfK8VHSovjpS47pS9K+Atsq2dUWrWkCX9OY56VrRNiO1lMHSQC8t18cvz5jOZB/2NRHfar6kds9yidimNXTiCZeFrCmY/8Ghd3OVwbR1noCUTs33dEqebwwBnuasIdbIW2acq5+kWNzMheA9yOxOSbOEtGFnbXGVc77rPsmXtxLI1hxhou+FHeGMQBH0ewSj36dDFN/Wdj+wFZH2O8sM2975zBsl7brl4V4tkJeav+sV9r8VV2KaUDOqS6NLMNWHTOHxPJ6yen/YcFu6B/4odWsqCimCxW6lDdDVlEzlfGra8ZkCKqQTCJMbD+z+4w7aQtSEpr81pcYdve4d3N1DXGeKsVjGDbD6tH3bilmu/jWqaWWMbFt14CQ315JmjcPqjS6aYs1PlYNIJlNxWX8GY+1PA89JwjvAAHexilLoPcA/vlHZ 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: From: Dev Jain Pass order to alloc_charge_folio() and update mTHP statistics. Co-developed-by: Nico Pache Signed-off-by: Nico Pache Signed-off-by: Dev Jain --- include/linux/huge_mm.h | 2 ++ mm/huge_memory.c | 4 ++++ mm/khugepaged.c | 17 +++++++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index f190998b2ebd..55b242335420 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -123,6 +123,8 @@ enum mthp_stat_item { MTHP_STAT_ANON_FAULT_ALLOC, MTHP_STAT_ANON_FAULT_FALLBACK, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE, + MTHP_STAT_COLLAPSE_ALLOC, + MTHP_STAT_COLLAPSE_ALLOC_FAILED, MTHP_STAT_ZSWPOUT, MTHP_STAT_SWPIN, MTHP_STAT_SWPIN_FALLBACK, diff --git a/mm/huge_memory.c b/mm/huge_memory.c index e97a97586478..7798c9284533 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -615,6 +615,8 @@ static struct kobj_attribute _name##_attr = __ATTR_RO(_name) DEFINE_MTHP_STAT_ATTR(anon_fault_alloc, MTHP_STAT_ANON_FAULT_ALLOC); DEFINE_MTHP_STAT_ATTR(anon_fault_fallback, MTHP_STAT_ANON_FAULT_FALLBACK); DEFINE_MTHP_STAT_ATTR(anon_fault_fallback_charge, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE); +DEFINE_MTHP_STAT_ATTR(collapse_alloc, MTHP_STAT_COLLAPSE_ALLOC); +DEFINE_MTHP_STAT_ATTR(collapse_alloc_failed, MTHP_STAT_COLLAPSE_ALLOC_FAILED); DEFINE_MTHP_STAT_ATTR(zswpout, MTHP_STAT_ZSWPOUT); DEFINE_MTHP_STAT_ATTR(swpin, MTHP_STAT_SWPIN); DEFINE_MTHP_STAT_ATTR(swpin_fallback, MTHP_STAT_SWPIN_FALLBACK); @@ -680,6 +682,8 @@ static struct attribute *any_stats_attrs[] = { #endif &split_attr.attr, &split_failed_attr.attr, + &collapse_alloc_attr.attr, + &collapse_alloc_failed_attr.attr, NULL, }; diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 54d7f43da69c..883e9a46359f 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1074,21 +1074,26 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, } static int alloc_charge_folio(struct folio **foliop, struct mm_struct *mm, - struct collapse_control *cc) + struct collapse_control *cc, u8 order) { gfp_t gfp = (cc->is_khugepaged ? alloc_hugepage_khugepaged_gfpmask() : GFP_TRANSHUGE); int node = khugepaged_find_target_node(cc); struct folio *folio; - folio = __folio_alloc(gfp, HPAGE_PMD_ORDER, node, &cc->alloc_nmask); + folio = __folio_alloc(gfp, order, node, &cc->alloc_nmask); if (!folio) { *foliop = NULL; - count_vm_event(THP_COLLAPSE_ALLOC_FAILED); + if (order == HPAGE_PMD_ORDER) + count_vm_event(THP_COLLAPSE_ALLOC_FAILED); + count_mthp_stat(order, MTHP_STAT_COLLAPSE_ALLOC_FAILED); return SCAN_ALLOC_HUGE_PAGE_FAIL; } - count_vm_event(THP_COLLAPSE_ALLOC); + if (order == HPAGE_PMD_ORDER) + count_vm_event(THP_COLLAPSE_ALLOC); + count_mthp_stat(order, MTHP_STAT_COLLAPSE_ALLOC); + if (unlikely(mem_cgroup_charge(folio, mm, gfp))) { folio_put(folio); *foliop = NULL; @@ -1125,7 +1130,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, */ mmap_read_unlock(mm); - result = alloc_charge_folio(&folio, mm, cc); + result = alloc_charge_folio(&folio, mm, cc, HPAGE_PMD_ORDER); if (result != SCAN_SUCCEED) goto out_nolock; @@ -1849,7 +1854,7 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr, VM_BUG_ON(!IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && !is_shmem); VM_BUG_ON(start & (HPAGE_PMD_NR - 1)); - result = alloc_charge_folio(&new_folio, mm, cc); + result = alloc_charge_folio(&new_folio, mm, cc, HPAGE_PMD_ORDER); if (result != SCAN_SUCCEED) goto out; From patchwork Thu Apr 17 00:02:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054627 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 01CEBC369BD for ; Thu, 17 Apr 2025 00:06:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9AF64280137; Wed, 16 Apr 2025 20:06:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 937AA280132; Wed, 16 Apr 2025 20:06:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 78B43280137; Wed, 16 Apr 2025 20:06:53 -0400 (EDT) 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 54AAB280132 for ; Wed, 16 Apr 2025 20:06:53 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E8242C0FC8 for ; Thu, 17 Apr 2025 00:06:53 +0000 (UTC) X-FDA: 83341595106.07.808E48A Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf27.hostedemail.com (Postfix) with ESMTP id 26B244000A for ; Thu, 17 Apr 2025 00:06:51 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=GvSIsseY; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848412; a=rsa-sha256; cv=none; b=k6oNGORFPEwn7nJRds+s+etg1qJ90vwbbzcenH7fakIgMaROPwg35CIKRKDxiJy4jb4kly cX9Bai8KPkGKe/3tYWGHaLS0uU1baH6n0TfQSp9zwa4Qmq+5QsNMYOrxh16bjVHmtrfqES cACK9bBpcWxyVk2XN2Ek4CrPKgjgukY= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=GvSIsseY; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848412; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IpV3zuxCR2eY4+V1cO1t7OWP+UORQhBI3uuugTMEKsQ=; b=U4TR0u32+WQVRJwGoxYIJgFdnLbwsas3BCtIeruQpHFR2jndqY5DwfcyItpxqJqwPX82GY 0D7odVzIO1HMenbCnlVhd1eFCWg+igfFbcynu8JB5DwrevjZPTBOkly7luXKdXcBWwRMtn UBPW9W9tnLKqxHjWbmzIeIhfFzt+tfM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848411; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IpV3zuxCR2eY4+V1cO1t7OWP+UORQhBI3uuugTMEKsQ=; b=GvSIsseYFu/2KaPCFzVuQifc3Zi+ezSrCnbhQW7VCxNC8XdHl2olfzyK5xNpvNt6nosVT5 evkV7Vo8b6DIlBTXv7XxrRfgLOFpnv4LfwiDQxCI7vo24XS81zxQ6YKvHVewb3c6vbCiBK 3UYJfXCNsGBEYLooYY1dzKNTF6GlBUU= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-664-O-JFbqzDPICFF8BYyTu_uQ-1; Wed, 16 Apr 2025 20:06:49 -0400 X-MC-Unique: O-JFbqzDPICFF8BYyTu_uQ-1 X-Mimecast-MFC-AGG-ID: O-JFbqzDPICFF8BYyTu_uQ_1744848404 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7E94D1800264; Thu, 17 Apr 2025 00:06:44 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 96FDD180045B; Thu, 17 Apr 2025 00:06:36 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 05/12] khugepaged: generalize __collapse_huge_page_* for mTHP support Date: Wed, 16 Apr 2025 18:02:31 -0600 Message-ID: <20250417000238.74567-6-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 26B244000A X-Stat-Signature: gtjuwyw1oj7f57mrytojhtqzkcnaay75 X-Rspam-User: X-HE-Tag: 1744848411-891952 X-HE-Meta: U2FsdGVkX1+CPQkIw/ufGIXXCKBxDcf7KAyHjmML5Oso8jlkjDi40fnRhCOWWrw1oKWDrsr1U4dTJI7UMQ7sl9mTKme91aQKkCls9YvDti6znp38UntqXKVPHzu7odolH17iEp4IEoAGAROoAjDAemZUBnh38vJwdl0d/BkzMvLtY+JWqQ7ASYf8fLxjSXY0ObrW2iDRzlYHI0MHckmr5fDmlMvH4zi4QNHarceEtTFVVnYqnAP9rts7a1H2YrtGuV6p70hCshepYfY7ApSqq328fQr0zZhNw2IkAjmz/c6FBTVLi0UHeM6aG0ZzgLOLP0rMssgIfpETw+w65yXfNhyzUPQtxQExSB6Y9rl9gM4EhYfqB5jxlHI1FIsZ9fEAJs86FhdXTyUSz62VAOKOvz0ILWn5y9c/fairiFnEhNgzYsfNqkHWxWXgI4E34MiMhmf4IGXFVu0YmeG/LvVTDpUkBSHXXuAK92V8zOLwRQu+64AX/vDjMct3FWy0vs4CAIS1iSmzSKuwteBFGvbCWwxnWDI2iTJViu5dW5aqS8RQ4rjqzO3qtgb7ZK2zOxRGbwSPN+LVncxNvDv6wCMcYo4jbfYA7J8PsiVkBcFf07uudDWeAoTkWZ36lg+LIBTsh5gvpCwBY3jQ3BaCdE4931TVteTBjNhm+KCalwhTOXbCIRJAIR2ncUBTMED2Miw0OH5Rnk+hhQQbKnW4eq+y88leKrzu9uWpGt85UxUvTg6TxNeqpN9F8hvr5oGIXyAB431CgoKV9JLOS/HDemlhQWFHfRsKJC6TY9JYFWzKT1lMp7HmXPFfdNVlH7+z/MEN+bBxEdeUCrJU+RmVZq0b8ZS8nqbuvVBRAM0azMRukX5H4se1hm53O2ZcmR3CvslhuAg5CVutoKG094gs5lnCq++N0+LYkRztOKRgfsuDc4pzG4/iC1oPv+v49b5MbQH5sE7rsFgE2rf/IqygFNJ 93fcmIxH mlWWtlsrMtCPsfvaeg8ZJ8EYA2yLvWvqkrWa82JAO22O8OkvmejNQSA5FLpAIekH2bWsEsbmIBVjrjzoICMoTIo2vK7ef6g8D0ysWPLQIiKvbF0rcVfIpIGMfm1zCCKiuJxgxRMT5orRsAT+TwAEZeo0BXNlmABGXbumNdI6YWYt70hxV9urqALYv+1xGUdqNr/xCKXmNagxVlJRQ+GMRxm6qiJ6/ESYDUzbTNZPdaKvXEAgJKEPL0o3CeRdByN/Eadnf4c+a52sEIBiaWMo3uWKb7LJVspxa1lZVQxGG4G+e8jmT56fIzv5S48astEcF+lNzWXP0CDb4GuctbYK6FhOlUyQu62RgXR5EPzI1qJnFgeTx1tl+z4EQFa3u/rpzsvPBDd4T7yNqPTETMNcydyBOoY0Dg2kQ/HwKUBIDnGSUrIRgdzUHZwm/fqK6z4ZmBKsBG+hyZkxg4uuR8VpfvFR7UCoIlMNF0Cd2lRSHXd8dL5uaIVpM8+TuTWSyi6MlHwEL 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: generalize the order of the __collapse_huge_page_* functions to support future mTHP collapse. mTHP collapse can suffer from incosistant behavior, and memory waste "creep". disable swapin and shared support for mTHP collapse. No functional changes in this patch. Co-developed-by: Dev Jain Signed-off-by: Dev Jain Signed-off-by: Nico Pache --- mm/khugepaged.c | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 883e9a46359f..5e9272ab82da 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -565,15 +565,17 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, unsigned long address, pte_t *pte, struct collapse_control *cc, - struct list_head *compound_pagelist) + struct list_head *compound_pagelist, + u8 order) { struct page *page = NULL; struct folio *folio = NULL; pte_t *_pte; int none_or_zero = 0, shared = 0, result = SCAN_FAIL, referenced = 0; bool writable = false; + int scaled_none = khugepaged_max_ptes_none >> (HPAGE_PMD_ORDER - order); - for (_pte = pte; _pte < pte + HPAGE_PMD_NR; + for (_pte = pte; _pte < pte + (1 << order); _pte++, address += PAGE_SIZE) { pte_t pteval = ptep_get(_pte); if (pte_none(pteval) || (pte_present(pteval) && @@ -581,7 +583,7 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, ++none_or_zero; if (!userfaultfd_armed(vma) && (!cc->is_khugepaged || - none_or_zero <= khugepaged_max_ptes_none)) { + none_or_zero <= scaled_none)) { continue; } else { result = SCAN_EXCEED_NONE_PTE; @@ -609,8 +611,8 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, /* See hpage_collapse_scan_pmd(). */ if (folio_maybe_mapped_shared(folio)) { ++shared; - if (cc->is_khugepaged && - shared > khugepaged_max_ptes_shared) { + if (order != HPAGE_PMD_ORDER || (cc->is_khugepaged && + shared > khugepaged_max_ptes_shared)) { result = SCAN_EXCEED_SHARED_PTE; count_vm_event(THP_SCAN_EXCEED_SHARED_PTE); goto out; @@ -711,13 +713,14 @@ static void __collapse_huge_page_copy_succeeded(pte_t *pte, struct vm_area_struct *vma, unsigned long address, spinlock_t *ptl, - struct list_head *compound_pagelist) + struct list_head *compound_pagelist, + u8 order) { struct folio *src, *tmp; pte_t *_pte; pte_t pteval; - for (_pte = pte; _pte < pte + HPAGE_PMD_NR; + for (_pte = pte; _pte < pte + (1 << order); _pte++, address += PAGE_SIZE) { pteval = ptep_get(_pte); if (pte_none(pteval) || is_zero_pfn(pte_pfn(pteval))) { @@ -764,7 +767,8 @@ static void __collapse_huge_page_copy_failed(pte_t *pte, pmd_t *pmd, pmd_t orig_pmd, struct vm_area_struct *vma, - struct list_head *compound_pagelist) + struct list_head *compound_pagelist, + u8 order) { spinlock_t *pmd_ptl; @@ -781,7 +785,7 @@ static void __collapse_huge_page_copy_failed(pte_t *pte, * Release both raw and compound pages isolated * in __collapse_huge_page_isolate. */ - release_pte_pages(pte, pte + HPAGE_PMD_NR, compound_pagelist); + release_pte_pages(pte, pte + (1 << order), compound_pagelist); } /* @@ -802,7 +806,7 @@ static void __collapse_huge_page_copy_failed(pte_t *pte, static int __collapse_huge_page_copy(pte_t *pte, struct folio *folio, pmd_t *pmd, pmd_t orig_pmd, struct vm_area_struct *vma, unsigned long address, spinlock_t *ptl, - struct list_head *compound_pagelist) + struct list_head *compound_pagelist, u8 order) { unsigned int i; int result = SCAN_SUCCEED; @@ -810,7 +814,7 @@ static int __collapse_huge_page_copy(pte_t *pte, struct folio *folio, /* * Copying pages' contents is subject to memory poison at any iteration. */ - for (i = 0; i < HPAGE_PMD_NR; i++) { + for (i = 0; i < (1 << order); i++) { pte_t pteval = ptep_get(pte + i); struct page *page = folio_page(folio, i); unsigned long src_addr = address + i * PAGE_SIZE; @@ -829,10 +833,10 @@ static int __collapse_huge_page_copy(pte_t *pte, struct folio *folio, if (likely(result == SCAN_SUCCEED)) __collapse_huge_page_copy_succeeded(pte, vma, address, ptl, - compound_pagelist); + compound_pagelist, order); else __collapse_huge_page_copy_failed(pte, pmd, orig_pmd, vma, - compound_pagelist); + compound_pagelist, order); return result; } @@ -1000,11 +1004,11 @@ static int check_pmd_still_valid(struct mm_struct *mm, static int __collapse_huge_page_swapin(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long haddr, pmd_t *pmd, - int referenced) + int referenced, u8 order) { int swapped_in = 0; vm_fault_t ret = 0; - unsigned long address, end = haddr + (HPAGE_PMD_NR * PAGE_SIZE); + unsigned long address, end = haddr + (PAGE_SIZE << order); int result; pte_t *pte = NULL; spinlock_t *ptl; @@ -1035,6 +1039,12 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, if (!is_swap_pte(vmf.orig_pte)) continue; + /* Dont swapin for mTHP collapse */ + if (order != HPAGE_PMD_ORDER) { + result = SCAN_EXCEED_SWAP_PTE; + goto out; + } + vmf.pte = pte; vmf.ptl = ptl; ret = do_swap_page(&vmf); @@ -1154,7 +1164,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, * that case. Continuing to collapse causes inconsistency. */ result = __collapse_huge_page_swapin(mm, vma, address, pmd, - referenced); + referenced, HPAGE_PMD_ORDER); if (result != SCAN_SUCCEED) goto out_nolock; } @@ -1201,7 +1211,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, pte = pte_offset_map_lock(mm, &_pmd, address, &pte_ptl); if (pte) { result = __collapse_huge_page_isolate(vma, address, pte, cc, - &compound_pagelist); + &compound_pagelist, HPAGE_PMD_ORDER); spin_unlock(pte_ptl); } else { result = SCAN_PMD_NULL; @@ -1231,7 +1241,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, result = __collapse_huge_page_copy(pte, folio, pmd, _pmd, vma, address, pte_ptl, - &compound_pagelist); + &compound_pagelist, HPAGE_PMD_ORDER); pte_unmap(pte); if (unlikely(result != SCAN_SUCCEED)) goto out_up_write; From patchwork Thu Apr 17 00:02:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054628 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 C43A8C369C2 for ; Thu, 17 Apr 2025 00:07:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 760E728014D; Wed, 16 Apr 2025 20:07:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E6ED28014B; Wed, 16 Apr 2025 20:07:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5617428014D; Wed, 16 Apr 2025 20:07:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 34A7A28014B for ; Wed, 16 Apr 2025 20:07:06 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 8D9491605BA for ; Thu, 17 Apr 2025 00:07:06 +0000 (UTC) X-FDA: 83341595652.16.3C57DA5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf20.hostedemail.com (Postfix) with ESMTP id C65D01C0006 for ; Thu, 17 Apr 2025 00:07:04 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SatzTB3H; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf20.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848424; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VDvWsGWeORIq3FSYTdeKCOhlS6o9LDg3hAe/f5gBDVY=; b=uXNW4A6PV03HKReTnz7EP0qSSuUG6RlOZeOQSlaUidzOB70+gR5Gbv3LWW5tGeUQbJ+0fB 9NlsJ/u0qDylIJGjEdutZuh0bredgxxK8nVmn4csAnp43GJbhlxq0JlnwZBsQmi9dBOXO1 GBIBfrSlpPL8iW56QvFvFftGQqigZiM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848424; a=rsa-sha256; cv=none; b=X9xAZejeV6Ygc1PK+qrB+XPHr0ysDqcMkxGUHK/hbXBJEInG5r4AliGnDFkqUDiH/fHjq2 Ek1jeaxY9c2NQXRWc8yPIGNNhoLxN0gt8NGIJJBcD6wrqAE+EE3StRTeMJMc5l7ytwRMPN nGiRoXoLvARJZLYXjDSG6lOKle+1NOw= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SatzTB3H; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf20.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848424; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VDvWsGWeORIq3FSYTdeKCOhlS6o9LDg3hAe/f5gBDVY=; b=SatzTB3HZxn3Z78ctAnuunj1IlWBEb5hsku+AJHSoYe/T07Q/kcHP4aeFv+yWlYkBpkPNg FFhaqR8VEwxg6Ux8BMpcmlNqk0yFNQtxstfE6U8hk+9VuOq0z1kVrcW52j6/UykrRRcU9w 4/OcfEigFeGj1EUwVVdEjy5tSVwtIFA= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-524-p4PD8IGnPfGM71B3NKFMdQ-1; Wed, 16 Apr 2025 20:06:58 -0400 X-MC-Unique: p4PD8IGnPfGM71B3NKFMdQ-1 X-Mimecast-MFC-AGG-ID: p4PD8IGnPfGM71B3NKFMdQ_1744848413 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8270A18001E0; Thu, 17 Apr 2025 00:06:53 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D0F151800352; Thu, 17 Apr 2025 00:06:44 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 06/12] khugepaged: introduce khugepaged_scan_bitmap for mTHP support Date: Wed, 16 Apr 2025 18:02:32 -0600 Message-ID: <20250417000238.74567-7-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: C65D01C0006 X-Rspam-User: X-Stat-Signature: y7nrq1y85kc65iohbnp363etshthtjzy X-HE-Tag: 1744848424-935222 X-HE-Meta: U2FsdGVkX19CdrIoEJ8jwtCxm8CNu4tmFY8Y2YQU55ZUhSSuK7NHOMyrGVDOTI8W2Uc8ka4Vd9spXdV7Jtgxjcc7PvIxfjXIUJOqnQdbD56PImRfldGCXJlyd4s2V5B35kMffdjBa4Sj/9Nj4nNx96xye9o94ljECIDGZTp/40F8GEOHcyhG9HIhtWp7KdYX61X/26pMkhIisRYDtJiArbRB1QUrh9dfepnZO96PKySfI+p+2yW91ccnkgzviPJw1tdaBEjkAPmfpOS5Ssy8XlGWCwQ3Ky62R6KZaJC3RDSnC3zhrAF5Tq/XHqgTvEyW5n41YFfRQ4MIzm1+yRF9rGcpuR514xh2UlCGQWwO2W5lnZEgph9C0i5zQb05RtjGSESn/eOI3XqrFZVb8d4o6Jr9Sq/ZGcyog5NM2j/B47n4dvKu35+PLBFjRFlgoiIWwAT4dy8akf4OJWKbCozRSoHFzSdUkNl1jfz7c0BAwakNjvc/Pgwz7lKkN5fPaVdcNJz3/q2BguSCRIoAP33vqiIdY+FbC7X2Y+G6QWAnerGOBG+HFzB/rV2dch0sjQguGAfktHsaVna3kUDRT0Bd70EDdJpvTqYD7U4D1xCzbS3bcf5f05zi8J47ZYmLEo7HabsmROqN6b3Sn61SJMU/O9BAI0+7NGpf662SiH2zxotX13M6UsnFuBwhd1hdRdWn+k1jKzJDjJZJZoe67XKZX1BNoVAafhw66hvvaRK4SawzZbx5//oNrb7Yi8alWjIa57cw1ch9uYBpiAPYL11Behgv8YMCrM4aT0SUPW1qQgq5f6XaPHNvk5ScajJagt7r/oRlDVsokYqcoqg/od2kUBh2CPUssGJ2Q46xs2LJFUanSD+bga1OCEbEf7EBN+HTcUYc5bC3uGhllgJZRJhgBpmU9X0tYk3hMgWGG5rSgwwsZTxxiP6oai6W6k57whU7vrwZ0U5A4yZTuZecEB0 OnOVATjH 6CWGxdB5vRg3CFE5NdzL/Kf1T1ALcKZEgGhOVpC1TzNgKGKQ1mctwf7eRO81BxcKzhOGOBew1gHmscx8jC+Lr+vFVC+PTqs7UDqtFNx5mNnBQOXy5/wy+lZxDVLRyzhCHmVFFSy8U5cX058wciGgnmOzCClian77JEejoIfRyYZRMAHaNnKC+ThqwMtIKEWWePFaVSDjPOce1lgxSjBHGqYHNyIcjW8FX03B1clxNuEYOGQ3wciAdQmJJvQw17MZRgLcJwbSzVAvgE/2jWjF2Td1+XoV//5G8dL8cjI2xCYviJpZzUC1piDMsWytZVRf2MDJYFYwg91eQYY87FzPA3YJCAKqMX8/dGFoeOW+ETdvhQoovFNAgtXMsJpt37eHuTY3LnGRGqgTDtA9AWH4dqtmYAUugscSE2vLodJw4PNPl9FlRgh4u7yeEgQAXmWKX4gs6L9ZfXwUgfqo= 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: khugepaged scans PMD ranges for potential collapse to a hugepage. To add mTHP support we use this scan to instead record chunks of utilized sections of the PMD. khugepaged_scan_bitmap uses a stack struct to recursively scan a bitmap that represents chunks of utilized regions. We can then determine what mTHP size fits best and in the following patch, we set this bitmap while scanning the PMD. max_ptes_none is used as a scale to determine how "full" an order must be before being considered for collapse. When attempting to collapse an order that has its order set to "always" lets always collapse to that order in a greedy manner without considering the number of bits set. Signed-off-by: Nico Pache --- include/linux/khugepaged.h | 4 ++ mm/khugepaged.c | 94 ++++++++++++++++++++++++++++++++++---- 2 files changed, 89 insertions(+), 9 deletions(-) diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h index 1f46046080f5..18fe6eb5051d 100644 --- a/include/linux/khugepaged.h +++ b/include/linux/khugepaged.h @@ -1,6 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_KHUGEPAGED_H #define _LINUX_KHUGEPAGED_H +#define KHUGEPAGED_MIN_MTHP_ORDER 2 +#define KHUGEPAGED_MIN_MTHP_NR (1<mthp_bitmap_stack[++top] = (struct scan_bit_state) + { HPAGE_PMD_ORDER - KHUGEPAGED_MIN_MTHP_ORDER, 0 }; + + while (top >= 0) { + state = cc->mthp_bitmap_stack[top--]; + order = state.order + KHUGEPAGED_MIN_MTHP_ORDER; + offset = state.offset; + num_chunks = 1 << (state.order); + // Skip mTHP orders that are not enabled + if (!test_bit(order, &enabled_orders)) + goto next; + + // copy the relavant section to a new bitmap + bitmap_shift_right(cc->mthp_bitmap_temp, cc->mthp_bitmap, offset, + MTHP_BITMAP_SIZE); + + bits_set = bitmap_weight(cc->mthp_bitmap_temp, num_chunks); + threshold_bits = (HPAGE_PMD_NR - khugepaged_max_ptes_none - 1) + >> (HPAGE_PMD_ORDER - state.order); + + //Check if the region is "almost full" based on the threshold + if (bits_set > threshold_bits || is_pmd_only + || test_bit(order, &huge_anon_orders_always)) { + ret = collapse_huge_page(mm, address, referenced, unmapped, cc, + mmap_locked, order, offset * KHUGEPAGED_MIN_MTHP_NR); + if (ret == SCAN_SUCCEED) { + collapsed += (1 << order); + continue; + } + } + +next: + if (state.order > 0) { + next_order = state.order - 1; + mid_offset = offset + (num_chunks / 2); + cc->mthp_bitmap_stack[++top] = (struct scan_bit_state) + { next_order, mid_offset }; + cc->mthp_bitmap_stack[++top] = (struct scan_bit_state) + { next_order, offset }; + } + } + return collapsed; +} + static int khugepaged_scan_pmd(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, bool *mmap_locked, @@ -1445,9 +1523,7 @@ static int khugepaged_scan_pmd(struct mm_struct *mm, pte_unmap_unlock(pte, ptl); if (result == SCAN_SUCCEED) { result = collapse_huge_page(mm, address, referenced, - unmapped, cc); - /* collapse_huge_page will return with the mmap_lock released */ - *mmap_locked = false; + unmapped, cc, mmap_locked, HPAGE_PMD_ORDER, 0); } out: trace_mm_khugepaged_scan_pmd(mm, &folio->page, writable, referenced, From patchwork Thu Apr 17 00:02:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054644 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 9AB1EC369BD for ; Thu, 17 Apr 2025 00:07:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 37CA928014E; Wed, 16 Apr 2025 20:07:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 32AF228014B; Wed, 16 Apr 2025 20:07:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F1EB28014E; Wed, 16 Apr 2025 20:07:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id F361028014B for ; Wed, 16 Apr 2025 20:07:13 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id A07F4BBAD4 for ; Thu, 17 Apr 2025 00:07:14 +0000 (UTC) X-FDA: 83341595988.02.9CBBA83 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf28.hostedemail.com (Postfix) with ESMTP id CE0F3C0008 for ; Thu, 17 Apr 2025 00:07:12 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=daeqGliH; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf28.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848433; a=rsa-sha256; cv=none; b=COvjMnUpMDCXDALDtrGUkBjSXh/QdaL9Nlk/5YbjkTzHKjEn3qPjN5B6j5vT7FxDysLXIa sZwwpbk0Vu2YmEOWkW8bahUIjDL4/bSdzEeCPP8qlZWtdXWdau8zm1ZIJxz8lE2p8CTHW1 TvrQUiKX1/sqcvx/3IM8f1f0K9u9KtM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848432; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Rsu+kW9XQvd8cb4ogIt+3inIZ/x/N8vglI6dddRaN8M=; b=YLUdP4QeC0aioye6qB4+b3egRN5kOzQtx6UpMPwqDJVSmTj5DNqRR/UFY026uYWGhAp3jm FdS5sMZN+JakGmewWInPXEzj9BOxWiCdvALMGKsH/ZkpYLLuPcM0DOF3eeYRj3PRza25eu ILCY5GaWVfNWd4R7C4muCJTNeY/QyRw= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=daeqGliH; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf28.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848432; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Rsu+kW9XQvd8cb4ogIt+3inIZ/x/N8vglI6dddRaN8M=; b=daeqGliH3d1eXqoY/SVQfZ2aAVWHBs/Si6ZEE5yzjFAg5r7h/YUoZVjyVzprjJKRTNa+Ks xLgiAQ7QNF/ZpqqRP2SvQ9ZibDorh90P6bxknsxWqAYYrPLa28NaWy25Oc6wf9tabBXVE+ ln4+yECPPIeVMFshqprE3nrCxhFEKl4= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-537-O2DxmUD9M1aq1EuL9WBcpA-1; Wed, 16 Apr 2025 20:07:07 -0400 X-MC-Unique: O2DxmUD9M1aq1EuL9WBcpA-1 X-Mimecast-MFC-AGG-ID: O2DxmUD9M1aq1EuL9WBcpA_1744848422 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2DCD2180034A; Thu, 17 Apr 2025 00:07:02 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3D3D1180176A; Thu, 17 Apr 2025 00:06:54 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 07/12] khugepaged: add mTHP support Date: Wed, 16 Apr 2025 18:02:33 -0600 Message-ID: <20250417000238.74567-8-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: CE0F3C0008 X-Stat-Signature: 3kooa9ff5jy9qgm7iyfktopaadzcj37h X-Rspam-User: X-HE-Tag: 1744848432-175647 X-HE-Meta: U2FsdGVkX1/Q0u8flCeSOpsP+dcopfSBpe+T/KhvjPqxsWBsXdvDHHEqMOokGWEkZbFyWY2eBjgaGWHSvVpkQN//zSJpXNihlep/n0aMxCz7mixyViBkUwlcwZg+6J3QQWEdSDKrCfBHUC4NHEvbBUHmoh+yGJ1sPwCObJME0BleYdRX8KrIMTdppgoJEZEtSd9KuKDXV95cRTdtod3vqR8pJW1jZWsyCfRzPIAt5Qv/dFwuCJhLokN2KFPk8e/Sli8t9F2ubnxrp5rsZbgg7F+4pZ67NR8yL0xMopEvFdJy/Knyv9P1VGznTApQYyu11NOzuJU0z3yQZ1IYBr3QkNvdqu9BnGY3pYqg1dCHaWxmo0Pm7h9bsvdwj+udui8xIBvYIRvwu4wnFgP8kkxMiQpMIWWOg1z5XnDjZGj3dGLc78VOTV4ipXK4LlKTBlW6w/v34jLB2D6XxOP1PACYvD3da3xQzkUdrwBZCNgcbhfcu1voBOF/7eSMc76ddWMYjdmrlgExPa5pGQUKyEJBGjZjn6RtFCquWRGoRJVnWKnsC2xx6xYck/eMBgThIVwgzCy/dTY/D0ypvFWSEKpGH5exq6csdgvu2oGlRW/7jgEepjXbeeQLXicUZFAOIuK4EdA7aAQoofmazDl/4PKGtVk5HdwP+9ABfnUwy2HdjbwPusLWJpx+EtgCMyzyJEh93UJJqEvJz3Z90OipAATrs2Mozo6BYnn55Lg8Othv4EsOSZUtvl0RGrjLwV3MkREvGvDaAh/l7uCIVSYb9hgR7dhHQ4/pYniWnyiFkWi/lcxO7Xw3K8JRGrJZtfTbdxE8P6xavI4f4tnAJpIR8yIFYsraz44ZZk+8wXD41HN649+LehSEW2E+ogfAaqFSAqj2DNSXDlnqiW9dF8JUMG28OQhNJ++YJuUInYwjMWWqnv6NT3FIG0pyE6aWmW360i/oO0/TK4k2d9KuYpBY0N7 hLYRMfJe +C81f7ZiLumF/QMCTUNOMEj5I98L9yz7FHOoyMR7P8Hrx1qiJV2OksW4id/gMKBlUmEDXwrn0mMj/Mai6o5rju4ttc77HF4YflhE7KrfbaEy3qbwALIFm6MdgOpoWTFsXjuNsjyAvRDBcp3ri0dk/6yQbI39zdC9PFF49y+247uD/dyQI/UnqFCrOLmOUMqM/fU5BtTbvSmYk5ru+Zyqrb4hvAxn8XLAspDXc7q1a3sWfrOlCRml9VYKAqD/hv24QkjjYMJS0TywKjRmYZIiHt9hxL7C6/p6wmLant8H8k4r/hjV0F9txbLu4VMo/3hqu3NS7NlTjzkfIz1bH4fPeT//lu9dCVoTHDU4PZ4JYUNRvYBGNBTZZbuXYUzopl07+xDEvf0xBLy66lpJQ97qHOYyvKQ== 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: Introduce the ability for khugepaged to collapse to different mTHP sizes. While scanning PMD ranges for potential collapse candidates, keep track of pages in KHUGEPAGED_MIN_MTHP_ORDER chunks via a bitmap. Each bit represents a utilized region of order KHUGEPAGED_MIN_MTHP_ORDER ptes. If mTHPs are enabled we remove the restriction of max_ptes_none during the scan phase so we dont bailout early and miss potential mTHP candidates. After the scan is complete we will perform binary recursion on the bitmap to determine which mTHP size would be most efficient to collapse to. max_ptes_none will be scaled by the attempted collapse order to determine how full a THP must be to be eligible. If a mTHP collapse is attempted, but contains swapped out, or shared pages, we dont perform the collapse. Signed-off-by: Nico Pache --- mm/khugepaged.c | 122 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 88 insertions(+), 34 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 83230e9cdf3a..ece39fd71fe6 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1136,13 +1136,14 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, { LIST_HEAD(compound_pagelist); pmd_t *pmd, _pmd; - pte_t *pte; + pte_t *pte, mthp_pte; pgtable_t pgtable; struct folio *folio; spinlock_t *pmd_ptl, *pte_ptl; int result = SCAN_FAIL; struct vm_area_struct *vma; struct mmu_notifier_range range; + unsigned long _address = address + offset * PAGE_SIZE; VM_BUG_ON(address & ~HPAGE_PMD_MASK); @@ -1158,12 +1159,13 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, *mmap_locked = false; } - result = alloc_charge_folio(&folio, mm, cc, HPAGE_PMD_ORDER); + result = alloc_charge_folio(&folio, mm, cc, order); if (result != SCAN_SUCCEED) goto out_nolock; mmap_read_lock(mm); - result = hugepage_vma_revalidate(mm, address, true, &vma, cc, HPAGE_PMD_ORDER); + *mmap_locked = true; + result = hugepage_vma_revalidate(mm, address, true, &vma, cc, order); if (result != SCAN_SUCCEED) { mmap_read_unlock(mm); goto out_nolock; @@ -1181,13 +1183,14 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, * released when it fails. So we jump out_nolock directly in * that case. Continuing to collapse causes inconsistency. */ - result = __collapse_huge_page_swapin(mm, vma, address, pmd, - referenced, HPAGE_PMD_ORDER); + result = __collapse_huge_page_swapin(mm, vma, _address, pmd, + referenced, order); if (result != SCAN_SUCCEED) goto out_nolock; } mmap_read_unlock(mm); + *mmap_locked = false; /* * Prevent all access to pagetables with the exception of * gup_fast later handled by the ptep_clear_flush and the VM @@ -1197,7 +1200,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, * mmap_lock. */ mmap_write_lock(mm); - result = hugepage_vma_revalidate(mm, address, true, &vma, cc, HPAGE_PMD_ORDER); + result = hugepage_vma_revalidate(mm, address, true, &vma, cc, order); if (result != SCAN_SUCCEED) goto out_up_write; /* check if the pmd is still valid */ @@ -1208,11 +1211,12 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, vma_start_write(vma); anon_vma_lock_write(vma->anon_vma); - mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, address, - address + HPAGE_PMD_SIZE); + mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, _address, + _address + (PAGE_SIZE << order)); mmu_notifier_invalidate_range_start(&range); pmd_ptl = pmd_lock(mm, pmd); /* probably unnecessary */ + /* * This removes any huge TLB entry from the CPU so we won't allow * huge and small TLB entries for the same virtual address to @@ -1226,10 +1230,10 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, mmu_notifier_invalidate_range_end(&range); tlb_remove_table_sync_one(); - pte = pte_offset_map_lock(mm, &_pmd, address, &pte_ptl); + pte = pte_offset_map_lock(mm, &_pmd, _address, &pte_ptl); if (pte) { - result = __collapse_huge_page_isolate(vma, address, pte, cc, - &compound_pagelist, HPAGE_PMD_ORDER); + result = __collapse_huge_page_isolate(vma, _address, pte, cc, + &compound_pagelist, order); spin_unlock(pte_ptl); } else { result = SCAN_PMD_NULL; @@ -1258,8 +1262,8 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, anon_vma_unlock_write(vma->anon_vma); result = __collapse_huge_page_copy(pte, folio, pmd, _pmd, - vma, address, pte_ptl, - &compound_pagelist, HPAGE_PMD_ORDER); + vma, _address, pte_ptl, + &compound_pagelist, order); pte_unmap(pte); if (unlikely(result != SCAN_SUCCEED)) goto out_up_write; @@ -1270,20 +1274,35 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, * write. */ __folio_mark_uptodate(folio); - pgtable = pmd_pgtable(_pmd); - - _pmd = folio_mk_pmd(folio, vma->vm_page_prot); - _pmd = maybe_pmd_mkwrite(pmd_mkdirty(_pmd), vma); - - spin_lock(pmd_ptl); - BUG_ON(!pmd_none(*pmd)); - folio_add_new_anon_rmap(folio, vma, address, RMAP_EXCLUSIVE); - folio_add_lru_vma(folio, vma); - pgtable_trans_huge_deposit(mm, pmd, pgtable); - set_pmd_at(mm, address, pmd, _pmd); - update_mmu_cache_pmd(vma, address, pmd); - deferred_split_folio(folio, false); - spin_unlock(pmd_ptl); + if (order == HPAGE_PMD_ORDER) { + pgtable = pmd_pgtable(_pmd); + _pmd = folio_mk_pmd(folio, vma->vm_page_prot); + _pmd = maybe_pmd_mkwrite(pmd_mkdirty(_pmd), vma); + + spin_lock(pmd_ptl); + BUG_ON(!pmd_none(*pmd)); + folio_add_new_anon_rmap(folio, vma, _address, RMAP_EXCLUSIVE); + folio_add_lru_vma(folio, vma); + pgtable_trans_huge_deposit(mm, pmd, pgtable); + set_pmd_at(mm, address, pmd, _pmd); + update_mmu_cache_pmd(vma, address, pmd); + deferred_split_folio(folio, false); + spin_unlock(pmd_ptl); + } else { //mTHP + mthp_pte = mk_pte(&folio->page, vma->vm_page_prot); + mthp_pte = maybe_mkwrite(pte_mkdirty(mthp_pte), vma); + + spin_lock(pmd_ptl); + folio_ref_add(folio, (1 << order) - 1); + folio_add_new_anon_rmap(folio, vma, _address, RMAP_EXCLUSIVE); + folio_add_lru_vma(folio, vma); + set_ptes(vma->vm_mm, _address, pte, mthp_pte, (1 << order)); + update_mmu_cache_range(NULL, vma, _address, pte, (1 << order)); + + smp_wmb(); /* make pte visible before pmd */ + pmd_populate(mm, pmd, pmd_pgtable(_pmd)); + spin_unlock(pmd_ptl); + } folio = NULL; @@ -1364,31 +1383,58 @@ static int khugepaged_scan_pmd(struct mm_struct *mm, { pmd_t *pmd; pte_t *pte, *_pte; + int i; int result = SCAN_FAIL, referenced = 0; int none_or_zero = 0, shared = 0; struct page *page = NULL; struct folio *folio = NULL; unsigned long _address; + unsigned long enabled_orders; spinlock_t *ptl; int node = NUMA_NO_NODE, unmapped = 0; + bool is_pmd_only; bool writable = false; - + int chunk_none_count = 0; + int scaled_none = khugepaged_max_ptes_none >> (HPAGE_PMD_ORDER - KHUGEPAGED_MIN_MTHP_ORDER); + unsigned long tva_flags = cc->is_khugepaged ? TVA_ENFORCE_SYSFS : 0; VM_BUG_ON(address & ~HPAGE_PMD_MASK); result = find_pmd_or_thp_or_none(mm, address, &pmd); if (result != SCAN_SUCCEED) goto out; + bitmap_zero(cc->mthp_bitmap, MAX_MTHP_BITMAP_SIZE); + bitmap_zero(cc->mthp_bitmap_temp, MAX_MTHP_BITMAP_SIZE); memset(cc->node_load, 0, sizeof(cc->node_load)); nodes_clear(cc->alloc_nmask); + + enabled_orders = thp_vma_allowable_orders(vma, vma->vm_flags, + tva_flags, THP_ORDERS_ALL_ANON); + + is_pmd_only = (enabled_orders == (1 << HPAGE_PMD_ORDER)); + pte = pte_offset_map_lock(mm, pmd, address, &ptl); if (!pte) { result = SCAN_PMD_NULL; goto out; } - for (_address = address, _pte = pte; _pte < pte + HPAGE_PMD_NR; - _pte++, _address += PAGE_SIZE) { + for (i = 0; i < HPAGE_PMD_NR; i++) { + /* + * we are reading in KHUGEPAGED_MIN_MTHP_NR page chunks. if + * there are pages in this chunk keep track of it in the bitmap + * for mTHP collapsing. + */ + if (i % KHUGEPAGED_MIN_MTHP_NR == 0) { + if (chunk_none_count <= scaled_none) + bitmap_set(cc->mthp_bitmap, + i / KHUGEPAGED_MIN_MTHP_NR, 1); + + chunk_none_count = 0; + } + + _pte = pte + i; + _address = address + i * PAGE_SIZE; pte_t pteval = ptep_get(_pte); if (is_swap_pte(pteval)) { ++unmapped; @@ -1411,10 +1457,11 @@ static int khugepaged_scan_pmd(struct mm_struct *mm, } } if (pte_none(pteval) || is_zero_pfn(pte_pfn(pteval))) { + ++chunk_none_count; ++none_or_zero; if (!userfaultfd_armed(vma) && - (!cc->is_khugepaged || - none_or_zero <= khugepaged_max_ptes_none)) { + (!cc->is_khugepaged || !is_pmd_only || + none_or_zero <= khugepaged_max_ptes_none)) { continue; } else { result = SCAN_EXCEED_NONE_PTE; @@ -1510,6 +1557,7 @@ static int khugepaged_scan_pmd(struct mm_struct *mm, address))) referenced++; } + if (!writable) { result = SCAN_PAGE_RO; } else if (cc->is_khugepaged && @@ -1522,8 +1570,12 @@ static int khugepaged_scan_pmd(struct mm_struct *mm, out_unmap: pte_unmap_unlock(pte, ptl); if (result == SCAN_SUCCEED) { - result = collapse_huge_page(mm, address, referenced, - unmapped, cc, mmap_locked, HPAGE_PMD_ORDER, 0); + result = khugepaged_scan_bitmap(mm, address, referenced, unmapped, cc, + mmap_locked, enabled_orders); + if (result > 0) + result = SCAN_SUCCEED; + else + result = SCAN_FAIL; } out: trace_mm_khugepaged_scan_pmd(mm, &folio->page, writable, referenced, @@ -2479,11 +2531,13 @@ static int khugepaged_collapse_single_pmd(unsigned long addr, fput(file); if (result == SCAN_PTE_MAPPED_HUGEPAGE) { mmap_read_lock(mm); + *mmap_locked = true; if (khugepaged_test_exit_or_disable(mm)) goto end; result = collapse_pte_mapped_thp(mm, addr, !cc->is_khugepaged); mmap_read_unlock(mm); + *mmap_locked = false; } } else { result = khugepaged_scan_pmd(mm, vma, addr, From patchwork Thu Apr 17 00:02:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054645 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 295E1C369BD for ; Thu, 17 Apr 2025 00:07:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B78E428014F; Wed, 16 Apr 2025 20:07:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B276828014B; Wed, 16 Apr 2025 20:07:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9A2BA28014F; Wed, 16 Apr 2025 20:07:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 790C528014B for ; Wed, 16 Apr 2025 20:07:19 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 2D0BF140FD0 for ; Thu, 17 Apr 2025 00:07:20 +0000 (UTC) X-FDA: 83341596240.03.9B68AAE Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf10.hostedemail.com (Postfix) with ESMTP id 719E8C0006 for ; Thu, 17 Apr 2025 00:07:18 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=AYbPJ+Mh; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf10.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848438; a=rsa-sha256; cv=none; b=x3+oAbxIdS8jU9o8dhRXfsBSoQruqKXZzZtzZTyxiA0U0zyxFI3s5PLVwUKuznafoUipWc qXR1mkn4Ykb/u8usJ3SzB8yAY9DTJf75Hm0EWTela2rHTX6VC/bVUrmQpf/szJV825jvGM WswZ5SeItHzLCBi/9WmAPDdrjU8Tics= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=AYbPJ+Mh; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf10.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848438; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wvGGHwPJPZqUW/dQIdiDaj2uVcEBeMtL7Go603/skoE=; b=mDLucOTlD84C1AJ9TKI3OHZiIkq69On3LD1LfOfdtgPvpJ6F+BBlw1EKOxpuB5b3pjHxNg WeMBS5yOaRbuvJC78Pa9+wvJG0wPfL0XkzkzNcQcg+ajVHRn4q07y3dmivqGfiVB61qEBf Y0iXDA/HR9iIJDSY1y3lD2L64dONwkw= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848437; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wvGGHwPJPZqUW/dQIdiDaj2uVcEBeMtL7Go603/skoE=; b=AYbPJ+MhuBc7K0RsIYM0a5ascoo+Rnvm49J4cm5Tby6R1DWS8MGB+7dskhTwoC/MIOr0rb 10jr/X8xuOkIPCp85upBIz1xTolo9Zv4a0E2GkyXFQwyxOrBd+C8CoB3gIjpATQfzLQxAF Ys3IWKoJUX+Y8RV0g9P/S+Tc+fZV3AM= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-567-K9oCAep0OguwUoDCGGw4Pg-1; Wed, 16 Apr 2025 20:07:14 -0400 X-MC-Unique: K9oCAep0OguwUoDCGGw4Pg-1 X-Mimecast-MFC-AGG-ID: K9oCAep0OguwUoDCGGw4Pg_1744848431 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E974218001D5; Thu, 17 Apr 2025 00:07:10 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 809E1180045B; Thu, 17 Apr 2025 00:07:02 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 08/12] khugepaged: skip collapsing mTHP to smaller orders Date: Wed, 16 Apr 2025 18:02:34 -0600 Message-ID: <20250417000238.74567-9-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 719E8C0006 X-Stat-Signature: ab3ya8s8n7suqihiad8jy18kba3rbrhi X-Rspam-User: X-HE-Tag: 1744848438-182349 X-HE-Meta: U2FsdGVkX1+AYbY8eJXbicdxCJAotN9jPcZ1GRRFVvsAAvEk6v6QflwT2Ggs/PPJ9Y2/LnEYj3UblWdycoEUGcoM/+J2jANg9pju0vZ6vCSA858UepY0AHY5r2X5jsMC8fQ126POyO2X6Ttit7bJbyChmOyma4SV5Rr0CfukeoGcJRTfF2h0P1ciMQSiIq7jjp7gLa5QRnau20AQUwJiuq9HmSD/T8kOQF1KSf8jMdiACKTNvHC6FU4uIcakfuvu5wjE2K+R5hZF/P11zLdurI6aZFMszhEAvdNzRh1+V8AwwVf/9SETsq+h2Cz6j/SLdF3X2APkvL4kOjD+Bt/WnJfTeo1pc2A/jq9MuHXGfdsoBJC1JTJ0gjWWNVV8FWJm7QcGLdhg79YvRr2ihJzj/KIe1KbIu2BJzqi88XwW5P+4ooHfqK+VS8T0+W4XWsuR+7opW/tHwSIwn3Toh2tXPNC51uwOxW6EDPNUxdawrcdzaRWtOaHPdCL7QvJt13PqZ54qL9VxnaszX3ihxDzVd9WhkDiQvJ766TG0lp4G9DAX47653O+z6UW17DRKYOi3HRiq8B5pnTk0V6WOnQXvjNThpMDlLYZpUc32pupPgPT6KdT+qk1gXo09Hj46i2CrSJWG+ETkI/+UJqZq7tdrW/uzbC3/kmrXqsPXPQegFasbsFRHHs/qfgzhttk+lHDOfEJnarWU1gliSHkjBdQY7orBE3RNGVykp33bn93/KdYxLSCK4zZf08+d64RShiDPsBFv/C2zufyEvJ0Lcc+0HO8n1SjJMWYefPDQpmo+tlQgfC6ruPn3ssrDYg6T1cgCUWCX2DWTLXOzLkqIjLguydVQfbPYVoUXulzPF6z4h7CQBFLSlluStG/HYhTJmwL45XHusxKFvSCIlKXKgtGHVhhhOiXCNXKZghxCSd2//yFxDLGo3A9d5UtCDx/egPFHFdmZ1JvFOstPlFIbDFr 4AQytmcu tCrtgvFKw4ROJ3O1fL45Vmv/9oSFNJGgAnayoHftf3GpD+URJfIOXRAuQvkF9AfSZgnIanbffxpcGKuByTXr21kwn42hJYJi0KyeofAMKvDm/ktjLCa95O+gOVZYvIslkFg68cu8aTSnyO88s+0TAnlxROY3Slc8i6iQv24sLaReSY2A5KkbUo3ANPd8OHn5mOp40I+7T1xXtF/M6XqB0pvbm+Q412QR2T19rv02NSwV+99z3edA8O6rardoDj4g2OAtin93+hruTzylC2Y1XvKGNHmTCPvwwgDO97Fukpk2Mo2j5fPJYoEiWP0uGdc1796XDNn6xM+aJejfudJ6Rco2Hr+iI+s6CZI2Wsk24N4rJxPBV31ge/ilqau1wkSZYbzWdK22xVQ8OhPgKR3sOQcOulLmJbhN1TpajQMcHa2bFtPT8lirAxoKKJedrGv1BlUPjZn3/+q4XR42VonhWS4pH6zxW/fattAgkiBSmhUs79T4= 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: khugepaged may try to collapse a mTHP to a smaller mTHP, resulting in some pages being unmapped. Skip these cases until we have a way to check if its ok to collapse to a smaller mTHP size (like in the case of a partially mapped folio). This patch is inspired by Dev Jain's work on khugepaged mTHP support [1]. [1] https://lore.kernel.org/lkml/20241216165105.56185-11-dev.jain@arm.com/ Co-developed-by: Dev Jain Signed-off-by: Dev Jain Signed-off-by: Nico Pache --- mm/khugepaged.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index ece39fd71fe6..383aff12cd43 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -625,7 +625,12 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, folio = page_folio(page); VM_BUG_ON_FOLIO(!folio_test_anon(folio), folio); - /* See hpage_collapse_scan_pmd(). */ + if (order != HPAGE_PMD_ORDER && folio_order(folio) >= order) { + result = SCAN_PTE_MAPPED_HUGEPAGE; + goto out; + } + + /* See khugepaged_scan_pmd(). */ if (folio_maybe_mapped_shared(folio)) { ++shared; if (order != HPAGE_PMD_ORDER || (cc->is_khugepaged && From patchwork Thu Apr 17 00:02:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054646 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 1B4A0C369BD for ; Thu, 17 Apr 2025 00:07:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B46CA280151; Wed, 16 Apr 2025 20:07:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AF5DD280150; Wed, 16 Apr 2025 20:07:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9BCAF280151; Wed, 16 Apr 2025 20:07:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 7AA71280150 for ; Wed, 16 Apr 2025 20:07:30 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 2413681006 for ; Thu, 17 Apr 2025 00:07:31 +0000 (UTC) X-FDA: 83341596702.22.92B4E38 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf01.hostedemail.com (Postfix) with ESMTP id 7D5E040007 for ; Thu, 17 Apr 2025 00:07:29 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=PTuYwvzi; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf01.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848449; a=rsa-sha256; cv=none; b=XQK4dCbGKSMefCvNwDU0CPxCXJtVzfw4LQVe+WfvVeLmkfSt29PlACd46o2fiWTii68O3v gc6bDeDZU/Q/ZHOpOT5t6ruBYtlyviUp3LJ4ME/b2+Vj0LgHvEhDZvNJGGrBp7556vRIWK i2l1ci4DqJ7ZQibksyptVrenJw1QwW4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848449; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=lT7Le5l3OvCTeyxGbSyLQ+XqGfqD4qwGKJUaU5ZKhXs=; b=EIHiTlVQHF9PX2UCHKq6qKKKEcUauFWWPAgtmtrXQWvunJXfVV1bJE/1i4CLxC4SoZZIwN 6/XqvK5MhxHsnMuLzutFwzI/58PV+rd4Cq0HziDWNhUCfjUoqYhl9r+0vNmWVMVDvDWDeb m063eAq+nBtA9oHdTAD1cwcURhcLCbA= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=PTuYwvzi; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf01.hostedemail.com: domain of npache@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=npache@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848448; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lT7Le5l3OvCTeyxGbSyLQ+XqGfqD4qwGKJUaU5ZKhXs=; b=PTuYwvziJTD+enUDkfeid+xr+lEQT8N/6s4TNmcFRXp9TDSK1MI15quHQE5XAMqSywdT2q 8A+CBvMWctYQIZC34T+4WuQwcl38DGOkF26cG8fJPRU4sCyuePpFM7g46ANGXv/fZHlppw 8b8hPqmRxuZlgawLmdSSVGiMS8RTcrg= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-445-eXBT7ml8MMi_oRCb4gBEvA-1; Wed, 16 Apr 2025 20:07:23 -0400 X-MC-Unique: eXBT7ml8MMi_oRCb4gBEvA-1 X-Mimecast-MFC-AGG-ID: eXBT7ml8MMi_oRCb4gBEvA_1744848439 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A0230180036E; Thu, 17 Apr 2025 00:07:19 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4933F180045B; Thu, 17 Apr 2025 00:07:11 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 09/12] khugepaged: avoid unnecessary mTHP collapse attempts Date: Wed, 16 Apr 2025 18:02:35 -0600 Message-ID: <20250417000238.74567-10-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 7D5E040007 X-Stat-Signature: cgjkgbpnz7byb18jw9db9zf5rgcq5e6t X-Rspam-User: X-HE-Tag: 1744848449-697292 X-HE-Meta: U2FsdGVkX18gqfZs+VjTCWmIK3jUQjnmkmcBmTBM4tx4kW/+qSbaTle0JXZHKTunKPPOxLAnzDlNfamqUtBB7esccI/vuGcuHyFkWafwumvuXu4b8O35uetW4LA6Djg6BXtjCoL1eC/85DZ3Xyw6jg6okRvBFTNWpmNnK56LBzLOscSevX5vgbgt8TP1YMrFQeQ0ZMSjGeG6Q4/IxsvNION7KUYNQcGMIFlm7yIRjFi/4zN5d43nopoJQ9bDB9e5bV3/7laBoKPb1sNoejfqNdoxICYjKfAb8zuEn3t5Aqc17eCwDHds+v0MEvVoyFSBYgOss85hgH98H2SCDUgu2INQqKLJyxxhNB6GHcBX47oujDa9CmP8AYAQZ8iOi7rBz8JSmnfg11k3bHZne5AVsyL1jA3yJsze9YPUniX61K9A3ag8CmUwP/BphgqR8LuevVEa1wwSxEKxtnSYDdnlcIZQADQEqPfdlIRR2jxV9/z3v/U1gNRItnh/G7ky8EXJOQMCJ2USUkqV9UU8deGi8dbsgspQT3W+j/h1egc60ZcgyToCRspxA5WJWmsj4TcOwiVMag73W5JoVgQI6wBujZCU9t6Q/hGLPPrdxMCz1OqN7ekV0aPc7dlXoRJPkJjNVMGBptakWX8vyNvD7dxyveEDe6MqpHeS6rkSJkv+fUO0yvk4U5N/RyG/LjFF6SpSJDb6QM8r3qf5BC4WnQEzbwD1K2M102/f58WPxtIkS05Zhak/rKPzZe1Qg2LVqCHxnsaagO4N2txN/W7OIGa3s2CqzZdsmLxgp827YB+8Mb4JdPRtZkWPrGY0w3TPzSEm9I3Xvee+hrI9HhwhO/cbZleSdc5dAtRo6sNw0fNSBHtKswgmN65OQrFNijDetw8Wsjp2AAHCcV83rmF+8xPbw5N2SBfZaIxyCzdtKcMYfOEnmpnTarzJa7OFaXPWvIvlfDcN/uyvcDCx+A3EKi0 sZ/ZB9Yj tgJCtdvCg2zJyIP1PWKT2E//l7eC1kndqPn4nBHBpDS3nXnCi5aFcacQEpNPOuShwnTJ+xoYly4bRNLQ0kN6AmQKAXWH4bsGwdq0a1E3mZgU4tO35NCPqpKptbCjbzS7OOPiM 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: There are cases where, if an attempted collapse fails, all subsequent orders are guaranteed to also fail. Avoid these collapse attempts by bailing out early. Signed-off-by: Nico Pache --- mm/khugepaged.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 383aff12cd43..738dd9c5751d 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1366,6 +1366,23 @@ static int khugepaged_scan_bitmap(struct mm_struct *mm, unsigned long address, collapsed += (1 << order); continue; } + /* + * Some ret values indicate all lower order will also + * fail, dont trying to collapse smaller orders + */ + if (ret == SCAN_EXCEED_NONE_PTE || + ret == SCAN_EXCEED_SWAP_PTE || + ret == SCAN_EXCEED_SHARED_PTE || + ret == SCAN_PTE_NON_PRESENT || + ret == SCAN_PTE_UFFD_WP || + ret == SCAN_ALLOC_HUGE_PAGE_FAIL || + ret == SCAN_CGROUP_CHARGE_FAIL || + ret == SCAN_COPY_MC || + ret == SCAN_PAGE_LOCK || + ret == SCAN_PAGE_COUNT) + goto next; + else + break; } next: From patchwork Thu Apr 17 00:02:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054647 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 20C21C369C2 for ; Thu, 17 Apr 2025 00:07:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BD090280152; Wed, 16 Apr 2025 20:07:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B7EF8280150; Wed, 16 Apr 2025 20:07:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A4749280152; Wed, 16 Apr 2025 20:07:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 8626B280150 for ; Wed, 16 Apr 2025 20:07:38 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3227080FFC for ; Thu, 17 Apr 2025 00:07:39 +0000 (UTC) X-FDA: 83341597038.29.04798B5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf10.hostedemail.com (Postfix) with ESMTP id 7C432C0009 for ; Thu, 17 Apr 2025 00:07:37 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LNZBLkep; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf10.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848457; a=rsa-sha256; cv=none; b=3CX+qvfS7od2f+FGPLJzR9NEOYxTKuYypGmOkWsR1MILiK6FKdBWQBYK4664k+V9J/isgg R6eBnst++i3pzgHNPqWPDPivKVv38vRwUEOUEnDggCZljjzX/2PGrw9Qc92uTbgCJ7Bg/j boGWTZTcGHpaBF8FD4csAAGS3u2Pzq0= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LNZBLkep; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf10.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848457; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=I5MjwLdOROb4OzoYHmS/XbFwlXwBFtjpdsTiTGPdAHg=; b=wPByaZo/xvNYnVTIb/mnvTqG7BubHpWnpPb/84paZm+CItkQEbk/yU9qMD8M77Jvg3xRvZ t6LjFHdF/loPGjNT3f55DyOHR6o7hiSGoWUkV/o6IRX5j2zQzYtC2g7aywovZA0nu9xBDE YQz+LFq14wUvTztQvtBQEaD3hL/zeUs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848456; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I5MjwLdOROb4OzoYHmS/XbFwlXwBFtjpdsTiTGPdAHg=; b=LNZBLkepVPEBNj2iLDyyX9/5HE9X7bTNZa14ermAbNpm1yybiGNFfvUxfSvULq4u8BPYRI ZlBH25xmO4YDIrqPcP4hFHX0xYfqRrK8QO6ApIke3mw1TAZaEEy+Q7tslrYEuM5tuyBkzy Vzcfpssfzy/4qC/5pvM/Bl1r1j4brp8= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-52-rmiki82LOK6rDQ1-cKmcXw-1; Wed, 16 Apr 2025 20:07:33 -0400 X-MC-Unique: rmiki82LOK6rDQ1-cKmcXw-1 X-Mimecast-MFC-AGG-ID: rmiki82LOK6rDQ1-cKmcXw_1744848449 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 33BB919560A0; Thu, 17 Apr 2025 00:07:29 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 01E15180045B; Thu, 17 Apr 2025 00:07:19 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 10/12] khugepaged: improve tracepoints for mTHP orders Date: Wed, 16 Apr 2025 18:02:36 -0600 Message-ID: <20250417000238.74567-11-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 7C432C0009 X-Stat-Signature: nr5un3djfqns3u47coqhhkmx7ua1dg1w X-Rspam-User: X-HE-Tag: 1744848457-183190 X-HE-Meta: U2FsdGVkX1+0T47kwK7bCZiIo4VcuGk7/dLuxqgBY7j0yRzgd40yjcIFqwrznn3aeXBqOq2XixW2XQnGVNtjWFwvrL4cqn+/eTdNnn8mbkXh1WDq78bCI3+nlKttmXoWKFae45ryJhXRUoe15n8LdpQ8Hsc+doJXyTSMmnIGVnqkWLKa6ElsdVaQV/Sw25MyCWUWPgySsgIrumHwHEhaMp61YE8rsXWi85/GU12b26LI0CdkSMG9Bn+49vAPCk+q4DPJpxy6DO705Logekytykm5hvJ5es31lQJZMQWjWTd1594yq0R3bRGLbScN0asK0BRmjQuaLVXGW6soejlaWzlKviopUOQ/RKNwpSGtdjgsJKX0px/z9Vsk48xTRyQl0hfzEzuEV28N2CXcNpa8gUKtce8nlsZZYEcqUg59nnmuymUwNEcN5koI15F1DPZfuUhs5UqmJhIkPKnmK4bc4UlvFHXIT3pfbDIKkatdMKx2k43j8JUIkSvI1J35NM2ltoOMoO10czmK8DrcVIvY0RhG1bvyEP5W2ddcDz/73Z5bFkmJPHqWlAkgT2QwtKc/eUAXpfeMuXiXBrUvzcYR7g7amwm2HjJAwMkODT7+GkHTiiGGJ/QOqDYUSY1G5ejsmXdt+gbPwGu7QKGpbAfryeBPwzZM+0OFIePoSqifM/v2jj6P4R2NH9haP8H1OEcMzIjLI7cj5rlrTME+84zWPu7WGBnSVt58bxBJL9+0SUxTeKgYuYHmSerdd5BBCBkPtSaKzi6kMl4x6lV1iba+neb//RTkuf8df5fYh3FCwcZwaif5ByX+SvZ/8RZo+Fi5ZHmETJsIEcfkLEXeV90ckLYF1rHsd56v1IwyziiBghQqpqwyLwYmlqAZggpEtxPcAklBCUYCncH3jBpsvcryvl8bYnycO7GTg6Mpebu5JiNpJn+bA4uDwW4c2d3QoRuG3bHrV/AA5pSIRW1VNni E7S0o7rA B0snYezt4ASIIQByk6BjDlX5QswPoBKvr9CstEqjWLkUwTPyaTtmLKr43FdE3165FcYtTLqQdJQwrYmrlxhCy00d/eX3OY1hPgug+2eZuk3eQGPhIKEFIVsCqeT250FQYCorR4gcQj2tJkmz9/e1qc77XNkSFJib/2J0/F8GumKucUybcNdE8+7Y6vOv5REa5p0SovyfPYGzrB8u8uOvp0siivd5o5h5l/xy75qS+0thjRP/ajdf+9UbqzV4dpb5m3c8qgZwa5cq+TubkCo43pEBecuDlWAX1eZdStW7lcacf4h+9xlpzhKBkKIM9KbbFm9BLgVIuW+wGX4PUrBlmbOoEWPYKNZTcE5RulvwhFkjPEXcebxbA74nfG8umn5IXSPNy2QDUO8hvHLD18diUpglGAQ== 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: Add the order to the tracepoints to give better insight into what order is being operated at for khugepaged. Signed-off-by: Nico Pache --- include/trace/events/huge_memory.h | 34 +++++++++++++++++++----------- mm/khugepaged.c | 10 +++++---- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/include/trace/events/huge_memory.h b/include/trace/events/huge_memory.h index 9d5c00b0285c..ea2fe20a39f5 100644 --- a/include/trace/events/huge_memory.h +++ b/include/trace/events/huge_memory.h @@ -92,34 +92,37 @@ TRACE_EVENT(mm_khugepaged_scan_pmd, TRACE_EVENT(mm_collapse_huge_page, - TP_PROTO(struct mm_struct *mm, int isolated, int status), + TP_PROTO(struct mm_struct *mm, int isolated, int status, int order), - TP_ARGS(mm, isolated, status), + TP_ARGS(mm, isolated, status, order), TP_STRUCT__entry( __field(struct mm_struct *, mm) __field(int, isolated) __field(int, status) + __field(int, order) ), TP_fast_assign( __entry->mm = mm; __entry->isolated = isolated; __entry->status = status; + __entry->order = order; ), - TP_printk("mm=%p, isolated=%d, status=%s", + TP_printk("mm=%p, isolated=%d, status=%s order=%d", __entry->mm, __entry->isolated, - __print_symbolic(__entry->status, SCAN_STATUS)) + __print_symbolic(__entry->status, SCAN_STATUS), + __entry->order) ); TRACE_EVENT(mm_collapse_huge_page_isolate, TP_PROTO(struct page *page, int none_or_zero, - int referenced, bool writable, int status), + int referenced, bool writable, int status, int order), - TP_ARGS(page, none_or_zero, referenced, writable, status), + TP_ARGS(page, none_or_zero, referenced, writable, status, order), TP_STRUCT__entry( __field(unsigned long, pfn) @@ -127,6 +130,7 @@ TRACE_EVENT(mm_collapse_huge_page_isolate, __field(int, referenced) __field(bool, writable) __field(int, status) + __field(int, order) ), TP_fast_assign( @@ -135,27 +139,31 @@ TRACE_EVENT(mm_collapse_huge_page_isolate, __entry->referenced = referenced; __entry->writable = writable; __entry->status = status; + __entry->order = order; ), - TP_printk("scan_pfn=0x%lx, none_or_zero=%d, referenced=%d, writable=%d, status=%s", + TP_printk("scan_pfn=0x%lx, none_or_zero=%d, referenced=%d, writable=%d, status=%s order=%d", __entry->pfn, __entry->none_or_zero, __entry->referenced, __entry->writable, - __print_symbolic(__entry->status, SCAN_STATUS)) + __print_symbolic(__entry->status, SCAN_STATUS), + __entry->order) ); TRACE_EVENT(mm_collapse_huge_page_swapin, - TP_PROTO(struct mm_struct *mm, int swapped_in, int referenced, int ret), + TP_PROTO(struct mm_struct *mm, int swapped_in, int referenced, int ret, + int order), - TP_ARGS(mm, swapped_in, referenced, ret), + TP_ARGS(mm, swapped_in, referenced, ret, order), TP_STRUCT__entry( __field(struct mm_struct *, mm) __field(int, swapped_in) __field(int, referenced) __field(int, ret) + __field(int, order) ), TP_fast_assign( @@ -163,13 +171,15 @@ TRACE_EVENT(mm_collapse_huge_page_swapin, __entry->swapped_in = swapped_in; __entry->referenced = referenced; __entry->ret = ret; + __entry->order = order; ), - TP_printk("mm=%p, swapped_in=%d, referenced=%d, ret=%d", + TP_printk("mm=%p, swapped_in=%d, referenced=%d, ret=%d, order=%d", __entry->mm, __entry->swapped_in, __entry->referenced, - __entry->ret) + __entry->ret, + __entry->order) ); TRACE_EVENT(mm_khugepaged_scan_file, diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 738dd9c5751d..67da0950b833 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -721,13 +721,14 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, } else { result = SCAN_SUCCEED; trace_mm_collapse_huge_page_isolate(&folio->page, none_or_zero, - referenced, writable, result); + referenced, writable, result, + order); return result; } out: release_pte_pages(pte, _pte, compound_pagelist); trace_mm_collapse_huge_page_isolate(&folio->page, none_or_zero, - referenced, writable, result); + referenced, writable, result, order); return result; } @@ -1097,7 +1098,8 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, result = SCAN_SUCCEED; out: - trace_mm_collapse_huge_page_swapin(mm, swapped_in, referenced, result); + trace_mm_collapse_huge_page_swapin(mm, swapped_in, referenced, result, + order); return result; } @@ -1318,7 +1320,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, *mmap_locked = false; if (folio) folio_put(folio); - trace_mm_collapse_huge_page(mm, result == SCAN_SUCCEED, result); + trace_mm_collapse_huge_page(mm, result == SCAN_SUCCEED, result, order); return result; } From patchwork Thu Apr 17 00:02:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054648 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 99536C369C2 for ; Thu, 17 Apr 2025 00:07:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2538C280153; Wed, 16 Apr 2025 20:07:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1D86D280150; Wed, 16 Apr 2025 20:07:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 02AD2280153; Wed, 16 Apr 2025 20:07:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id CD2C8280150 for ; Wed, 16 Apr 2025 20:07:49 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 737131A0F40 for ; Thu, 17 Apr 2025 00:07:50 +0000 (UTC) X-FDA: 83341597500.24.845645B Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf09.hostedemail.com (Postfix) with ESMTP id 9EE99140005 for ; Thu, 17 Apr 2025 00:07:48 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SPc3jdwy; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf09.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848468; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FiTJSCBt+yo6UWFDN8Zp9G6fdmYnYcLtQKmRP4SHcxw=; b=T7NcrEXL+ES62vScGUNqu4W/2jm5mVA99kdEK7toNxWOW8jKzfgywWPiuIyctMXFd0R9Co +kKwny9hMj61HVcdIZ/Ne7va7HM1yNS6anWwfEBJCM1/BOCEjOwBVc6E+JuNaGncnFZ2mP j2bQjUTBnmW6BJc7d9eTGWuq1s6latI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848468; a=rsa-sha256; cv=none; b=qE5MIk82/g3Gfo1zpQFNRjESDm+p8GLiX0ieaXZ8ytQiDNusj7EAwvmP7yMFG8cXeyuZVN ZAG2ZMDb9FaDNnV1k6BS99fnH3COHxQRTmwfGzIxIkXqORYL3SubS3I6HrN+gx0UXMllS7 znLLmD54TvOMhrCDBXjgbPqVoBDQOpw= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SPc3jdwy; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf09.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848468; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FiTJSCBt+yo6UWFDN8Zp9G6fdmYnYcLtQKmRP4SHcxw=; b=SPc3jdwyeRp/IlUEOiMD2dBio+xNRVcTdOfB+n6kikAVMTwlkGonYLrfO2M5l/VHS4a/mn Qy2q2pVLgrNOUSTh16cr0Yni+dCg9IiC54xKG62pPZjyfw3DJq9uQ7XDgk3EMM/nCUS6qI D0H8g6wLZx75yaxm2K9CnpG1FMDoX54= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-264-KDJIGUUMPhqXuE70ZJjwQQ-1; Wed, 16 Apr 2025 20:07:43 -0400 X-MC-Unique: KDJIGUUMPhqXuE70ZJjwQQ-1 X-Mimecast-MFC-AGG-ID: KDJIGUUMPhqXuE70ZJjwQQ_1744848459 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D8EE21801A14; Thu, 17 Apr 2025 00:07:38 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 939EA1800352; Thu, 17 Apr 2025 00:07:29 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 11/12] khugepaged: add per-order mTHP khugepaged stats Date: Wed, 16 Apr 2025 18:02:37 -0600 Message-ID: <20250417000238.74567-12-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 9EE99140005 X-Rspam-User: X-Stat-Signature: j9p9ziry3a1hsg9dhene9ebzczys4x59 X-HE-Tag: 1744848468-179257 X-HE-Meta: U2FsdGVkX1/ErRR1x9ijIUtE/c2aKdtrwaOApC+Bb1Qnsn4evN50URxFb+pp5dbmYADnB8WPcLnssZlnjiIk9est8pXUKtmGhq8D6mcy4YB8sQNF64NFFkO9DSib5j7aQgwaekRoGHX4ijaDP6f2x9Dl2UDmQZY+INbFCQRx+g58YhPgRKiigJWTn9oEn3gqFJlyc8vYt2Qps2elN5c4nPdBxcNZ7nrV/Ew8Gqd/iInvVOBTj/QQKCrpMaN26/SEgRQV3ackOyvF0vXQQ93EzJduuhS09bmhu1lMETpSqic/SXXw11akfU96hB+5iOUTwMGQGhZTk+o3D9mre1Lv0xmRzCs5dwJCBSs7IjMiWveoMmy5CBJeaoXt+9UEnRsb+eu0SKrWqBdtV9TLmplBoWiwZaKa/IDwRyvfr47weU++w/+0Vm3ctIU1BKNisxVWO2RO1OolMti2cLr/8TBWvecN1xXOBW3iCJ8BKc0pcoKC0dTiW6rMGdpnKQNnKHpBzpnVYtLAdajelJm2PkVru6yqtQLkFRi39Hhm6yxWWBCbiLUEaWZbaF8cOudwB62bb159HaOx7kINcG40/UbKkSsDnXEJJTXJ4jTlHwrFrpMnE3ThBDAd8gwWiqedoKBeGNosuJbVeLOpEZCcqXf8LpIgvVygviTzpK+nMlA85vzhLwLqNfuIeLkbtYAWC9Rx2m/u0Lz5OZg/bDIzqFLAFDUtuwlX1s5HaPB5KSMtc6lGjAjRuWeJRx0fLm/H0MNCoxNksOIAmSqhbLWzHwGUZ3/qE55naLQ7W8d6xh/IyUlDIyWNz95p7ziNuz/jwQiegIYgPKfdrJTU30+mO2EZJQTpwuMK9uUPd1PsPy+F7UAWKu9LLBePtGB9xGvd0i2prd1rX4xmDfAwVZLVDXsH4k/UNmTcf/5r3pV9j2z+WF2xGmtfZNSNBxUym0XaJ0NGHrq62eAcWraF8GK+Fj5 aqv2lisI GbekwoLLwLbpJqWB3xcByj0AYQ1Foi2V9LSBY/b5jFjAHsJm3yZPCvrjQLj6plHn5TuaPgTZ1AdL4Ivil9fF6q5N5QsIgSedk77eqV4XmniWFJz45exH5yGCiTPFLOdsmQoMrTe9od6PZ/uprACw1ppMS4kXVUjhxPBYRZuFojUCnsVscnRbP+SyF9r6cVS3F7WcF4w8Y0xyMej64urLrQBAnRkCH/xmJwVgXXc+qqBUgRxLNZMWwYgGKjL7beqOMcLs+4HFY5gMp8dqu0FlPbsAl5hNABrBHaIWzz9QmbKJVQWr/6R0RwpSGbjXaMBWR4FuFoEWgagJIwIoXop0W0QRyb/73MS1wfpEiC8WmVs6hZGiDPhB+05wHyIW9mjyqE9lFgXrIQTQz/fYZF3Mg+Kx5LA== 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: With mTHP support inplace, let add the per-order mTHP stats for exceeding NONE, SWAP, and SHARED. Signed-off-by: Nico Pache --- include/linux/huge_mm.h | 3 +++ mm/huge_memory.c | 7 +++++++ mm/khugepaged.c | 16 +++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 55b242335420..782d3a7854b4 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -139,6 +139,9 @@ enum mthp_stat_item { MTHP_STAT_SPLIT_DEFERRED, MTHP_STAT_NR_ANON, MTHP_STAT_NR_ANON_PARTIALLY_MAPPED, + MTHP_STAT_COLLAPSE_EXCEED_SWAP, + MTHP_STAT_COLLAPSE_EXCEED_NONE, + MTHP_STAT_COLLAPSE_EXCEED_SHARED, __MTHP_STAT_COUNT }; diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 7798c9284533..de4704af0022 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -633,6 +633,10 @@ DEFINE_MTHP_STAT_ATTR(split_failed, MTHP_STAT_SPLIT_FAILED); DEFINE_MTHP_STAT_ATTR(split_deferred, MTHP_STAT_SPLIT_DEFERRED); DEFINE_MTHP_STAT_ATTR(nr_anon, MTHP_STAT_NR_ANON); DEFINE_MTHP_STAT_ATTR(nr_anon_partially_mapped, MTHP_STAT_NR_ANON_PARTIALLY_MAPPED); +DEFINE_MTHP_STAT_ATTR(collapse_exceed_swap_pte, MTHP_STAT_COLLAPSE_EXCEED_SWAP); +DEFINE_MTHP_STAT_ATTR(collapse_exceed_none_pte, MTHP_STAT_COLLAPSE_EXCEED_NONE); +DEFINE_MTHP_STAT_ATTR(collapse_exceed_shared_pte, MTHP_STAT_COLLAPSE_EXCEED_SHARED); + static struct attribute *anon_stats_attrs[] = { &anon_fault_alloc_attr.attr, @@ -649,6 +653,9 @@ static struct attribute *anon_stats_attrs[] = { &split_deferred_attr.attr, &nr_anon_attr.attr, &nr_anon_partially_mapped_attr.attr, + &collapse_exceed_swap_pte_attr.attr, + &collapse_exceed_none_pte_attr.attr, + &collapse_exceed_shared_pte_attr.attr, NULL, }; diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 67da0950b833..38643a681ba5 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -604,7 +604,10 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, continue; } else { result = SCAN_EXCEED_NONE_PTE; - count_vm_event(THP_SCAN_EXCEED_NONE_PTE); + if (order == HPAGE_PMD_ORDER) + count_vm_event(THP_SCAN_EXCEED_NONE_PTE); + else + count_mthp_stat(order, MTHP_STAT_COLLAPSE_EXCEED_NONE); goto out; } } @@ -633,8 +636,14 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, /* See khugepaged_scan_pmd(). */ if (folio_maybe_mapped_shared(folio)) { ++shared; - if (order != HPAGE_PMD_ORDER || (cc->is_khugepaged && - shared > khugepaged_max_ptes_shared)) { + if (order != HPAGE_PMD_ORDER) { + result = SCAN_EXCEED_SHARED_PTE; + count_mthp_stat(order, MTHP_STAT_COLLAPSE_EXCEED_SHARED); + goto out; + } + + if (cc->is_khugepaged && + shared > khugepaged_max_ptes_shared) { result = SCAN_EXCEED_SHARED_PTE; count_vm_event(THP_SCAN_EXCEED_SHARED_PTE); goto out; @@ -1060,6 +1069,7 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, /* Dont swapin for mTHP collapse */ if (order != HPAGE_PMD_ORDER) { + count_mthp_stat(order, MTHP_STAT_COLLAPSE_EXCEED_SHARED); result = SCAN_EXCEED_SWAP_PTE; goto out; } From patchwork Thu Apr 17 00:02:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Pache X-Patchwork-Id: 14054649 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 753F9C369C2 for ; Thu, 17 Apr 2025 00:07:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 08BF7280155; Wed, 16 Apr 2025 20:07:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 063B4280150; Wed, 16 Apr 2025 20:07:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E46B1280155; Wed, 16 Apr 2025 20:07:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id C487E280150 for ; Wed, 16 Apr 2025 20:07:56 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 81AB31A0F4F for ; Thu, 17 Apr 2025 00:07:57 +0000 (UTC) X-FDA: 83341597794.23.E227E6A Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf25.hostedemail.com (Postfix) with ESMTP id C73EFA0011 for ; Thu, 17 Apr 2025 00:07:55 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=T1TKDvE+; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744848475; a=rsa-sha256; cv=none; b=ZRmRzOStETEsaetFW47k8yIyeQrcoJsUJKk0t1qRETeGE8zJCfUpkp7oq54LfCPRNgcW3O +VwpfrOBwAbYBLbHKyh5edeJ2SrpEm/uIglTemVCygIlC26m34rnXZGtQHSIQ2Kw90lOcM zKIiGxScIex9WYM1yOsF/+TZDmKZZMo= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=T1TKDvE+; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of npache@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=npache@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744848475; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=YwgfUM8JwJbA0iQF0LdD8dJp+2ea27Yg2QmSTdEXXUw=; b=poRsDk/Vh9YdLclTe3Vvv/hWXkHPUd1fKSoyQe8QELD00MgGlN2NRNywxyn7gPxXe13v5/ H6Afo+ZhyWIZb+eMzxVMul3gd6i+YkrXUC0tIU0P779/56bCeYqmcDTt1sWcSnV63SJvMT eagaw8WZ7MJQmXdMm+IqnEmOLWs6Ero= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744848475; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YwgfUM8JwJbA0iQF0LdD8dJp+2ea27Yg2QmSTdEXXUw=; b=T1TKDvE+mSim08+HMYzoCJ+taLe+mzcxJ9QzobSx1BND3CYvGmgEOhag1YnkQ0Gu9BzSOM GgYKcL6uwUGGkn2vrF6biuqEm4V2MGoXG1tFEliAkeNab5TV9DilStz5sEP77lnfmBZLuU MNTzBsJYpZ3rR5kdXO7Flyy+cvFM5eE= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-210-9yDmiuLHPCmnKNQ90mv0mg-1; Wed, 16 Apr 2025 20:07:53 -0400 X-MC-Unique: 9yDmiuLHPCmnKNQ90mv0mg-1 X-Mimecast-MFC-AGG-ID: 9yDmiuLHPCmnKNQ90mv0mg_1744848469 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 947F61956048; Thu, 17 Apr 2025 00:07:49 +0000 (UTC) Received: from h1.redhat.com (unknown [10.22.88.34]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4B8FC1800352; Thu, 17 Apr 2025 00:07:39 +0000 (UTC) From: Nico Pache To: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, corbet@lwn.net, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, david@redhat.com, baohua@kernel.org, baolin.wang@linux.alibaba.com, ryan.roberts@arm.com, willy@infradead.org, peterx@redhat.com, ziy@nvidia.com, wangkefeng.wang@huawei.com, usamaarif642@gmail.com, sunnanyong@huawei.com, vishal.moola@gmail.com, thomas.hellstrom@linux.intel.com, yang@os.amperecomputing.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, raquini@redhat.com, dev.jain@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, tiwai@suse.de, will@kernel.org, dave.hansen@linux.intel.com, jack@suse.cz, cl@gentwo.org, jglisse@google.com, surenb@google.com, zokeefe@google.com, hannes@cmpxchg.org, rientjes@google.com, mhocko@suse.com, rdunlap@infradead.org Subject: [PATCH v4 12/12] Documentation: mm: update the admin guide for mTHP collapse Date: Wed, 16 Apr 2025 18:02:38 -0600 Message-ID: <20250417000238.74567-13-npache@redhat.com> In-Reply-To: <20250417000238.74567-1-npache@redhat.com> References: <20250417000238.74567-1-npache@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: C73EFA0011 X-Stat-Signature: cwn7w9ox3wegb5ak7tk8p17hhyj71q49 X-HE-Tag: 1744848475-778700 X-HE-Meta: U2FsdGVkX1/czFlCRncietND1I3dEf29QaIGEpcLL+A46Yghwq92f0W4qaZ3/UZ/zWYvI1e6yfBb0IBjJ4OOyF0N1m994HaPREYU/K8P1O8cnwE1Ikkkz6i9hMAsdLX3C3cfvpM//vNC32PVcHWDQtQ88Pb5STUu/LeNBO+nL76clvO2XLENOmx6FLF+nm6kNJStUHCX8DttPYGhCrDlxopCr991+R+zWmSXANkJi3G8kwJNmf32ab9EGyEOSZMsWagtI/4Mj2G12XjefNx4LLPVPr7d5C3CWgNHqIm+M2dKRNSTic2y3pMUqDFZ371euuYTK6KpH9ohS1HbtkuRlokZbh+5WQg0bWt49Cq3Swjzybb2eyQmpTxp+nlbPcdECG+nHFJAgbmJuR1mNR1q9U5mbKw+3U63Fru5Og8MAecwUhdQ3BXSlcBbcN8suAdblHmfqCqwOpLv4USw5u6OHm/9k1C5NB1AbTbeiL47XUhwOeC/pFm/9GBLPg/gQXb4Ft1kFELZ+fNTsXcH7fgqiCort1FWjlIPKgdwS/urS87etpgGS37YDGUNsGJ8nGx/re8UCWThB67+Tz6R+xWvRTQHByUNXPp3Qd/rerfIjmx0BEfXWQ+rfjw+BmNSe08V6Tloc71G85hpoXYaQy2IouhKcGXhbJeYkZ1K/pe+Pois1J137KfWPkJVbhkNPju/uceleWOZWNE8XDvwWONumw8iA4/7wzAXrxAopLmnSg6ezk8GaJ9pgXT2cKHQVAfmr3ftQvBCSN3z3EV0yEfWpvfnRn+3PdopUH6wHzMFEIkrBJdJmQYaxR+SQP1d+M7anbUV2BUpkg/ifGLT3COvFQWMBt+OfbewDrigBS99jwprEHMaxyMyltHDqoGrj/3duqaAwgrw0dMHBtw/DABG6xtk4YHlz/W+dxUZRD7Ih8086tY4Oedmw//T27G8FRd1303oGuTO3con0s8fFu5 y02BW6Qw u+g09emezeJNVsXFAZZsSkZ5bpiIIGtQKC7pokSbacWOGDTTzFKEXtCCJ9C23bw2Y8flV7GkoHrN2ralrFzwkjMZipDobYqcie4l9m1N+yEd9UTv68zOSoU9H4T3IjzHHiqcF6cYL2QiungRJZlKghk5imZCFbd2bexG5kArjbeTEeP8oNlkjcjcf6Bzgxa7wLwccfULH1Vfbw6uyA09LX5BSVZZiMi9CRCnDrpgwTTwku1lYd91B/fobyle1YJ2IE521Nfufg2QvelNuNLzj8FK/2tl02OMXGmUkBeSCPg+G2+1v+dxdRMDtjDFsJ5paYyAHl01bLxcfNaQnqZ3+tSXMAKKB0bKpzPbEjnQQS4ZFTIRdey6kAChix+PPnwRZmgkLZn2EmZpBv5nG99sY/N4rjw== 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: Now that we can collapse to mTHPs lets update the admin guide to reflect these changes and provide proper guidence on how to utilize it. Signed-off-by: Nico Pache --- Documentation/admin-guide/mm/transhuge.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst index dff8d5985f0f..06814e05e1d5 100644 --- a/Documentation/admin-guide/mm/transhuge.rst +++ b/Documentation/admin-guide/mm/transhuge.rst @@ -63,7 +63,7 @@ often. THP can be enabled system wide or restricted to certain tasks or even memory ranges inside task's address space. Unless THP is completely disabled, there is ``khugepaged`` daemon that scans memory and -collapses sequences of basic pages into PMD-sized huge pages. +collapses sequences of basic pages into huge pages. The THP behaviour is controlled via :ref:`sysfs ` interface and using madvise(2) and prctl(2) system calls. @@ -144,6 +144,14 @@ hugepage sizes have enabled="never". If enabling multiple hugepage sizes, the kernel will select the most appropriate enabled size for a given allocation. +khugepaged uses max_ptes_none scaled to the order of the enabled mTHP size to +determine collapses. When using mTHPs it's recommended to set max_ptes_none +low-- ideally less than HPAGE_PMD_NR / 2 (255 on 4k page size). This will +prevent undesired "creep" behavior that leads to continuously collapsing to a +larger mTHP size. max_ptes_shared and max_ptes_swap have no effect when +collapsing to a mTHP, and mTHP collapse will fail on shared or swapped out +pages. + It's also possible to limit defrag efforts in the VM to generate anonymous hugepages in case they're not immediately free to madvise regions or to never try to defrag memory and simply fallback to regular