From nobody Tue Feb 10 10:19:04 2026 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32850274FD3 for ; Mon, 29 Dec 2025 05:52:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766987541; cv=none; b=Xx/FJfCPzeIlif2a4cy4de+LByDWO7w65tzAkHhp8aCcK5WO45Hj4G/diLzMd7mCgQ/1MypSAV8Vs/RsVjZ8Rt0OHAEJVXGUjUmramEUHScCN9zR7A2lV9uuKaMPuA+0zleVo+I8alfpKNaPsX9idk97FMD5L+MIggnATWG9PFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766987541; c=relaxed/simple; bh=1edMOW9sfIMZ2ZM4j2SyJBQZXvYzK5XyWIWeY1r1Jx0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=grMU9AtNowmBMR4txkPesV7QkUcUAMSINO+xiqCsM8sNAJWzUAfn9eriuqwOZlUkUv1faKEoPBsLLW5zUyEdO1IhLCdSLJrE5H2sxl7Cneb8LkdY+uvbzs7FB3jp6VpQMo0ZNFcMH0vRwmiXndaifqJUpGF8CT5yk58DvbsQasE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IqaPlkSG; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IqaPlkSG" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-7aa9be9f03aso7126654b3a.2 for ; Sun, 28 Dec 2025 21:52:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766987539; x=1767592339; darn=vger.kernel.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=EARtjTW69X1feehvRUMcsBqUnG2mKJGDqG3MBoLBks0=; b=IqaPlkSGnMLze9Uq26b3ImkYc4sDjC+wyS0SVt+ZfJIr2CrKAZDHl8gb3/YhUw3zSL kREexZ1A0dIlcksCuG6b4aqSXewpYwc7wpSQaDmu2HnZV77/5xHaqitEZxwX/D6Pq1lA QgQISzSKTb3mhAZ+6FUgg8DmM5+yWfgbh/QAnVihBTwrWfsp146YBkM7C6t3pTbNSoyB 7NUl37LJjMk8Ft7cod53sDVv7pB4LbfIbISAB3xF+6jdmUVmZR6FN3lW3uah9dARUzlS 1rl1fG0JNK70exHtaf/OUXf+X0dIwnjW6N9JQ0P9Ghdjw/HH2ulab9J/RBTf+RhsnVt2 MZGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766987539; x=1767592339; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=EARtjTW69X1feehvRUMcsBqUnG2mKJGDqG3MBoLBks0=; b=gSQr246mAS3jh9UPHyG91iUtu8hgysC2T5sOgfGPeQo+yy18xWf9x3wEghffBDwMeR jhySOHDtX/XsQME/NhR/gins0T/tR7RBYubBB2V86Tkdq3Hng7/3xI4sbruZtFOuSmbt zaDSBb68+uD7epcGvYY0dVc3O6u8VSrYTOHbXyC26xSITZqO7kcj3ICEPMall1vQUf55 grNEpvT7e2EkiYs3qkr6nCbOE5aVHQWXpa7I+xMoiM6ym//ZJ16cJ+AEEMX1gD8fb09v Hq17Uo66Q8JmBnC+eCQSADzXivKtb/eaMsI+SU4WIT2+L0DuNEQmhmYJwLsTuMyTp2U7 HWvA== X-Forwarded-Encrypted: i=1; AJvYcCV6D2BNj4i8goRZtLkzQOxb9eBlvlqWqWXtRoK8S6DVsMua5U0fl12ceX+2QKhCP+PwLkQXqEzphTqqtdQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9FgDVFFzQm66sRlT6xhKpHur4vMHFlzu/GgPN6f8tkZIvWoLW xS7doWGr1fOy1TVxxnXy1bId9HRMgnfRSoQ2oGznIPObUCxWhqjz3bNa X-Gm-Gg: AY/fxX5WtUTuMjZpk6YDF9/aIJNfe07v96TJ0pBB394Bf/R/JhhM2AJ4hsYJoBgD24t c9IEOXbQOLXb+uYJMp0MMqtx4IEUtpLUKgzplyhqSw1HGSYg3AF5b27tJKvUJNmObVNygtFZIJg AzC0h+5vO5JBBqUqaZ4zhyJNbFdICTkidWdEjCIaQby0ZbVBOUpqNmTwLj24gQHsLh78IXVQLxt a/K4eRpaX/qWVlQTOrwXIEmJ+cOCEepJvuFlTpsZe6h9hEAGiD1s5B26nld2fkqqr1VLvjZY9Ml AxBusTTGsxfs07GYKhyZd7cm48ZHFKhWBoWuIZM+6nceoeSjXpKO4ZkshHLSGcWliR+OADt2vTd XWl+HMEZ7DAiRGyE6yUFtXZ2k27Kg6tYTTy++vJVmmI0NCewbELFtVK8qnaKqjWf394Df44PkJ8 JYyTzs4hAmIgVJLtUdoed6pRAyLIuY X-Google-Smtp-Source: AGHT+IHVi3ccRtDHsngBuCENxg/OidCCTnf3ExwP3w2v4XiSKIa9g0fHlTh7h+pojj04ZQfQ+6JjDw== X-Received: by 2002:a05:6a20:6a08:b0:366:14b0:4b04 with SMTP id adf61e73a8af0-376aa5008c5mr23752758637.64.1766987539272; Sun, 28 Dec 2025 21:52:19 -0800 (PST) Received: from localhost.localdomain ([121.232.80.251]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-34e920c9a7csm26164019a91.0.2025.12.28.21.52.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Dec 2025 21:52:17 -0800 (PST) From: Vernon Yang X-Google-Original-From: Vernon Yang To: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com Cc: ziy@nvidia.com, dev.jain@arm.com, baohua@kernel.org, lance.yang@linux.dev, richard.weiyang@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Vernon Yang Subject: [PATCH v2 2/4] mm: khugepaged: just skip when the memory has been collapsed Date: Mon, 29 Dec 2025 13:51:49 +0800 Message-ID: <20251229055151.54887-3-yanglincheng@kylinos.cn> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251229055151.54887-1-yanglincheng@kylinos.cn> References: <20251229055151.54887-1-yanglincheng@kylinos.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The following data is traced by bpftrace on a desktop system. After the system has been left idle for 10 minutes upon booting, a lot of SCAN_PMD_MAPPED or SCAN_NO_PTE_TABLE are observed during a full scan by khugepaged. @scan_pmd_status[1]: 1 ## SCAN_SUCCEED @scan_pmd_status[6]: 2 ## SCAN_EXCEED_SHARED_PTE @scan_pmd_status[3]: 142 ## SCAN_PMD_MAPPED @scan_pmd_status[2]: 178 ## SCAN_NO_PTE_TABLE total progress size: 674 MB Total time : 419 seconds ## include khugepaged_scan_sleep_millisecs The khugepaged_scan list save all task that support collapse into hugepage, as long as the task is not destroyed, khugepaged will not remove it from the khugepaged_scan list. This exist a phenomenon where task has already collapsed all memory regions into hugepage, but khugepaged continues to scan it, which wastes CPU time and invalid, and due to khugepaged_scan_sleep_millisecs (default 10s) causes a long wait for scanning a large number of invalid task, so scanning really valid task is later. After applying this patch, when the memory is either SCAN_PMD_MAPPED or SCAN_NO_PTE_TABLE, just skip it, as follow: @scan_pmd_status[6]: 2 @scan_pmd_status[3]: 147 @scan_pmd_status[2]: 173 total progress size: 45 MB Total time : 20 seconds Signed-off-by: Vernon Yang --- mm/khugepaged.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 9f99f61689f8..2b3685b195f5 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -66,7 +66,10 @@ enum scan_result { static struct task_struct *khugepaged_thread __read_mostly; static DEFINE_MUTEX(khugepaged_mutex); =20 -/* default scan 8*HPAGE_PMD_NR ptes (or vmas) every 10 second */ +/* + * default scan 8*HPAGE_PMD_NR ptes, pmd_mapped, no_pte_table or vmas + * every 10 second. + */ static unsigned int khugepaged_pages_to_scan __read_mostly; static unsigned int khugepaged_pages_collapsed; static unsigned int khugepaged_full_scans; @@ -2487,12 +2490,22 @@ static unsigned int khugepaged_scan_mm_slot(unsigne= d int pages, int *result, khugepaged_scan.address, &mmap_locked, cc); } =20 - if (*result =3D=3D SCAN_SUCCEED) - ++khugepaged_pages_collapsed; - /* move to next address */ khugepaged_scan.address +=3D HPAGE_PMD_SIZE; - progress +=3D HPAGE_PMD_NR; + + switch (*result) { + case SCAN_NO_PTE_TABLE: + case SCAN_PMD_MAPPED: + case SCAN_PTE_MAPPED_HUGEPAGE: + progress++; + break; + case SCAN_SUCCEED: + ++khugepaged_pages_collapsed; + fallthrough; + default: + progress +=3D HPAGE_PMD_NR; + } + if (!mmap_locked) /* * We released mmap_lock so break loop. Note --=20 2.51.0