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 2D507C05027 for ; Fri, 10 Feb 2023 07:58:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4E6276B010C; Fri, 10 Feb 2023 02:58:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 496196B010D; Fri, 10 Feb 2023 02:58:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3369E6B010E; Fri, 10 Feb 2023 02:58:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 1FAB16B010C for ; Fri, 10 Feb 2023 02:58:34 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id D9FDC1C6E2C for ; Fri, 10 Feb 2023 07:58:33 +0000 (UTC) X-FDA: 80450630106.16.A09CED3 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf07.hostedemail.com (Postfix) with ESMTP id D936B40003 for ; Fri, 10 Feb 2023 07:58:30 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="vzxgu8k/"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=EthDL2Lh; spf=pass (imf07.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676015911; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=iMV2zrt0789D/DWlN3CCCtKbsypSsElbAe4u2O/7aOU=; b=Fc0uU2mJVZlgzIfnx0A4ex43sD6rVDBQX/glZQMaLltuNHklE/ULFjfQciuTGJqH6U4Fhg XZHuIGm27ADfK8uZOl3hFOgiyplXF6MBB0QHz/X89k9pgws53x13IdUpmmJgmt/NBmXgHn JmoS3MpuHvlkDxtjoZ51T+x9z98nPjI= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="vzxgu8k/"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=EthDL2Lh; spf=pass (imf07.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676015911; a=rsa-sha256; cv=none; b=vO4T3/xEZk5TPeh7Y4zkDVmFb8w/nQn1/2uwCyITvrpllIV76vkKl/4sulbtlqPnAKjXf1 jbxc+eQ/RFWF3nvnRk3kwUKbDa5Ub9/A3P1YZts/mGdX7vbvrc6S7fR2DMB9AGlRxNlVJg zTPSo9q96j5LADDuNqb/CJVfx2te8pQ= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 374CF3F6ED; Fri, 10 Feb 2023 07:58:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1676015909; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iMV2zrt0789D/DWlN3CCCtKbsypSsElbAe4u2O/7aOU=; b=vzxgu8k/8Yd94r+VhTLTxNcjRHn9yLrEgT7iChH7iKiOzy1N+ePLPyFkOYp043/CG4BwL6 T3fhDY8jbjfvgcFISclbl5Q0G6qpmEJJUcdicqz9D4TmnrXWiza7qxQMp3RpX+dEeE8KD9 FoT8rsMPrXhNoq82Ee4mi3PxI2YECZI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1676015909; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iMV2zrt0789D/DWlN3CCCtKbsypSsElbAe4u2O/7aOU=; b=EthDL2Lhl3GhyDbanZ8r9P/x+eY1AJscgfdzkGiwl7C5wXMgTaUa5Hqle+SjTf9QttO8FH Ve00X5nGPlgJbaAA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 0C0B013206; Fri, 10 Feb 2023 07:58:29 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 3JDvASX55WN5eQAAMHmgww (envelope-from ); Fri, 10 Feb 2023 07:58:29 +0000 Message-ID: Date: Fri, 10 Feb 2023 08:58:28 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH v2] mm/page_alloc: optimize find_suitable_fallback() and fallbacks array To: Yajun Deng , Zi Yan Cc: akpm@linux-foundation.org, mgorman@techsingularity.net, david@redhat.com, rppt@linux.ibm.com, osalvador@suse.de, rppt@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <626a5f4c4996f57631a8e1877c7646e5@linux.dev> <494D9F5D-33A4-48B4-911B-9A75CFC9BC67@nvidia.com> <4C196D76-49A9-4B06-A51F-D8A13109DF3B@nvidia.com> <20230209101144.496144-1-yajun.deng@linux.dev> Content-Language: en-US From: Vlastimil Babka In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: D936B40003 X-Stat-Signature: 6txktwtwxzit73ei4w3wz1cp4baqc3d5 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1676015910-222974 X-HE-Meta: U2FsdGVkX1/vBQkHYzFDwPpHwC5DCd/wsZBwph9OZE2OE/E4r9cxbjgw2uLKmPOGcBcxkJYMxTOEYqwA6wrkSCw6qh5Aymrl8kevCOJAwfyDMt/ZMSpZYV+YXZd6Nlp2NLk/EISqSNbNuiFghr5fJ0cJzuqTaRVHaFYXe+faf2yxJRjZXgYKSxXZpAhD5xcneScTr1P8uq3HUveKlxf0vXSge2fXAwGhvQA78qewoLSnxujga2K8dUW4JB3bypKgUJXha5v5sRZtPKEvDw3cOwKbSYwMwyBnZlgHKaav3YBFV8131Nn2W+w9APvfAofQGVvEeZPntYCSdKzOfPKpeLOr+YmRCTfN0SwqPkYnWGc50u/1LYyqU6OQqoggyFOHFU/0sbdR6NWvK4zdwAuT7dYrmHsWK+9RhU+S1gqbaJVdDUAhkAoHB9z9QWWe+7E0cDu8hMRw/GiU2Ej85O6yGN1z3AUeHqll3AksKzvy8si5OvRmnAeldskJNNe2W478eIOnvmkk7zFeX4+zfNxHx9o39av9JyJ2AEwEbs5mQguljaL6Pn9iWY7NjY7lO/PCUh8FF1Dus8Z2dlfh3OAguxZ6X2Dy47u/wO4x6OOPVQ1H6JAIvZz5lSFqXeeEGJ/mciYa8qoigaxf7Ekm8AHYZFc9eMIZMnxkTSTX35iLrqsJc59NguoThHzTFxgqFXuOT9xxZbVY0wffpf8gAELLpHc+aoDSJLOvjfoA6CLqWEVjqsy+idPrP/GlNmXS3U3aqCiZieYlNr/APJ8qzY4k0Oc7Ra1lOvuShwTwhHKUvdsKuKa6oq6Jw6G08FrM0eG90x1qFemw+1hMLuri9orPHMSs85C5HeKoqA5DOwGt54KfbVPvBgxczQvg0IhrIkume7RiPKwYzrubHdvDshoqIaCitIM1vLGFqkhy8lmItCSBa9Ix8ntnIyFvn0B5FqMgdv41Ivf9iI/MnBqqcfx KiPDkBNG qsE2uMQ7TPhII7QIm5hAroCJ0pdEzHeg2ZdM7dMhLTIqNwPoGgWoGMXrLT0oMoXD19XPt6XWv7FKYcRwi9QzBLhNXVJsHEm+j6025Y8Zls5A+cUlcDbJmvHI7aumnMfmoNvGKgYOUPjNZcSDns5mOLo1qPLBJ22Fuv9TaRkt/pSTf6i/OWv2EeC30UceNsFzD9Bn/ONVrYLP2jONQ6Pbo2aqyu9Xz+7wLEKGo/nIBayz//kGUd/CFgQkwzBp6dPi8XWICSrAIKQ+2AJhxsbKcs0WrmE9feKjJHBQhp5eIG1rS9D49iJQgJGfbaAvQ0ndW5n9v 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: On 2/10/23 03:51, Yajun Deng wrote: > February 10, 2023 10:33 AM, "Yajun Deng" wrote: > >> February 10, 2023 10:14 AM, "Zi Yan" wrote: >> >>> On 9 Feb 2023, at 20:57, Yajun Deng wrote: >>> >>>> February 9, 2023 11:50 PM, "Zi Yan" wrote: >>> >>> On 9 Feb 2023, at 5:11, Yajun Deng wrote: >>>> There is no need to execute the next loop if it not return in the first >>>> loop. So add a break at the end of the loop. >>> >>> Can you explain why? If it is the case, MIGRATE_UNMOVABLE cannot fall back >>> to MIGRATE_MOVABLE? And MIGRATE_MOVABLE cannot fall back to MIGRATE_UNMOVABLE? >>> And MIGRATE_RECLAIMABLE cannot fall back to MIGRATE_MOVABLE? >>>> The return in the loop is only related to 'order', 'migratetype' and 'only_stealable' >>>> variables. Even if it execute the next loop, it can't change the result. So the loop >>>> can be broken if the first loop can't return. >>> >>> OK. Got it. Would the code below look better? >>> >>> for (i = 0; i < MIGRATE_PCPTYPES - 1 ; i++) { >>> fallback_mt = fallbacks[migratetype][i]; >>> if (free_area_empty(area, fallback_mt)) >>> continue; >>> } >>> >>> if (can_steal_fallback(order, migratetype)) >>> *can_steal = true; >>> >>> if (!only_stealable || *can_steal) >>> return fallback_mt; >>> >>> return -1; >> >> Yes, I'll submit a v3 patch. >> Thanks. >> > > I found a logical error in your code. It should be like this: > > for (i = 0; i < MIGRATE_PCPTYPES - 1 ; i++) { > fallback_mt = fallbacks[migratetype][i]; > if (!free_area_empty(area, fallback_mt)) > break; > } > > if (can_steal_fallback(order, migratetype)) > *can_steal = true; > > if (!only_stealable || *can_steal) > return fallback_mt; > > return -1; > > This code will modify the logic to the opposite. It's still wrong, IMHO. If all fallbacks have free_area_empty(), it will return the last one and not -1. Also will set *can_steal in such case. > So can anyone tell me if I should use this code or the v2 patch? Once that bugs are fixed, the result will probably not look much better than v2, so I don't mind keeping v2.