From patchwork Tue Jun 11 21:55:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiaqi Yan X-Patchwork-Id: 13694214 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 1DEEEC27C78 for ; Tue, 11 Jun 2024 21:55:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 51DF06B00EB; Tue, 11 Jun 2024 17:55:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4CC7D6B00EC; Tue, 11 Jun 2024 17:55:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 36EBE6B00ED; Tue, 11 Jun 2024 17:55:53 -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 1940E6B00EB for ; Tue, 11 Jun 2024 17:55:53 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 954CE407B1 for ; Tue, 11 Jun 2024 21:55:52 +0000 (UTC) X-FDA: 82219965744.20.DE3446E Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf24.hostedemail.com (Postfix) with ESMTP id C98DE180003 for ; Tue, 11 Jun 2024 21:55:50 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=acjaPvW4; spf=pass (imf24.hostedemail.com: domain of 35cdoZggKCFI32uA2Iu708805y.w86527EH-664Fuw4.8B0@flex--jiaqiyan.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=35cdoZggKCFI32uA2Iu708805y.w86527EH-664Fuw4.8B0@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718142950; a=rsa-sha256; cv=none; b=BPxY0hhINcxuw1qK0rCAaxeWaWiGCZFpqG69dtPI+j9QdDYEF5WfkjJJYknu9vuP/nqg0m N15BGVYOpduwx3zJYhd7wYP/QO24KwFEGp3r8q/qMX31L5MBNNKwUW1WMFrm4q5frL9K26 SxNLysIz1eyrJeOh3uX+BbRbPVhMStc= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=acjaPvW4; spf=pass (imf24.hostedemail.com: domain of 35cdoZggKCFI32uA2Iu708805y.w86527EH-664Fuw4.8B0@flex--jiaqiyan.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=35cdoZggKCFI32uA2Iu708805y.w86527EH-664Fuw4.8B0@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718142950; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mS9HbFalMzShQT+POycEgy4uFajHDbIF3DAxgE060+U=; b=cMfKiIW9Sqq8iPhZH8CUxPfNIFFQwil4r2lJ/qvE9zRDBlw2Tacm7xhhD7h/K9zkATKXkU QS1nufp63ueOUBM6yu4ylHmVM/SYLdf6IFLEXfqiP1S0+b6RzAh+wpfp3ryasbcAmqVVsi 6ot+FOYDrBRQQWw/wU+61Lc89qqzh+o= Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-1f66f2e4cc7so16462045ad.3 for ; Tue, 11 Jun 2024 14:55:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718142950; x=1718747750; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=mS9HbFalMzShQT+POycEgy4uFajHDbIF3DAxgE060+U=; b=acjaPvW4JPWTn8GgwW88AEiiYtGlJ/GEYTCTsI+KRA1SGNlGguR/SYO2pQGPNbt2Oc ro8sHpxNvcXKNc7KxBxsNDNUbX1Buhh5+EFgIPYEQg7ZyG932OpmJwJQ6+OaQfydiKZI Jf03tGLnB+beqpHs196F29rshsjKX5q3XLAiv5iHeL1TC5NsrqPrC2nQ5GFzUofys2R0 5Y3vuKYNt3NbqPNauHe6D+UJuTZ78F+AF95h/YJpyNL2iJufnJ2Cf+VS6IytKUTwYi6v 35t1dT0XoYlFVCioHHRhJ7TSDOYuG5vqOaBzt8otFqwOMSdEJ5OMcsNH3qdCjgwr3bhz N4mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718142950; x=1718747750; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mS9HbFalMzShQT+POycEgy4uFajHDbIF3DAxgE060+U=; b=uEo9gFnWRM1xwaGWF4Xw1uau13qv4CwInrTSVE9fqifPHdK339Yr6ylvE/TZm5rnwq +tZpjL3iyPsmiRFmvVVeFKSawA3LMr2O6Vv2C5CR/ZQMgGhwuLgaAEOSpnS5qZEOQ1cm 0TpRipMt8VsgN4EX+X5brsAm6mX6awv3kCo5Yinrk57l0APQLPgRHEJRi88nM1aC7iBy 6xuIih4xt3jTnDojR9PhcLW5eed5F4+oXpok83Fv7y2vRQwPY/Y2Yvf6+QAB3ZleH0CQ e0UIWWkzBHSSDYzIizeNZmhuXIb7oRvIeQg5LaeYM4TGnzyzGQruUhTpYL5wzpClpFSA bWSg== X-Forwarded-Encrypted: i=1; AJvYcCXeHv8B5CQgJIEG8fJiyy+Z017O85Ml0Jhf8ofwVeltErrxJTdDwpvG7qQh1OfHcM18r6wwFScex7JGXFllx6mj8QU= X-Gm-Message-State: AOJu0Ywg5/BB1ePizLn6HScqOACdaU94VUV+vBhcUQKkyeB1EFUA63M/ 1IlT4yUskbzBIkIkn7u17PbsUHKPb9yTD82UPxUF+ZOq9ETlIzukzW0gL1X++Grvani6s/n+WJm Zi5OufBI3fQ== X-Google-Smtp-Source: AGHT+IGVkIg7JWk4rLuAJDkogTWXTNBHCMXhvn7voGGCzQonk6iU8r5R/xu3mAl2mpNPj9KUz+/q9QkmMw61NQ== X-Received: from yjq3.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:272f]) (user=jiaqiyan job=sendgmr) by 2002:a17:902:c411:b0:1f6:daf7:1c18 with SMTP id d9443c01a7336-1f83b5da3b1mr6705ad.2.1718142949584; Tue, 11 Jun 2024 14:55:49 -0700 (PDT) Date: Tue, 11 Jun 2024 21:55:42 +0000 In-Reply-To: <20240611215544.2105970-1-jiaqiyan@google.com> Mime-Version: 1.0 References: <20240611215544.2105970-1-jiaqiyan@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240611215544.2105970-2-jiaqiyan@google.com> Subject: [PATCH v2 1/3] mm/memory-failure: userspace controls soft-offlining pages From: Jiaqi Yan To: nao.horiguchi@gmail.com, linmiaohe@huawei.com, jane.chu@oracle.com Cc: muchun.song@linux.dev, akpm@linux-foundation.org, shuah@kernel.org, corbet@lwn.net, osalvador@suse.de, rientjes@google.com, duenwen@google.com, fvdl@google.com, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Jiaqi Yan X-Stat-Signature: cqehetiije7c9euytzu4t46do8eirt5i X-Rspamd-Queue-Id: C98DE180003 X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1718142950-322955 X-HE-Meta: U2FsdGVkX19pkWGZ1fj5/h5ILfZkVadehskHivAwHGnMf0KFdng2FENSn186gY6lhn6o4GQ34bzhWl8XdkKaAz7BZXmgNAGVr7nCPM0mbNdh2SYpo082bnnulrJhYa4o5Supdhh4IElwuL8UURGxfmdcrhaOZmJ/OCaNWOhJiSmwK55+DbI863m4SoAK2+wcw0hDc5U6A8dEKy6DemstVf9Cx1V2lJ82pmNwsYVw26wigvI95RU9hQcg/V/0er1c5W+2LwJ/OggLgc/Xojh64Rw6uPoeWPCnGFN4jh3Xh9TPpdyFoK2Ql9eaWoCAR3g9A19sLkWAAjasHARWHAMZialKiD4QGuWtJ53R7lkfMIvEvhlonQx9mC89QkIDRUDyr6p00YYLs0VkMWIuOLvnenVX/1Ulfwlu0XpT+iupKbi1SOb+wSl8e5tyreYruH3po2LmdJpoGAXYVRQArAS/RpEJgPmi57bqqfZK5G7bvgxRZRNOECRMHzS8MQ2i1/CVzXbQGAdkXOXTj2f1H0k1Yz6XoOthbRdFQ8JAH0Yc/FckJGNrNbmotMyMLTLp3m61pQJ88hD05jkNtOMZurLbqapt3kdJtBZzGz41u/TDGYhH/XaDyEqOYa0mDI0rR2vMdsNtd5VTV3YzsUC/jOOabjYeio9ep4eYGngjKyOdRy01YiuYkACcv2k4PZNJka+k+eo68HLhQ8QF+a/pB/P4O/4OomueW97nmHfKY0N+Me5RxbuFpnUfbpyONTIt+ovSSsUK1/5eeyLLIaitMVM+TCCH+Q/Nkh7wI0TOYKwT8v80+Kv2nNSL1WA3L+zqiWDlAiiyqkppiU7wf0WXVyifScaccAUjMZnBXYX2FQ9EsYQlPRPv2jhUkCJGgQ6S2nAcedRHwjg/3A2gJx+fs9zM7wArARI9VqDYU3tf98hsSPL6SlUvxfDKJJU09P4GvulYBQPifn/XMfW9ewRaja+ 4ZaZ/WTS jEaFGsKD4MqpZbA+IiPk0ta/uavt33Xu9xZuQsvYUWTAyTBtfohWbs6W98o3siLHwg0Escfy9h1gA1XsgSzl4ldPp+4CacP0Db4eYLpB9dD167V+/3DhuRZqyidkRD5XAb3GmQZfw5l46vP6qF5vSxt4DdDrvjUIJy0UdK/YmoI4T4wWpo1hY74cmg4APNIKPaoPMr1DPft5HGYP0KIZEyqyDBA8Gmu8NQOh3p92cMMEl8RwUP/dz5yqf9YpK1zG1PGgeKdwVLu2EiBOupCKPHRUDntlAVWQftUA1gtfflmaWxnFzYHwOzs+FKdVYA0A2/sLaY64GzmBt5xYWaZ0ZHfYrPcPFsKo2+gUOdy4hK+cGP6lmZxXN4BhOx/U5Q0L7STmMnTszA1AarWRxwZad+Ujv1IYrLWf5obAbCC/jcpYaLOnJJp6g8HAxOSAgAnMhROz6adV3I+MIzgPWa08Dw3iQrUzs+xnLYFBxMW364czEqrgDqcdODHFhvR43w2vBnJyotGj3Sye3MhZoMQSb1+F9jV+km0lp6v//dqZlug1WmSzBxhpEGDficXZSGdLEXyTgDnxL8vITe7ayGJf/Y8Bpi1TUkSiiwfYD 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: Correctable memory errors are very common on servers with large amount of memory, and are corrected by ECC. Soft offline is kernel's additional recovery handling for memory pages having (excessive) corrected memory errors. Impacted page is migrated to a healthy page if inuse; the original page is discarded for any future use. The actual policy on whether (and when) to soft offline should be maintained by userspace, especially in case of an 1G HugeTLB page. Soft-offline dissolves the HugeTLB page, either in-use or free, into chunks of 4K pages, reducing HugeTLB pool capacity by 1 hugepage. If userspace has not acknowledged such behavior, it may be surprised when later mmap hugepages MAP_FAILED due to lack of hugepages. In case of a transparent hugepage, it will be split into 4K pages as well; userspace will stop enjoying the transparent performance. In addition, discarding the entire 1G HugeTLB page only because of corrected memory errors sounds very costly and kernel better not doing under the hood. But today there are at least 2 such cases: 1. GHES driver sees both GHES_SEV_CORRECTED and CPER_SEC_ERROR_THRESHOLD_EXCEEDED after parsing CPER. 2. RAS Correctable Errors Collector counts correctable errors per PFN and when the counter for a PFN reaches threshold In both cases, userspace has no control of the soft offline performed by kernel's memory failure recovery. This commit gives userspace the control of softofflining any page: kernel only soft offlines raw page / transparent hugepage / HugeTLB hugepage if userspace has agreed to. The interface to userspace is a new sysctl called enable_soft_offline under /proc/sys/vm. By default enable_soft_line is 1 to preserve existing behavior in kernel. Signed-off-by: Jiaqi Yan --- mm/memory-failure.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index d3c830e817e3..23415fe03318 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -68,6 +68,8 @@ static int sysctl_memory_failure_early_kill __read_mostly; static int sysctl_memory_failure_recovery __read_mostly = 1; +static int sysctl_enable_soft_offline __read_mostly = 1; + atomic_long_t num_poisoned_pages __read_mostly = ATOMIC_LONG_INIT(0); static bool hw_memory_failure __read_mostly = false; @@ -141,6 +143,15 @@ static struct ctl_table memory_failure_table[] = { .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE, }, + { + .procname = "enable_soft_offline", + .data = &sysctl_enable_soft_offline, + .maxlen = sizeof(sysctl_enable_soft_offline), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_ZERO, + .extra2 = SYSCTL_ONE, + } }; /* @@ -2771,6 +2782,11 @@ int soft_offline_page(unsigned long pfn, int flags) bool try_again = true; struct page *page; + if (!sysctl_enable_soft_offline) { + pr_info("soft offline: %#lx: OS-wide disabled\n", pfn); + return -EINVAL; + } + if (!pfn_valid(pfn)) { WARN_ON_ONCE(flags & MF_COUNT_INCREASED); return -ENXIO; From patchwork Tue Jun 11 21:55:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiaqi Yan X-Patchwork-Id: 13694215 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 8C690C27C65 for ; Tue, 11 Jun 2024 21:55:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A9D9A6B00ED; Tue, 11 Jun 2024 17:55:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A4B7D6B00EE; Tue, 11 Jun 2024 17:55:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8ECBB6B00EF; Tue, 11 Jun 2024 17:55:54 -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 6FD806B00ED for ; Tue, 11 Jun 2024 17:55:54 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 1C0B412078E for ; Tue, 11 Jun 2024 21:55:54 +0000 (UTC) X-FDA: 82219965828.28.547ED11 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by imf02.hostedemail.com (Postfix) with ESMTP id 516338000C for ; Tue, 11 Jun 2024 21:55:52 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=gDchoHc0; spf=pass (imf02.hostedemail.com: domain of 358doZggKCFQ54wC4Kw92AA270.yA8749GJ-886Hwy6.AD2@flex--jiaqiyan.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=358doZggKCFQ54wC4Kw92AA270.yA8749GJ-886Hwy6.AD2@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718142952; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=gyQTVglq7Cwm4lMbb1naXFnTTx4rj2liHiRoRZq6pME=; b=8ls+us7drHsxUF6v2WgyBJDLv78ZMFwxriShQZN7kz/JyyAAbMo80GK5nLBycLAwgeUpJj WZWcCoch/fbE+r6u02bKGrVijeQprcurdL8CE9UUQWyZukVONqoUA1LUkCzG7qUAGxrD8R yI67cO7GdRGUFkFzDexi09b/DPIQeqQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718142952; a=rsa-sha256; cv=none; b=VJOrvx0RpDDmIN7/62h0u2sLh5tugnPCR6GZZmuzzYPoSYqwsFPWaNCZ7G/XhxI/HRsKB1 L/UKktSHa924/oKQs+T1gSGiRYhmohhdeLCIJYdTyPFL/AxOICr1FpLgyZzW7rbLrfgA3g hCwjkoU0++uQ0pidhi2hh8v/7Yy+nIs= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=gDchoHc0; spf=pass (imf02.hostedemail.com: domain of 358doZggKCFQ54wC4Kw92AA270.yA8749GJ-886Hwy6.AD2@flex--jiaqiyan.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=358doZggKCFQ54wC4Kw92AA270.yA8749GJ-886Hwy6.AD2@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dfe25446483so381580276.0 for ; Tue, 11 Jun 2024 14:55:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718142951; x=1718747751; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=gyQTVglq7Cwm4lMbb1naXFnTTx4rj2liHiRoRZq6pME=; b=gDchoHc0CuK1D9wN1MihB2CfQe4r8MQsrGJYaC2iJb4Q3dNreDP5IZ6tWh/Zauk/Tu eRDj4u3Yt4csG3jyGSOHbKSYfEVIZz4Nc04UlYPgU6zt4p+kVyHv1OM2YQGFqccvMS2L 4ZorXX7d57aDUB5Hp6rUId9Gu249Itpz6KOWdUJM2+KTCWO+0e2R7RiSswVqyUqmvrMY BcHNKyLb2L/5VSkCDUG64BbiOT5KLHduC+TzhndseqzhdvOja7vl7+4bJHSCSj4AhWWh op5PvwJA18L+cJGR1CUmc8LPSqyF/A4wLv3YQ7BQfMdmwVskl3RPW9fOPgP4129ngoYa DQ8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718142951; x=1718747751; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gyQTVglq7Cwm4lMbb1naXFnTTx4rj2liHiRoRZq6pME=; b=Qp/yLmQ6PkksnBIRtchKdSSXK833JiWUoBybj9+A5iRrWfWyn+7fSswAM77j1B9lxR ED4FkljlnrVD5awqD0c0NfcQawBGRUZphDVw5g8eFTOxtmfOoU3NXAOMlByQmftnkyUH Np5pPdXJM+H/4umMMHxyOLFLTKx/zCCCxDq5jHRnIswhcPdXMOapmwH30CcuC63sk0AN 3aSYP1W0ZlehyNp7n1kJgYkP1U0HQfkRg3TzmDAyRg2pqb1EYlG1g0kCDfBx3+mq7huG ZdC546HQ610nkCDj5mD7Z/42S3hjHJyew0RZtlBHPxOZxs8Nt6DoIm9Kluzou8BzuCnp U59A== X-Forwarded-Encrypted: i=1; AJvYcCUjiBXh1Js8r6D9FvXhjXfoz3IDtGVn7FMR+OAVXb7MZz/AZc5nri4uFOx+BrsQec8jfuZSdnbfXnI/GGlSbqr82jw= X-Gm-Message-State: AOJu0Yw4EmjOCvlly/2Ska6B7whwNHGYroQuAUQ248UPr2eduSUBTTSv YYJGojPOnVAwftH/uFvreqy5rWioH/j9hlpPRHfQlqu9G+mAdmFClBoG0TuJLazl4VgLG+M0Yfk Wxhxd1hg+1Q== X-Google-Smtp-Source: AGHT+IEHVqmqrs5fNX0G2Rm+19MY544u/GPqOHKCJXOP123n1O4Le3p4ZuHF3jDVgujwWTc0zwNSeaeRWk5Crg== X-Received: from yjq3.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:272f]) (user=jiaqiyan job=sendgmr) by 2002:a05:6902:1248:b0:df4:a393:8769 with SMTP id 3f1490d57ef6-dfaf65ba959mr1328238276.9.1718142951291; Tue, 11 Jun 2024 14:55:51 -0700 (PDT) Date: Tue, 11 Jun 2024 21:55:43 +0000 In-Reply-To: <20240611215544.2105970-1-jiaqiyan@google.com> Mime-Version: 1.0 References: <20240611215544.2105970-1-jiaqiyan@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240611215544.2105970-3-jiaqiyan@google.com> Subject: [PATCH v2 2/3] selftest/mm: test enable_soft_offline behaviors From: Jiaqi Yan To: nao.horiguchi@gmail.com, linmiaohe@huawei.com, jane.chu@oracle.com Cc: muchun.song@linux.dev, akpm@linux-foundation.org, shuah@kernel.org, corbet@lwn.net, osalvador@suse.de, rientjes@google.com, duenwen@google.com, fvdl@google.com, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Jiaqi Yan X-Stat-Signature: oeygqyjcnc4ibzfhacu1uecncbm8g7ni X-Rspamd-Queue-Id: 516338000C X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1718142952-76231 X-HE-Meta: U2FsdGVkX1+Matd8mvM0VunTzrknszFGvu+LxbRL94dLHDU1bSB1CXK2oq+ueYAxV4WUqWUnc85Y3fOMaO4fVGTXZ3sJqYe+zz9d9xVKRYbb9rCE/6l2MV4489nn3/7QCpSbos1apf5HQOnFCGKf8yOpmf7AOig6TdfFPCJYE0z5DGwvtiyVqzPdabn4rXe3U8H+xbiZLT/v2KWGtRLC/fNwl7hguWGhradPM9GhegVdhq4nQdogDXke4SBofZSAsb3Hs91kRhmISWRAxbLgNooKDMorD2b5QG1xuHQ2ZgpIjHZRlWSt9p/c/c6ELIhUMsuVGCCSj7b/S1TpwtvV6HEt/i8xrLZkWig9l02xpbkidOXwsIcneefjeDQARPhvnpDjeYoxUdEZwqfUPmXMPvt90LolmJ8C02P9DKJPN9aC7u/AleG9S2xapZxICAv06uUlEft9Xp531y2mpobI4V2f5DQDBu336mS5ZIU/+B5F/m7YZfUQPefnj95mSa1VQKR6IeBUt+9T+maNng8P6O5tim6F/0i6aY2m4vBwC40LN2QEzaKD3r5NglbtbHhLOvxgVjBj/jGhnB81fa/VGQEZxQVRAiRJOhVGXt9uXsk3KRpuAze+lRaXgugWKLGymrXcZ+RIkF8DicnWtFLXHuGGOtbjAfA1yycfXt9OeSl+fSZLSbPc8BGHg+duz8hnA8GpSXFn0YPndI6kKCa2Hag3o7Aq3BOE8uqIVdrgXN4fGMzi3892OGoiKvtX1bjOO1QgOSaW83VqTsBLPzN6HGj0KxZotBo+4fFcB5PszKjlqSCfA5gnpO6Zy92hCy1AthHpYxr05C80etMgOx/rlv4+9ASDkN7Mh2/Wz7jaOR14AKWTtJtMNtKtNhNrAbVmbo+h9FPeZS7Gs77v6ZXDmLahtUPTDflwvsIrMg47jexMI7E5gm9OISy1GvQm1Fd6YuscTsMR4Mr9CbKtGCJ 3vo7EqIL loamhRw/TP8zdJ40DyMz2rX3F2w/xUKGFTQS4f2deD/ZWAdeoqz5UGxcvXpscNxAgmjy2+PorKOSq2iy1jBMyJfHjLhTP0CiutBgiuqTL6qaB2VU9Y4++rWj4KIFwJYsoB4veqHo21dbZq7kdYB1197eMz/eyMDCsEye4sPXGLj99IPzo14cLfZt+HSa42TqJQkHjFd1wIPxUXmsO3wVDakNOJOaGNjmWiZf/4fCOKUJC2dc4jnuRDPq/s6LZW6S2dLbU4+tGEzGdCq0Lcn8vxfBxHPsZOjg/gBcAfBzlqbgPfOck3Hrsz4gkAVn7tJH0Fg4/QrMjyR8LG2/ZeepFNXiNabzFDdH+xnNm6avvqr2b1Gr5f3cTgu7i+Xikks0LS8XZ4d8uCYEbuJLlRPMCBiuapkaZoi9rAa+2+qv+H6UKc6OKbsWTU9dhISfi4xNvnQC6eJYOh2sr8yqG7LJPUMCI1ltcafxb8Uko7XYIl99gcrftgLYGfh0U/fIByMi6LQAV8QlZ+ufNc9z/LI3b2DngxRNNOgT5Cz9RN4pqhStT5PSEes+95Nf5lP2EwOYDuvVSmhSC5OIr5Tp2pYZc5XIPlVyf7iYAM9Qiu2hatT6nuQqxA9jhE/ocGAApBDVB6AFB9DlufHvJKFLOkTAjobapHA== 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 regression and new tests when hugepage has correctable memory errors, and how userspace wants to deal with it: * if enable_soft_offline=0, mapped hugepage is soft offlined * if enable_soft_offline=1, mapped hugepage is intact Free hugepages case is not explicitly covered by the tests. Hugepage having corrected memory errors is emulated with MADV_SOFT_OFFLINE. Signed-off-by: Jiaqi Yan --- tools/testing/selftests/mm/.gitignore | 1 + tools/testing/selftests/mm/Makefile | 1 + .../selftests/mm/hugetlb-soft-offline.c | 258 ++++++++++++++++++ tools/testing/selftests/mm/run_vmtests.sh | 4 + 4 files changed, 264 insertions(+) create mode 100644 tools/testing/selftests/mm/hugetlb-soft-offline.c diff --git a/tools/testing/selftests/mm/.gitignore b/tools/testing/selftests/mm/.gitignore index 0b9ab987601c..064e7b125643 100644 --- a/tools/testing/selftests/mm/.gitignore +++ b/tools/testing/selftests/mm/.gitignore @@ -6,6 +6,7 @@ hugepage-shm hugepage-vmemmap hugetlb-madvise hugetlb-read-hwpoison +hugetlb-soft-offline khugepaged map_hugetlb map_populate diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/mm/Makefile index 3b49bc3d0a3b..d166067d75ef 100644 --- a/tools/testing/selftests/mm/Makefile +++ b/tools/testing/selftests/mm/Makefile @@ -42,6 +42,7 @@ TEST_GEN_FILES += gup_test TEST_GEN_FILES += hmm-tests TEST_GEN_FILES += hugetlb-madvise TEST_GEN_FILES += hugetlb-read-hwpoison +TEST_GEN_FILES += hugetlb-soft-offline TEST_GEN_FILES += hugepage-mmap TEST_GEN_FILES += hugepage-mremap TEST_GEN_FILES += hugepage-shm diff --git a/tools/testing/selftests/mm/hugetlb-soft-offline.c b/tools/testing/selftests/mm/hugetlb-soft-offline.c new file mode 100644 index 000000000000..d37d68a433e7 --- /dev/null +++ b/tools/testing/selftests/mm/hugetlb-soft-offline.c @@ -0,0 +1,258 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Test soft offline behavior for HugeTLB pages: + * - if enable_soft_offline = 0, hugepages should stay intact and soft + * offlining failed with EINVAL. + * - if enable_soft_offline = 1, a hugepage should be dissolved and + * nr_hugepages/free_hugepages should be reduced by 1. + * + * Before running, make sure more than 2 hugepages of default_hugepagesz + * are allocated. For example, if /proc/meminfo/Hugepagesize is 2048kB: + * echo 8 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + */ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#ifndef MADV_SOFT_OFFLINE +#define MADV_SOFT_OFFLINE 101 +#endif + +#define PREFIX " ... " +#define EPREFIX " !!! " + +enum test_status { + TEST_PASS = 0, + TEST_FAILED = 1, + // From ${ksft_skip} in run_vmtests.sh. + TEST_SKIPPED = 4, +}; + +static enum test_status do_soft_offline(int fd, size_t len, int expect_ret) +{ + char *filemap = NULL; + char *hwp_addr = NULL; + const unsigned long pagesize = getpagesize(); + int ret = 0; + enum test_status status = TEST_SKIPPED; + + if (ftruncate(fd, len) < 0) { + perror(EPREFIX "ftruncate to len failed"); + return status; + } + + filemap = mmap(NULL, len, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_POPULATE, fd, 0); + if (filemap == MAP_FAILED) { + perror(EPREFIX "mmap failed"); + goto untruncate; + } + + memset(filemap, 0xab, len); + printf(PREFIX "Allocated %#lx bytes of hugetlb pages\n", len); + + hwp_addr = filemap + len / 2; + ret = madvise(hwp_addr, pagesize, MADV_SOFT_OFFLINE); + printf(PREFIX "MADV_SOFT_OFFLINE %p ret=%d, errno=%d\n", + hwp_addr, ret, errno); + if (ret != 0) + perror(EPREFIX "madvise failed"); + + if (errno == expect_ret) + status = TEST_PASS; + else { + printf(EPREFIX "MADV_SOFT_OFFLINE should ret %d\n", expect_ret); + status = TEST_FAILED; + } + + munmap(filemap, len); +untruncate: + if (ftruncate(fd, 0) < 0) + perror(EPREFIX "ftruncate back to 0 failed"); + + return status; +} + +static int set_enable_soft_offline(int value) +{ + char cmd[256] = {0}; + FILE *cmdfile = NULL; + + if (value != 0 && value != 1) + return -EINVAL; + + sprintf(cmd, "echo %d > /proc/sys/vm/enable_soft_offline", value); + cmdfile = popen(cmd, "r"); + + if (cmdfile == NULL) + perror(EPREFIX "failed to set enable_soft_offline"); + else + printf(PREFIX "enable_soft_offline => %d\n", value); + + pclose(cmdfile); + return 0; +} + +static int read_nr_hugepages(unsigned long hugepage_size, + unsigned long *nr_hugepages) +{ + char buffer[256] = {0}; + char cmd[256] = {0}; + + sprintf(cmd, "cat /sys/kernel/mm/hugepages/hugepages-%ldkB/nr_hugepages", + hugepage_size); + FILE *cmdfile = popen(cmd, "r"); + + if (!fgets(buffer, sizeof(buffer), cmdfile)) { + perror(EPREFIX "failed to read nr_hugepages"); + pclose(cmdfile); + return -1; + } + + *nr_hugepages = atoll(buffer); + pclose(cmdfile); + return 0; +} + +static int create_hugetlbfs_file(struct statfs *file_stat) +{ + int fd; + + fd = memfd_create("hugetlb_tmp", MFD_HUGETLB); + if (fd < 0) { + perror(EPREFIX "could not open hugetlbfs file"); + return -1; + } + + memset(file_stat, 0, sizeof(*file_stat)); + if (fstatfs(fd, file_stat)) { + perror(EPREFIX "fstatfs failed"); + goto close; + } + if (file_stat->f_type != HUGETLBFS_MAGIC) { + printf(EPREFIX "not hugetlbfs file\n"); + goto close; + } + + return fd; +close: + close(fd); + return -1; +} + +static enum test_status test_soft_offline(void) +{ + int fd; + struct statfs file_stat; + unsigned long hugepagesize_kb = 0; + unsigned long nr_hugepages_before = 0; + unsigned long nr_hugepages_after = 0; + enum test_status status = TEST_SKIPPED; + + printf("Test Soft Offline When softoffline_corrected_errors=1\n"); + + fd = create_hugetlbfs_file(&file_stat); + if (fd < 0) { + printf(EPREFIX "Failed to create hugetlbfs file\n"); + return status; + } + + hugepagesize_kb = file_stat.f_bsize / 1024; + printf(PREFIX "Hugepagesize is %ldkB\n", hugepagesize_kb); + + if (set_enable_soft_offline(1)) + return TEST_FAILED; + + if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_before) != 0) + return TEST_FAILED; + + printf(PREFIX "Before MADV_SOFT_OFFLINE nr_hugepages=%ld\n", + nr_hugepages_before); + + status = do_soft_offline(fd, 2 * file_stat.f_bsize, /*expect_ret=*/0); + + if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_after) != 0) + return TEST_FAILED; + + printf(PREFIX "After MADV_SOFT_OFFLINE nr_hugepages=%ld\n", + nr_hugepages_after); + + if (nr_hugepages_before != nr_hugepages_after + 1) { + printf(EPREFIX "MADV_SOFT_OFFLINE should reduced 1 hugepage\n"); + return TEST_FAILED; + } + + return status; +} + +static enum test_status test_disable_soft_offline(void) +{ + int fd; + struct statfs file_stat; + unsigned long hugepagesize_kb = 0; + unsigned long nr_hugepages_before = 0; + unsigned long nr_hugepages_after = 0; + enum test_status status = TEST_SKIPPED; + + printf("Test Soft Offline When softoffline_corrected_errors=0\n"); + + fd = create_hugetlbfs_file(&file_stat); + if (fd < 0) { + printf(EPREFIX "Failed to create hugetlbfs file\n"); + return status; + } + + hugepagesize_kb = file_stat.f_bsize / 1024; + printf(PREFIX "Hugepagesize is %ldkB\n", hugepagesize_kb); + + if (set_enable_soft_offline(0)) + return TEST_FAILED; + + if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_before) != 0) + return TEST_FAILED; + + printf(PREFIX "Before MADV_SOFT_OFFLINE nr_hugepages=%ld\n", + nr_hugepages_before); + + status = do_soft_offline(fd, 2 * file_stat.f_bsize, /*expect_ret=*/EINVAL); + + if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_after) != 0) + return TEST_FAILED; + + printf(PREFIX "After MADV_SOFT_OFFLINE nr_hugepages=%ld\n", + nr_hugepages_after); + + if (nr_hugepages_before != nr_hugepages_after) { + printf(EPREFIX "MADV_SOFT_OFFLINE reduced %lu hugepages\n", + nr_hugepages_before - nr_hugepages_after); + return TEST_FAILED; + } + + return status; +} + +int main(void) +{ + enum test_status status; + + status = test_soft_offline(); + if (status != TEST_PASS) + return status; + + status = test_disable_soft_offline(); + if (status != TEST_PASS) + return status; + + printf("Test Soft Offline All Good!\n"); + return TEST_PASS; +} diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh index 3157204b9047..781117fac1ba 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -331,6 +331,10 @@ CATEGORY="hugetlb" run_test ./thuge-gen CATEGORY="hugetlb" run_test ./charge_reserved_hugetlb.sh -cgroup-v2 CATEGORY="hugetlb" run_test ./hugetlb_reparenting_test.sh -cgroup-v2 if $RUN_DESTRUCTIVE; then +nr_hugepages_tmp=$(cat /proc/sys/vm/nr_hugepages) +echo 8 > /proc/sys/vm/nr_hugepages +CATEGORY="hugetlb" run_test ./hugetlb-soft-offline +echo "$nr_hugepages_tmp" > /proc/sys/vm/nr_hugepages CATEGORY="hugetlb" run_test ./hugetlb-read-hwpoison fi From patchwork Tue Jun 11 21:55:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiaqi Yan X-Patchwork-Id: 13694216 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 5BA9AC27C78 for ; Tue, 11 Jun 2024 21:55:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93DC26B00EE; Tue, 11 Jun 2024 17:55:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8C48B6B00EF; Tue, 11 Jun 2024 17:55:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 765BB6B00F0; Tue, 11 Jun 2024 17:55:56 -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 535F96B00EE for ; Tue, 11 Jun 2024 17:55:56 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 10F7B1A03CA for ; Tue, 11 Jun 2024 21:55:56 +0000 (UTC) X-FDA: 82219965912.12.6338EC8 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) by imf03.hostedemail.com (Postfix) with ESMTP id 48ED22000B for ; Tue, 11 Jun 2024 21:55:54 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=a1eKclT7; spf=pass (imf03.hostedemail.com: domain of 36MdoZggKCFU65xD5LxA3BB381.zB985AHK-997Ixz7.BE3@flex--jiaqiyan.bounces.google.com designates 209.85.215.201 as permitted sender) smtp.mailfrom=36MdoZggKCFU65xD5LxA3BB381.zB985AHK-997Ixz7.BE3@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718142954; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=WHQrsHsxDopyLkSSwJmPkWDGR/C1iA1OobsIIfIGPV4=; b=UMni1CQ1UaPRzCFHh58gVH2EmWSLJq8Vl2rEjXHAquY+gFyGjtVrJ8loDjTVbdcvZifhpa dFzELsZh4Q84TylQK1UMTLWZvTsahkUtfj3wErMwjDE3JJ5YxWhE66lyQBT5CKjwdd1GRo cUOsTphjZleyR1pJlSy1cTeufPxxVBE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718142954; a=rsa-sha256; cv=none; b=2dsqzrb3tLXcwneor+g0dyUSEyHbJARGKNpdaLN6mE5mNDgk30J7aqnj9GGj5SeENAIwNu iSS4+86m+7vowH9wojXOKfv/o14sk/mq/BhedeU+u7xwd7eNiPBKX4yumrdMLy4QbQtR5p ZDe84KjkMQ66lBM59oRXCh2WnFHgrX4= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=a1eKclT7; spf=pass (imf03.hostedemail.com: domain of 36MdoZggKCFU65xD5LxA3BB381.zB985AHK-997Ixz7.BE3@flex--jiaqiyan.bounces.google.com designates 209.85.215.201 as permitted sender) smtp.mailfrom=36MdoZggKCFU65xD5LxA3BB381.zB985AHK-997Ixz7.BE3@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-6658818ad5eso4875824a12.0 for ; Tue, 11 Jun 2024 14:55:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718142953; x=1718747753; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=WHQrsHsxDopyLkSSwJmPkWDGR/C1iA1OobsIIfIGPV4=; b=a1eKclT7gkG+KORgQB99a4OlDXUATOWTA3xdZkY/lKAQZkuAEOMPlRSlAbKRPWcMut ayvQuNoJKIYQm8jRXfKDPw/8V5AjwAKg8gYRLB9DjChF9QzUlYqcJBIHHiH13C91tGO7 8xE9IHYycqFU+hSFh4/A2qUcBtYX7djcbnPnaE3DgCj5+ayESQLTb2oy9PrFYJI4/HZT 9ZwP+voYaLq2qRAOh+eEzL/eawPfATm+4BUq28JkK+LdzgtDLdtZUmJZSmuWvAdqcF3R dOQw5ZHKsPZaw60WBNZJSTtgFJpgBPl7W9bxhG83wZ3mf/Tx/dDO7PAU9Nuahmz9UYcJ 28BQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718142953; x=1718747753; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WHQrsHsxDopyLkSSwJmPkWDGR/C1iA1OobsIIfIGPV4=; b=bxez9JZMEe/p5zI7h68AOlk73dQ4a2THhNLNSybekhWLaup7n+1IA6Xk656dO53WF3 KsN6b9oM9WzdnQ579iAQ9AbFgTLEXCkqFNJ5mahkFEKlZcel6DsMrfpQ3strU8fffJQ1 7qRONHiqV50IjcAPikpllj2J4DTLS32KaOXobHHoPqByVHMQDgW61rFIiU7XEhcZDd1s 7HeKa9ZpOy29lpOWpdnV2xHMdlRxZrpJPN2vWKk+cGE2yz4PsjIkH5cCgykRaoN3vzXJ YyCFoYf4sDmcNDs3N8WQ4G7wL8eFVmVEZwVgJH3zN2OKd5QpMi2Sb97DIXwSUC1CmQmY pYoQ== X-Forwarded-Encrypted: i=1; AJvYcCUyY2HRMh1hOjIEVTlwz8i5zlMeIW0HAkcswzvMUqBFtLoTCiTGSIOA0N8wXqTxfG8ez8knlYmBgLRP6wRejeMi4P0= X-Gm-Message-State: AOJu0YzsagbyrIKJ9LlJHxsEGVWTl/gJUn3uluTjB9RAbIHoo8BLuJZY nOIpXL/OxfLgu7EJcFbu1s3xh9lSbnAUVewj1uBloPLK4lgXDAJ1BzuPz8rZkHtXa6rRbPqC99L NMjez8aNxrA== X-Google-Smtp-Source: AGHT+IE7Hu1Utk6hKZYc2/5v0BAUMc85WtlS2vZJkVYtta2I3YTIOk0Jt9c2VGJfWWlmwXFp1yRF39LVPqKQZw== X-Received: from yjq3.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:272f]) (user=jiaqiyan job=sendgmr) by 2002:a63:20a:0:b0:673:9f86:3f23 with SMTP id 41be03b00d2f7-6e156ce6eccmr32320a12.3.1718142952846; Tue, 11 Jun 2024 14:55:52 -0700 (PDT) Date: Tue, 11 Jun 2024 21:55:44 +0000 In-Reply-To: <20240611215544.2105970-1-jiaqiyan@google.com> Mime-Version: 1.0 References: <20240611215544.2105970-1-jiaqiyan@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240611215544.2105970-4-jiaqiyan@google.com> Subject: [PATCH v2 3/3] docs: mm: add enable_soft_offline sysctl From: Jiaqi Yan To: nao.horiguchi@gmail.com, linmiaohe@huawei.com, jane.chu@oracle.com Cc: muchun.song@linux.dev, akpm@linux-foundation.org, shuah@kernel.org, corbet@lwn.net, osalvador@suse.de, rientjes@google.com, duenwen@google.com, fvdl@google.com, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Jiaqi Yan X-Rspamd-Server: rspam03 X-Stat-Signature: fks874z8z9bduw8gpxh5x31onge667xa X-Rspamd-Queue-Id: 48ED22000B X-Rspam-User: X-HE-Tag: 1718142954-832791 X-HE-Meta: U2FsdGVkX18r6Huw1meRCrbCjgx3uRQvMKISP8iq2t1sQQdMoyutY1UT0M4QfnxJo4Xd58Xb8IOJOJNZeRTI0djAM2h5iu8ut1UA4+eW17t8qu3dLZHULjztOTanaGRVRrV+A39PP+EarboxrNoDa669dJcHY3jIevCNM9MhtzF3Ln90+YfZYyH5IsYYMdTaCJpiNGvtECdpD4yE+HE9V3YGWQiGHUlImcAhZEHAHHmfCoQayhmJtv6tS+uwk0+72PIjvsf4xyBW2iI9MV4T5Mq4o/V+zZJPCREk6Dkv7cbATdFs9aEcIo+kWEIdaTzzTu+X7KBlIUtlyLdKCYT5DxdEltz56U5OUGlJ+W9SzeSO0pUh2aCuxoHRMtxX4xzf3vD/Oab3QLG8ZVeATN6c7dX4XyJZjotJvIp8j4PpTyUnnpSeansPAZetvuJwgIZ7EqvVzogoR/Dzez0cPQkCZ+pREJJFbGWXfEtWgaL1OBmUptZQwMuKSbKTjnN8VQpDy2E1pErfnDeT286yeuRNZSktFGftw3etNLag4Oeh3VKA4YdOEYWUWAvVBMH4Wgv4hghVRb6Upb3sYKwbClBrTSoj5mEB/YZKU3TyuuD77Ngpdh5DQDNsFcnKuJZAFpUO7i9Qcxu0ihjQ9h+mopVDg2sDHGNaFyPd4J5YPuKiXBYgDSCw5R+pyNRZHStbZxV5qzlfeO3ViSuPYADdW1ixk8S6OXG2dMf/8Y9PHeBSWVT/kKm88/bOW6MmHwuqAuTVAEmoP6bKBXW9V+ouKVy4/w+N+fwiqBjrM4fbmXRx9lEK6x5NlcSVU8FIoHyGsuj++R+PVS/Pmeq+HQLaYGNq6ELYvKhKFCrgIK/UvDr0E1fXaGohY4Nd9c9oaDgcHmFqvoZHLTF7sohW33ux2DFSZfYIPfmsXy5aheU5NcJLndUP2/zuylggfNzPRXy92JjJzWJ2UQyMOms7962Wlib edcztGXe 1DOnDzkp2cG+dOM1wm9T0Y0qI1wZhTmGin02cTdXChlVNXza9hR9/eXZWRo9zg3Xmr1NTD4UdgnZhLMRh1K7JGo09gwHOtiaCVYoZp4BwRm5i/6IN/4cp4iBiQtYoRUJMJCPQ/uwlzf2v1rFLtth3I7sCxkjRJsWdVea8PLIzjh22Pl9oTsPgY1AOExSlRgNJZhwq6Iql9+AiPLUU2faejMm7FTteOE+s1a55ZUxU+401l0TWwDSz3QwDuAvKftkoUjdGTHmvo6Otw0Vw2+tF3V3spBV/iXoOxr2hGUPBfh0HRlUHs+Db9lJ+dUq4xWvxy0W1ocCQR2mZPMj1cgStN1S0/zYvHJhnCIcxjieVEw61b+T9Ihh2LREmXtj3Qxsc1ssHzB2OxzacaEkY3FHm7FLC/lSjq5mklmALGxjEFC1fKfwqBkAIlI2PgqdRr8V8YnlnJYOWpZrBich0YBcpuPQpjcRNQwilvjN7aV46dP3MCm+PO2UeYRzBvPqmkAOyQqJQycyyXHUu6HK96vssGzJuPV1GD0sBy6uwkozfASVUPlZ9tQaxxVgMnq5wwbswPE9tsUn4LIS3gQeJmYM+Y9GK/8fbmrubfq8+N+QaXdYIrQiOl3BYOk2pwVTcXz/Ja15IGcA/Gmj+Onc9vbaxaW5Evw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000250, 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 documentation for what enable_soft_offline sysctl is for. Signed-off-by: Jiaqi Yan --- Documentation/admin-guide/sysctl/vm.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Documentation/admin-guide/sysctl/vm.rst b/Documentation/admin-guide/sysctl/vm.rst index e86c968a7a0e..856bb17c07bc 100644 --- a/Documentation/admin-guide/sysctl/vm.rst +++ b/Documentation/admin-guide/sysctl/vm.rst @@ -36,6 +36,7 @@ Currently, these files are in /proc/sys/vm: - dirtytime_expire_seconds - dirty_writeback_centisecs - drop_caches +- enable_soft_offline - extfrag_threshold - highmem_is_dirtyable - hugetlb_shm_group @@ -267,6 +268,20 @@ used:: These are informational only. They do not mean that anything is wrong with your system. To disable them, echo 4 (bit 2) into drop_caches. +enable_soft_offline +=================== +Control whether to soft offline memory pages that have (excessive) correctable +memory errors. It is your call to choose between reliability (stay away from +fragile physical memory) vs performance (brought by HugeTLB or transparent +hugepages). + +When setting to 1, kernel attempts to soft offline the page when it thinks +needed. For in-use page, page content will be migrated to a new page. If +the oringinal hugepage is a HugeTLB hugepage, regardless of in-use or free, +it will be dissolved into raw pages, and the capacity of the HugeTLB pool +will reduce by 1. If the original hugepage is a transparent hugepage, it +will be split into raw pages. When setting to 0, kernel won't attempt to +soft offline the page. Its default value is 1. extfrag_threshold =================