From patchwork Tue Mar 18 07:58:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hao Jia X-Patchwork-Id: 14020535 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 056B1C282EC for ; Tue, 18 Mar 2025 07:58:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 41675280003; Tue, 18 Mar 2025 03:58:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3C49A280001; Tue, 18 Mar 2025 03:58:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 266A2280003; Tue, 18 Mar 2025 03:58:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 0A34E280001 for ; Tue, 18 Mar 2025 03:58:55 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A5B8B57886 for ; Tue, 18 Mar 2025 07:58:54 +0000 (UTC) X-FDA: 83233920588.08.4EAC3E5 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf04.hostedemail.com (Postfix) with ESMTP id C60DC4000B for ; Tue, 18 Mar 2025 07:58:52 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=dC2iiz7W; spf=pass (imf04.hostedemail.com: domain of jiahao.kernel@gmail.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=jiahao.kernel@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742284732; 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=XxXzV7DwlTDF8yOc5L7I2B68LYmEIw24ReUnP4B+up0=; b=05Q3oQ5keL4CcYbpgK1tHYoyQEL1nHQ+E1Kw3cFQD+2BmGzHnIysoYG2hGzl9zQpK5jczY XXwhtN6AHVzJ69zoM8G7MVMz9uLZ00e1gkSA6kHsIJOBOVvIgtqaFqEsvkml/6P6GOT1bP l+PfSv9cowJvqoe68ZOuguyVpN7DnV4= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=dC2iiz7W; spf=pass (imf04.hostedemail.com: domain of jiahao.kernel@gmail.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=jiahao.kernel@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742284732; a=rsa-sha256; cv=none; b=bIG9k6IWr6D+Lioqk0ZIJCo8la7DybY5BAsevh2Y9i+bBA4BaFrykJ71fi5yrth7lVPsXr UljpcwqHakqI9e/1vpWkmgnPafmGqXsn+5+anubZVq11THUcAFjXz0Asp4epKwGqztrqwQ e5snLgN0Hkprax73Zk9yxE0pFxreUkc= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2241053582dso465995ad.1 for ; Tue, 18 Mar 2025 00:58:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742284732; x=1742889532; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XxXzV7DwlTDF8yOc5L7I2B68LYmEIw24ReUnP4B+up0=; b=dC2iiz7WKJbmXRVC5SBr4IbYWTKDMYF4dFJ0zWqW2mZlMbULWr/JSMt6vAkdCqKjRZ iNVOu666o1gYBrWqEf9CicqmKkxu8fgC+ojXelF6WHdh/g9qDG/WT5rhRdeMrQspXB+m ddGX4MtheloBKide6CixvXh6BwHbF40CdMI15GOp4MljJiRG2GxUrC9f0E/gVLyBa6F6 Ph1uh3dZuM1kLrmhxXYviPBp627qs1hbEsPzKhWwqagpI76qOR9NXZIsvXapUq8KMUnE 5QmjpHe+gxLEHfqNPlO14YcjJ3nGMs45jlvaQOxbYN3TOL8r9h2mjyalrM5yXa2QfdEw aacg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742284732; x=1742889532; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XxXzV7DwlTDF8yOc5L7I2B68LYmEIw24ReUnP4B+up0=; b=NDWIkAFUFp6+JYZ2iWDs8nRmqtQefHCxQbrOLtLAQMo+MOQsABbqDm9/S8leZR6J0L iq7NUt35jwpaV/w+VviE4JKGgMr6wUXa0vg8Bl7uObSd+/bIz7HmjC7UJTNvJepQAOg7 1/iCaPeYzl7fzFB0kbKt9LdJQKGgAnHCDAw6FbeFSXtEl/mgakMsjcEfsCOH4REZlcBB CCQcmpOZin3H4OnBaIok74v8sRR1ei/CXlBFuB6kuZTvCn0ibiSp7vnkyWiiv+vhzaa9 Nb2AdfwbO2QOTs63CjAuPm1yvp9tQYf/DaniTVvD4ZJn8m1gTGr2wAwYUOiEwGXDRcLF fZ0Q== X-Forwarded-Encrypted: i=1; AJvYcCXgjRPalELKd1AeXwRXUiHYiFuCZ0aOUlKdfClmnMjHLKBUayi1vIPyO8RhquKMldJI6WcUnLV6ug==@kvack.org X-Gm-Message-State: AOJu0YwqqnMlJ73nZv08t03ewlt9j1SvL/nyhhg/jCpMdc3ft7PsCYdl prN4v0hXkdbv5dzHGvQ8kzwD5nadl/2LZTHV9POT/ftuKl4SbIh9uGapYA== X-Gm-Gg: ASbGncuWm27GreBbUlv17e65nonv8MPP0x8ov0vDL5Deqj2wgqBGv8wgp0zIX46jtnq 56s8dn2RyBqZk8xACQnNm4j8lWvgbmpNR5JRDgLVORoUxwXN3pJRkLWyjXTLNoVRQg1K/UWXKLV kq1l1nsGLfNqdh47LbsvSJYgqvhy8Ea3YoRweztwl65kfI/Pua+ovyfI7zcFHRuA8LsUVJayaYQ yIgiYIe5bgPRUVtPXEgzDf0HjMvWRkzsKRiDorHnci3hiXEkqEMl0q3+UYnTH0PjU290BQg39m9 /nU/O72LEaHZ8mBXN2SdvxD7kW+UH3IbC/GwVUfWNbcIzOqSP+os+D3syn1jCZeD+a8ofHQmcg= = X-Google-Smtp-Source: AGHT+IG70M+3jC0+LlNGEu2YxLMWJbOVsC00G6HIxEPm5SmjKCbYKfZWcOZHy16UHVYEjTwiL26qDg== X-Received: by 2002:a17:903:1a26:b0:224:c46:d166 with SMTP id d9443c01a7336-225e0b18f50mr238963125ad.40.1742284731742; Tue, 18 Mar 2025 00:58:51 -0700 (PDT) Received: from localhost.localdomain ([103.165.80.178]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c6bbfdfesm88149865ad.203.2025.03.18.00.58.46 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 18 Mar 2025 00:58:51 -0700 (PDT) From: Hao Jia To: hannes@cmpxchg.org, akpm@linux-foundation.org, tj@kernel.org, corbet@lwn.net, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, muchun.song@linux.dev, mkoutny@suse.com Cc: cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Hao Jia Subject: [PATCH 1/2] mm: vmscan: Split proactive reclaim statistics from direct reclaim statistics Date: Tue, 18 Mar 2025 15:58:32 +0800 Message-Id: <20250318075833.90615-2-jiahao.kernel@gmail.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) In-Reply-To: <20250318075833.90615-1-jiahao.kernel@gmail.com> References: <20250318075833.90615-1-jiahao.kernel@gmail.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: C60DC4000B X-Rspamd-Server: rspam08 X-Stat-Signature: qbnqiibknr5twmb1z6nz75j1kkosrmg4 X-HE-Tag: 1742284732-320408 X-HE-Meta: U2FsdGVkX181apg0bzt5H0abSoCyYajnEH/JMwrhUoXxLByCQd3dd1Q8eYsDIM+nAAmuHIYqnfU7sdaisKMmIiyDFfnez3g4rLpRA/bLQrvaeoas9tsssvHrzBE7vEI7gIWh0FDAAEuZAntJcRbyWGSWZFprZ/v8rkC5or/UsHDZaZ+MLvd9/d7pE20D9u4agSAU8v3RFzzR/NyXX+/LLCa6ObqLQ2Iv2+XmL4fu3PpFhoBiSxpg/LTLVo6KfkWI7NiSwamTIS39rSBE2gaez9bFjkIKnRCUV+GnV63uMjJscuGMtJY7q6SpgPNke6U5iITPAphNbdPqPXAwq4NaLCH0F/AMg7gSOAGMJBy5PS8boXU7nHl+dZ4NKFikb/vtvCuf0R6qN+G/BQ8EB4M9xb5F7WcwmIizR5ejFevnUfgyy1E7azDIpzUs+ORiCcEQd58P85HMwhnQle9+JT8CLv3i72QIDMSIUowPNifVlfErxwz7WRK4aUkrXBzT/fhjtO0xh91JRpLBopMhqC+atzIv97VDPFz///W4wAVWNXbdPUeHvx8t0MFimSbo/gBWSaXhH9chqjvUAT01oGHG0kPuFZznWqGNOtAjGxb8KLKq8zC66ETam7XTCVMZ93C9CD2tmJqv2Y66ZXBBrZS3MQaD2R1NgaX+AsyC/58+9k72msm/1UkcpXxec9haZvEf83yvEUQX3J0likmkYBOjKIXZnBO+FASonZDKHjlVSIq8JNGc5NKEW8LsV+pc1AmI5/kZgOic6vXmDJXM0Uh67fbojA0eVZeqn6NaKN/IeyeRaqUGJwFmzyuDZE7y0CpHR53BXTq+4ZRwup7XWcLT1dQ1+I3X0n6nnu24xUSzFV5eMiz9YU93m5Dc9LrpOGZtXjqDcsIs8VCBxZNsyy/WdIzMigGdsKQyBSswi9DoHVZU6wz2POyRweAJR+h7mcHJESL0aU/hMgznVY3ehII 2UWJzt6C j78R2RABTyF+Ypu+5hBOmSxJedmOu7pLDYqpdjpr6ouP++vK5gBfS6Fum6kWP85TKuUZfjBFJMV6+TgkevCfLrQ7t7zHWdd0KGOEwum8qFA9tOwviEz+ScJiezf7Fy3x/NR+geQSWtu/vnL1zjG7lqxIlKBAXDk4nmeYR2dI2mxpHRGEtArSVf0MqSR+vp2Q2nObn1+h9mVvloOsyi6PuxuFQcFenWEDO/xyL3BlXfGcAX5/b1xq1S/lYJ9Wd/zeMiVUWzZVxo1TYPjcPKRWcF8a6+dOs+mdaABkiufhM7jloB3+3fVXIT8hlGPtwP9Wvd/jEy3eRZEItKSGqnvLJ2UraZJlaCHFdzfdOXQa53M+mK+7tOZZsVETm15OBODEiCZi1/ROkVnenr+bghawNDrRNsreUZ/bx6YSTfhSE4iBR7dx7DDAEiUkPFvkr5GWPw+ic 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: Hao Jia In proactive memory reclaim scenarios, it is necessary to accurately track proactive reclaim statistics to dynamically adjust the frequency and amount of memory being reclaimed proactively. Currently, proactive reclaim is included in direct reclaim statistics, which can make these direct reclaim statistics misleading. Therefore, separate proactive reclaim memory from the direct reclaim counters by introducing new counters: pgsteal_proactive, pgdemote_proactive, and pgscan_proactive, to avoid confusion with direct reclaim. Signed-off-by: Hao Jia Acked-by: Johannes Weiner --- Documentation/admin-guide/cgroup-v2.rst | 9 +++++++ include/linux/mmzone.h | 1 + include/linux/vm_event_item.h | 2 ++ mm/memcontrol.c | 7 +++++ mm/vmscan.c | 35 ++++++++++++++----------- mm/vmstat.c | 3 +++ 6 files changed, 42 insertions(+), 15 deletions(-) diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst index cb1b4e759b7e..d6692607f80a 100644 --- a/Documentation/admin-guide/cgroup-v2.rst +++ b/Documentation/admin-guide/cgroup-v2.rst @@ -1570,6 +1570,9 @@ The following nested keys are defined. pgscan_khugepaged (npn) Amount of scanned pages by khugepaged (in an inactive LRU list) + pgscan_proactive (npn) + Amount of scanned pages proactively (in an inactive LRU list) + pgsteal_kswapd (npn) Amount of reclaimed pages by kswapd @@ -1579,6 +1582,9 @@ The following nested keys are defined. pgsteal_khugepaged (npn) Amount of reclaimed pages by khugepaged + pgsteal_proactive (npn) + Amount of reclaimed pages proactively + pgfault (npn) Total number of page faults incurred @@ -1656,6 +1662,9 @@ The following nested keys are defined. pgdemote_khugepaged Number of pages demoted by khugepaged. + pgdemote_proactive + Number of pages demoted by proactively. + hugetlb Amount of memory used by hugetlb pages. This metric only shows up if hugetlb usage is accounted for in memory.current (i.e. diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 9540b41894da..69b4996dadc8 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -220,6 +220,7 @@ enum node_stat_item { PGDEMOTE_KSWAPD, PGDEMOTE_DIRECT, PGDEMOTE_KHUGEPAGED, + PGDEMOTE_PROACTIVE, #ifdef CONFIG_HUGETLB_PAGE NR_HUGETLB, #endif diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index f70d0958095c..f11b6fa9c5b3 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -41,9 +41,11 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, PGSTEAL_KSWAPD, PGSTEAL_DIRECT, PGSTEAL_KHUGEPAGED, + PGSTEAL_PROACTIVE, PGSCAN_KSWAPD, PGSCAN_DIRECT, PGSCAN_KHUGEPAGED, + PGSCAN_PROACTIVE, PGSCAN_DIRECT_THROTTLE, PGSCAN_ANON, PGSCAN_FILE, diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4de6acb9b8ec..32e28ab90914 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -315,6 +315,7 @@ static const unsigned int memcg_node_stat_items[] = { PGDEMOTE_KSWAPD, PGDEMOTE_DIRECT, PGDEMOTE_KHUGEPAGED, + PGDEMOTE_PROACTIVE, #ifdef CONFIG_HUGETLB_PAGE NR_HUGETLB, #endif @@ -431,9 +432,11 @@ static const unsigned int memcg_vm_event_stat[] = { PGSCAN_KSWAPD, PGSCAN_DIRECT, PGSCAN_KHUGEPAGED, + PGSCAN_PROACTIVE, PGSTEAL_KSWAPD, PGSTEAL_DIRECT, PGSTEAL_KHUGEPAGED, + PGSTEAL_PROACTIVE, PGFAULT, PGMAJFAULT, PGREFILL, @@ -1390,6 +1393,7 @@ static const struct memory_stat memory_stats[] = { { "pgdemote_kswapd", PGDEMOTE_KSWAPD }, { "pgdemote_direct", PGDEMOTE_DIRECT }, { "pgdemote_khugepaged", PGDEMOTE_KHUGEPAGED }, + { "pgdemote_proactive", PGDEMOTE_PROACTIVE }, #ifdef CONFIG_NUMA_BALANCING { "pgpromote_success", PGPROMOTE_SUCCESS }, #endif @@ -1432,6 +1436,7 @@ static int memcg_page_state_output_unit(int item) case PGDEMOTE_KSWAPD: case PGDEMOTE_DIRECT: case PGDEMOTE_KHUGEPAGED: + case PGDEMOTE_PROACTIVE: #ifdef CONFIG_NUMA_BALANCING case PGPROMOTE_SUCCESS: #endif @@ -1503,10 +1508,12 @@ static void memcg_stat_format(struct mem_cgroup *memcg, struct seq_buf *s) seq_buf_printf(s, "pgscan %lu\n", memcg_events(memcg, PGSCAN_KSWAPD) + memcg_events(memcg, PGSCAN_DIRECT) + + memcg_events(memcg, PGSCAN_PROACTIVE) + memcg_events(memcg, PGSCAN_KHUGEPAGED)); seq_buf_printf(s, "pgsteal %lu\n", memcg_events(memcg, PGSTEAL_KSWAPD) + memcg_events(memcg, PGSTEAL_DIRECT) + + memcg_events(memcg, PGSTEAL_PROACTIVE) + memcg_events(memcg, PGSTEAL_KHUGEPAGED)); for (i = 0; i < ARRAY_SIZE(memcg_vm_event_stat); i++) { diff --git a/mm/vmscan.c b/mm/vmscan.c index c767d71c43d7..fa816cd08ac3 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -441,21 +441,26 @@ void drop_slab(void) } while ((freed >> shift++) > 1); } -static int reclaimer_offset(void) +#define CHECK_RECLAIMER_OFFSET(type) \ + do { \ + BUILD_BUG_ON(PGSTEAL_##type - PGSTEAL_KSWAPD != \ + PGDEMOTE_##type - PGDEMOTE_KSWAPD); \ + BUILD_BUG_ON(PGSTEAL_##type - PGSTEAL_KSWAPD != \ + PGSCAN_##type - PGSCAN_KSWAPD); \ + } while (0) + +static int reclaimer_offset(struct scan_control *sc) { - BUILD_BUG_ON(PGSTEAL_DIRECT - PGSTEAL_KSWAPD != - PGDEMOTE_DIRECT - PGDEMOTE_KSWAPD); - BUILD_BUG_ON(PGSTEAL_KHUGEPAGED - PGSTEAL_KSWAPD != - PGDEMOTE_KHUGEPAGED - PGDEMOTE_KSWAPD); - BUILD_BUG_ON(PGSTEAL_DIRECT - PGSTEAL_KSWAPD != - PGSCAN_DIRECT - PGSCAN_KSWAPD); - BUILD_BUG_ON(PGSTEAL_KHUGEPAGED - PGSTEAL_KSWAPD != - PGSCAN_KHUGEPAGED - PGSCAN_KSWAPD); + CHECK_RECLAIMER_OFFSET(DIRECT); + CHECK_RECLAIMER_OFFSET(KHUGEPAGED); + CHECK_RECLAIMER_OFFSET(PROACTIVE); if (current_is_kswapd()) return 0; if (current_is_khugepaged()) return PGSTEAL_KHUGEPAGED - PGSTEAL_KSWAPD; + if (sc->proactive) + return PGSTEAL_PROACTIVE - PGSTEAL_KSWAPD; return PGSTEAL_DIRECT - PGSTEAL_KSWAPD; } @@ -1986,7 +1991,7 @@ static unsigned long shrink_inactive_list(unsigned long nr_to_scan, &nr_scanned, sc, lru); __mod_node_page_state(pgdat, NR_ISOLATED_ANON + file, nr_taken); - item = PGSCAN_KSWAPD + reclaimer_offset(); + item = PGSCAN_KSWAPD + reclaimer_offset(sc); if (!cgroup_reclaim(sc)) __count_vm_events(item, nr_scanned); __count_memcg_events(lruvec_memcg(lruvec), item, nr_scanned); @@ -2002,10 +2007,10 @@ static unsigned long shrink_inactive_list(unsigned long nr_to_scan, spin_lock_irq(&lruvec->lru_lock); move_folios_to_lru(lruvec, &folio_list); - __mod_lruvec_state(lruvec, PGDEMOTE_KSWAPD + reclaimer_offset(), + __mod_lruvec_state(lruvec, PGDEMOTE_KSWAPD + reclaimer_offset(sc), stat.nr_demoted); __mod_node_page_state(pgdat, NR_ISOLATED_ANON + file, -nr_taken); - item = PGSTEAL_KSWAPD + reclaimer_offset(); + item = PGSTEAL_KSWAPD + reclaimer_offset(sc); if (!cgroup_reclaim(sc)) __count_vm_events(item, nr_reclaimed); __count_memcg_events(lruvec_memcg(lruvec), item, nr_reclaimed); @@ -4545,7 +4550,7 @@ static int scan_folios(struct lruvec *lruvec, struct scan_control *sc, break; } - item = PGSCAN_KSWAPD + reclaimer_offset(); + item = PGSCAN_KSWAPD + reclaimer_offset(sc); if (!cgroup_reclaim(sc)) { __count_vm_events(item, isolated); __count_vm_events(PGREFILL, sorted); @@ -4695,10 +4700,10 @@ static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, int swap reset_batch_size(walk); } - __mod_lruvec_state(lruvec, PGDEMOTE_KSWAPD + reclaimer_offset(), + __mod_lruvec_state(lruvec, PGDEMOTE_KSWAPD + reclaimer_offset(sc), stat.nr_demoted); - item = PGSTEAL_KSWAPD + reclaimer_offset(); + item = PGSTEAL_KSWAPD + reclaimer_offset(sc); if (!cgroup_reclaim(sc)) __count_vm_events(item, reclaimed); __count_memcg_events(memcg, item, reclaimed); diff --git a/mm/vmstat.c b/mm/vmstat.c index 16bfe1c694dd..eff4d833ff8a 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1273,6 +1273,7 @@ const char * const vmstat_text[] = { "pgdemote_kswapd", "pgdemote_direct", "pgdemote_khugepaged", + "pgdemote_proactive", #ifdef CONFIG_HUGETLB_PAGE "nr_hugetlb", #endif @@ -1307,9 +1308,11 @@ const char * const vmstat_text[] = { "pgsteal_kswapd", "pgsteal_direct", "pgsteal_khugepaged", + "pgsteal_proactive", "pgscan_kswapd", "pgscan_direct", "pgscan_khugepaged", + "pgscan_proactive", "pgscan_direct_throttle", "pgscan_anon", "pgscan_file",