Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1136779pxb; Thu, 28 Jan 2021 08:49:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJwg5pADnwNfhnikOH8WL+zMJJPVHhbbZ0kB2ihzPsJD6o7wyQuTF4Fe7KHL8UMcb3rYZp9Z X-Received: by 2002:a05:6402:430c:: with SMTP id m12mr435348edc.299.1611852580873; Thu, 28 Jan 2021 08:49:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611852580; cv=none; d=google.com; s=arc-20160816; b=lZme54U+NN1hCkjXH1qi1Cuymaeq45AsCi2JaPhvH31w2lRaGUvzSWa0VQjcb/hgpM q+jkR2vjOacBqoHNSLHuFiVcNfuIAuc+jwI4Uc2C4VFnL9970TbBOZHURoIWDrjJp+QY WEWhaqHcuD035+hpTnRtMD5nJR1YvTJhzsOK7l6wJprUy4lMh0p947LfgsAxQyyPQ56I Y8i6RD2eOj/TlQCjH7dfH+ETXB4XY5S05pl9NYZmjFa5Z4+/Y3G/ZDpD2EkRneWvjTVX U6uzq1OQEB3RbF+/u0mhkUpHxRDLcWidRV39uSFmyld4Z+Pf3IPLwrDdox3p9kAzak43 TFww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LrbBbrZjgAv/B1wjq2Km74Xb+2VP5Qkal75C1Cc+NeE=; b=I/kOzcouolFfmejzWc5q/W49uJ+mJOBQOdCXBOiKI9pmLXWryL5sZ3NPY6cH8hgbKg nZKTJSvhJLWHFFsEsdBIDPbgwxS4WrHos/5z/FKstB05tK3kDkfFWyteE8OUe9lfssJo BaznUVqF3zsBms0UJ2oWXSS1ScoOHktgKmQNbRlcmolcGQC4viZf3d4Dv6thXl4f7nIL lRtZkUOts3RUnoP6/Gnxw6KhdnahLgKKWQ7DpAz2RTyIEAAkOssdupRQNvt6XQ9KY0TP jig+1qowMj92tu8uLkYgDFz6zLkpgSDas43OaQQMvzb/VW7Fju7i0aY/ji8dbXByJVkG yFfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=XPCOGggR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p63si3677900edb.24.2021.01.28.08.49.16; Thu, 28 Jan 2021 08:49:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=XPCOGggR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232705AbhA1Qsb (ORCPT + 99 others); Thu, 28 Jan 2021 11:48:31 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:33243 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232706AbhA1QrN (ORCPT ); Thu, 28 Jan 2021 11:47:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1611852346; 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=LrbBbrZjgAv/B1wjq2Km74Xb+2VP5Qkal75C1Cc+NeE=; b=XPCOGggRAQ45nd85vXiM+rdBrNJtxO8toUq1Dm0/ZZ/y5JTqY5oJ4vPZdWGSUvxol0gkWI vYD9v9E0l943eSzVtNlti2G4DeH2ZvGMZubrMPIhB/Yta2ReFCR3r+JWXgvsacsnbWKdzl aPNrCzyep0cRFJcfQM9//VvCZk+2uaQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-405-Sc0k_4bSOiuTVbO9hkQWLQ-1; Thu, 28 Jan 2021 11:45:42 -0500 X-MC-Unique: Sc0k_4bSOiuTVbO9hkQWLQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5FAC459; Thu, 28 Jan 2021 16:45:40 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-207.ams2.redhat.com [10.36.113.207]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3E5C910027A5; Thu, 28 Jan 2021 16:45:34 +0000 (UTC) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, David Hildenbrand , Andrew Morton , Thomas Gleixner , "Peter Zijlstra (Intel)" , Mike Rapoport , Oscar Salvador , Michal Hocko , Wei Yang , linux-api@vger.kernel.org Subject: [PATCH v2] mm/page_alloc: count CMA pages per zone and print them in /proc/zoneinfo Date: Thu, 28 Jan 2021 17:45:33 +0100 Message-Id: <20210128164533.18566-1-david@redhat.com> In-Reply-To: <20210127101813.6370-3-david@redhat.com> References: <20210127101813.6370-3-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Let's count the number of CMA pages per zone and print them in /proc/zoneinfo. Having access to the total number of CMA pages per zone is helpful for debugging purposes to know where exactly the CMA pages ended up, and to figure out how many pages of a zone might behave differently, even after some of these pages might already have been allocated. As one example, CMA pages part of a kernel zone cannot be used for ordinary kernel allocations but instead behave more like ZONE_MOVABLE. For now, we are only able to get the global nr+free cma pages from /proc/meminfo and the free cma pages per zone from /proc/zoneinfo. Example after this patch when booting a 6 GiB QEMU VM with "hugetlb_cma=2G": # cat /proc/zoneinfo | grep cma cma 0 nr_free_cma 0 cma 0 nr_free_cma 0 cma 524288 nr_free_cma 493016 cma 0 cma 0 # cat /proc/meminfo | grep Cma CmaTotal: 2097152 kB CmaFree: 1972064 kB Note: We track/print only with CONFIG_CMA; "nr_free_cma" in /proc/zoneinfo is currently also printed without CONFIG_CMA. Cc: Andrew Morton Cc: Thomas Gleixner Cc: "Peter Zijlstra (Intel)" Cc: Mike Rapoport Cc: Oscar Salvador Cc: Michal Hocko Cc: Wei Yang Cc: linux-api@vger.kernel.org Signed-off-by: David Hildenbrand --- v1 -> v2: - Print/track only with CONFIG_CMA - Extend patch description --- include/linux/mmzone.h | 6 ++++++ mm/page_alloc.c | 1 + mm/vmstat.c | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index ae588b2f87ef..27d22fb22e05 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -503,6 +503,9 @@ struct zone { * bootmem allocator): * managed_pages = present_pages - reserved_pages; * + * cma pages is present pages that are assigned for CMA use + * (MIGRATE_CMA). + * * So present_pages may be used by memory hotplug or memory power * management logic to figure out unmanaged pages by checking * (present_pages - managed_pages). And managed_pages should be used @@ -527,6 +530,9 @@ struct zone { atomic_long_t managed_pages; unsigned long spanned_pages; unsigned long present_pages; +#ifdef CONFIG_CMA + unsigned long cma_pages; +#endif const char *name; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b031a5ae0bd5..9a82375bbcb2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2168,6 +2168,7 @@ void __init init_cma_reserved_pageblock(struct page *page) } adjust_managed_page_count(page, pageblock_nr_pages); + page_zone(page)->cma_pages += pageblock_nr_pages; } #endif diff --git a/mm/vmstat.c b/mm/vmstat.c index 7758486097f9..957680db41fa 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1650,6 +1650,11 @@ static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat, zone->spanned_pages, zone->present_pages, zone_managed_pages(zone)); +#ifdef CONFIG_CMA + seq_printf(m, + "\n cma %lu", + zone->cma_pages); +#endif seq_printf(m, "\n protection: (%ld", -- 2.29.2