From mboxrd@z Thu Jan 1 00:00:00 1970 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 AF81FC47071 for ; Wed, 15 Nov 2023 03:11:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0E0B26B0323; Tue, 14 Nov 2023 22:11:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 091546B0325; Tue, 14 Nov 2023 22:11:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E73E16B0326; Tue, 14 Nov 2023 22:11:36 -0500 (EST) 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 D85866B0323 for ; Tue, 14 Nov 2023 22:11:36 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id AFF0112036A for ; Wed, 15 Nov 2023 03:11:36 +0000 (UTC) X-FDA: 81458713392.15.96B2CB8 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) by imf18.hostedemail.com (Postfix) with ESMTP id CF8341C0004 for ; Wed, 15 Nov 2023 03:11:34 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=no9vKQGv; spf=pass (imf18.hostedemail.com: domain of xu.xin.sc@gmail.com designates 209.85.210.196 as permitted sender) smtp.mailfrom=xu.xin.sc@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700017894; a=rsa-sha256; cv=none; b=asdF4emEdxH6pCUH2YBKKi64iYqzoBT6iS/cF8d0xJmXgZ38nixJm2FFGfk6xbYzuhgpLM EOv7RoA5nkcvs3zGGGUL+2328GD6QvmQoGW3nCmTAP/5u1jyz+2Y43tuXGYtyOMC5P/AxJ uCpz52jIzns0psxOH0xUtSZEMwJhA0w= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=no9vKQGv; spf=pass (imf18.hostedemail.com: domain of xu.xin.sc@gmail.com designates 209.85.210.196 as permitted sender) smtp.mailfrom=xu.xin.sc@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=1700017894; 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=0ZDkwNsNq+X79quW0/EG+q9SX4HEapk0fZkP3MS7px0=; b=ki3rW10tanLQf14iW+kexuAutSI4d7UHRm2Bq3DjHel4Xklzd5yPIYp0cQo8RrQ3RSSPoi zfvWw4SHp/hLnMEBoEpYYzRnf/WfR9xJAtLu4Osu6gs7+nsjG4bu9ROn5UTXjIX/gNSlen u409qzQAPRcwqcaMaYBGKOQX7/u0qHA= Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-6c10f098a27so5096293b3a.2 for ; Tue, 14 Nov 2023 19:11:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700017894; x=1700622694; 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=0ZDkwNsNq+X79quW0/EG+q9SX4HEapk0fZkP3MS7px0=; b=no9vKQGvA0ZLELZzFT9x1r0UXp17lbZPXitqw2PjDBhlT8PdAY7M/YwWTzlQcjItJB szqtk+oDGqCGg72B82i1h2C7pm8LV51qsXMZ06d7ywjIOpJQtO2/U/E52Jnaaet6k60S Zxm0cSNaFP8UEZJu4/c3vQ9YOfg1nytHdZnG6hLuEJuiLWRf1T2ubgf0cG84qxPhVTgU VWI5rXnBG6MF5blkWJVGh7qlhKmBH7C6KMxCkHGPfwICjnK0PHSYkZjlqaKCxpWizYxg J89breos11MiCrcGgnoD2Pv60lZPbR6Xi06kCaTWaS8CpmLa9aAl82yKCGt5L+tYMLCz rPAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700017894; x=1700622694; 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=0ZDkwNsNq+X79quW0/EG+q9SX4HEapk0fZkP3MS7px0=; b=jDNinze2YpWTj1olP3X+kLSVnh+i00Heeg8+7Tz5Ie7hG+Ny/2ccahB3yn1uzMnfWI Gv2zwLCdhX6Gv/aTcyn85sP0j4eOs2rRLUVm5qKloN3SOPc2fHm7M7DA/XFSg1W+hj7O 0dnh6Nnij+WeUxfeDlgzDv8fBT33Q/DC83VijP2XaD9A93ntAUsXz6BoWaaWY4b1/R5D O59bgsfxErOlBaAXAISVHg53GmuF95y/g6aqKRNqZtj6TBlPhreDL2H+UdQZSR58m6bg DNNG9EpAh31kaLtZpT2Y4HDqQ499cLgtN/voRzODz0+sz9bKDtcGP1RM4I/HPxLRjo5T DeUQ== X-Gm-Message-State: AOJu0YwXjdkeb7n1rFPZf776dCAtxD+HP5Rre7QXCh5EIgRX/yP7ltFT oJDq58hX8Uq+E5W2p4za33w= X-Google-Smtp-Source: AGHT+IG1o/fG8d7Eq8VE+C7PkIjGpCGxhDqAFugd3BfFy7cE501Vpo0YeGb45YzYPWTU914xFMAjhg== X-Received: by 2002:a05:6a00:4c8d:b0:68e:2478:d6c9 with SMTP id eb13-20020a056a004c8d00b0068e2478d6c9mr10523019pfb.2.1700017893652; Tue, 14 Nov 2023 19:11:33 -0800 (PST) Received: from localhost.localdomain ([193.203.214.57]) by smtp.gmail.com with ESMTPSA id r1-20020aa78441000000b006933f85bc29sm1893797pfn.111.2023.11.14.19.11.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 19:11:33 -0800 (PST) From: xu X-Google-Original-From: xu To: david@redhat.com Cc: akpm@linux-foundation.org, imbrenda@linux.ibm.com, jiang.xuexin@zte.com.cn, linux-kernel@vger.kernel.org, linux-mm@kvack.org, ran.xiaokai@zte.com.cn, wang.yong12@zte.com.cn, xu.xin.sc@gmail.com, xu.xin16@zte.com.cn, yang.yang29@zte.com.cn Subject: Re: [PATCH] ksm: delay the check of splitting compound pages Date: Wed, 15 Nov 2023 03:11:29 +0000 Message-Id: <20231115031129.1970581-1-xu.xin16@zte.com.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: CF8341C0004 X-Stat-Signature: 5m5gqq45z7ipenwbha7waza6s3kqcn4q X-Rspam-User: X-HE-Tag: 1700017894-954026 X-HE-Meta: U2FsdGVkX1+mt+5lTI7eHFogObYMEcowEfBL9BoOTaoQ2UUb6M0bhCbR3SGFAVAS52OXZ1aPSqX3SkC4WY+Q0b4PvFRvS8wTEtO0O6YPQQc2FAM7vCupCizItTQIjn+vJ2oM7SU2kojD+4B2BbW3brMfi99QqylEbJMgh3x1wDio8zP3pzYUsbD3n4n/iFrxSDKcITejX+egrKcnPAbNWCJYEuNlHLOzKDC1qtwf2wObwJVC0pzM9GkJ4Va7+dHbNvzrCrQdoYgJtoz8+ug+xmZ3AufGVoAloQ6yml0n/tulLHyCFkTX1B3zGNNESRAbqgg0y4ooFcoyoXHP5XYoEhvSccWVKpuN8dXDa79aA2izdPpGquQb3UvwA8fwjtKQ/iROH5tdM+H0v6FwuOAGAU/1oDwpubqn6LytsDX+c3n2jsRsjckiLYCWxhaU0O7Nw+O+vqlUz04Ye9UvDJfxyeR1nQ2Jf886USHgC2p84HCK34JRW/RUb7xSM4httEg26zdTSydUyvQ/RDg1ggjGjzJtS88Xb525nuLJYLsLjDCY0DPYyW9Rn6Wy4kE3/Q7ZfrQKkku8/D3+W7IBW7OGHbpx+lD53S1+0GVpocOFe+PisoRGdRpOa8MplYtKQZWE81W1v/ijyOu3LLevOfl4VwGfDgWNErLfqRoncdmK8nGriJvQMxE2PeSRc0qTplTAwSSdOciGtVP5qeBYrTfzd/XY6oWEyVrdPTn1OIplZCsOOJ8S/0LpCkpYmjP/jhszdi7f+ai4qjJgwUswOJMI1MdOG1QpbTJv3VhYNknFSPrXiXOmTjOMaso+5R573E/Vw31YY1jmM5WnkhUkUCzHdJYG6PlkreN4+iUDf3oEpr7uyKfZoJdsCUq1sXg5ZucPHauV7BcjV2oO0t6MnaMo8iawC7XEx3c1+C0cArgu34D/gvpPvYXkFTCuhWcmWSXBxnRU8/fD2DWiGlcYbpP TZfd4sbw 3q49lCYMFja1WdRCtX9viMi7yJ6K+iLsckP4/L1xo88dfTWn1bGrxqEK/c/9PurF2lEPbuuh5LpJRvuklMa6vzSRFoexJNRiS3z0miFzPxnbJfVz/vOhjbOhiSKun3StGgRRLrsrkLmZFD1dNlZEm1laFgkO93WjGr2FiLfu1DA9u9mHj+9bZRTNXtc/NFnFxu2nPm1n27JiVt1JM9xKCzztkcV+MFMQQK9AL9D3dZ7pbqZllbosWx196fxyLvLxxc8pto5nIkpc/R5EzWgSyO8KmM+VDKx1EG4pN586+ldASyMRKDJgMGzX24BSMyFx0iMyv2h1t8YMQB/Jl23eo4wI258PADWkCKhIuTPvn14rTHSHwMsrWDaAb9D++ojZmcZAXKcOb/O1B7YXn6Done9zGY9BjJTpQHGfuYZZuGTxBOr3AguP/jwlwYg2zHwm8ppPLH2Fuj6DB6DCJB90HQQuOKCOGu1VjMm1Wt4gdJyMKsdkyxxjR1FiQve8h6O/wANg0aaVdp3RlSHjYWxMQQ3SVy/Oy5Yj4wWQbkgRs1nqs/QCLRSgcLOM7cQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000003, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: >> diff --git a/mm/ksm.c b/mm/ksm.c >> index 7efcc68ccc6e..c952fe5d9e43 100644 >> --- a/mm/ksm.c >> +++ b/mm/ksm.c >> @@ -2229,24 +2229,10 @@ static void cmp_and_merge_page(struct page *page, struct ksm_rmap_item *rmap_ite >> tree_rmap_item = >> unstable_tree_search_insert(rmap_item, page, &tree_page); >> if (tree_rmap_item) { >> - bool split; >> - >> kpage = try_to_merge_two_pages(rmap_item, page, >> tree_rmap_item, tree_page); >> - /* >> - * If both pages we tried to merge belong to the same compound >> - * page, then we actually ended up increasing the reference >> - * count of the same compound page twice, and split_huge_page >> - * failed. >> - * Here we set a flag if that happened, and we use it later to >> - * try split_huge_page again. Since we call put_page right >> - * afterwards, the reference count will be correct and >> - * split_huge_page should succeed. >> - */ > >I'm curious, why can't we detect that ahead of time and keep only a >single reference? Why do we need the backup code? Anything I am missing? I don't know the original reason, better ask Claudio Imbrenda . Maybe because doing detection that ahead of time will break several funtions' semantic, such as try_to_merge_two_pages(), try_to_merge_with_ksm_page() and try_to_merge_one_page() Adding the backup code don't change the old code and fixing the old problem, it's good. > >> - split = PageTransCompound(page) >> - && compound_head(page) == compound_head(tree_page); >> - put_page(tree_page); >> if (kpage) { >> + put_page(tree_page); >> /* >> * The pages were successfully merged: insert new >> * node in the stable tree and add both rmap_items. >> @@ -2271,7 +2257,25 @@ static void cmp_and_merge_page(struct page *page, struct ksm_rmap_item *rmap_ite >> break_cow(tree_rmap_item); >> break_cow(rmap_item); >> } >> - } else if (split) { >> + } else { >> + bool split; >> + /* >> + * If both pages we tried to merge belong to the same compound >> + * page, then we actually ended up increasing the reference >> + * count of the same compound page twice, and split_huge_page >> + * failed. >> + * Here we set a flag if that happened, and we use it later to >> + * try split_huge_page again. Since we call put_page right >> + * afterwards, the reference count will be correct and >> + * split_huge_page should succeed. >> + */ >> + >> + split = PageTransCompound(page) >> + && compound_head(page) == compound_head(tree_page); > >Would > >split = page_folio(page) == page_folio(tree_page); > >do the trick? No need to mess with compound pages. In terms of function correctness, it should work correctly because here 'page' and 'tree_page' are never the same page, which is guaranteed by unstable_tree_search_insert(). But it's not very intuitive, maybe ww need to add some comment.