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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C84AAC432C0 for ; Fri, 22 Nov 2019 15:29:20 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 9153C20715 for ; Fri, 22 Nov 2019 15:29:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9153C20715 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.page Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 0A6616B050C; Fri, 22 Nov 2019 10:29:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 02FE66B050D; Fri, 22 Nov 2019 10:29:19 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E60BB6B050E; Fri, 22 Nov 2019 10:29:19 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0066.hostedemail.com [216.40.44.66]) by kanga.kvack.org (Postfix) with ESMTP id CD1FB6B050C for ; Fri, 22 Nov 2019 10:29:19 -0500 (EST) Received: from smtpin03.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with SMTP id 7A9AD180AD80F for ; Fri, 22 Nov 2019 15:29:19 +0000 (UTC) X-FDA: 76184297238.03.chair14_51585e3a69d38 X-HE-Tag: chair14_51585e3a69d38 X-Filterd-Recvd-Size: 3369 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by imf05.hostedemail.com (Postfix) with ESMTP for ; Fri, 22 Nov 2019 15:29:18 +0000 (UTC) X-Originating-IP: 153.3.140.100 Received: from localhost (unknown [153.3.140.100]) (Authenticated sender: fly@kernel.page) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 7FDC91C001A; Fri, 22 Nov 2019 15:29:05 +0000 (UTC) Date: Fri, 22 Nov 2019 23:28:47 +0800 From: Pengfei Li To: "lixinhai.lxh@gmail.com" Cc: akpm , mgorman , "Michal Hocko" , "Vlastimil Babka" , cl , "iamjoonsoo.kim" , guro , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , fly@kernel.page Subject: Re: [RFC v1 00/19] Modify zonelist to nodelist v1 Message-ID: <20191122232847.3ad94414.fly@kernel.page> In-Reply-To: <2019112215245905276118@gmail.com> References: <20191121151811.49742-1-fly@kernel.page> <2019112215245905276118@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.004288, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, 22 Nov 2019 15:25:00 +0800 "lixinhai.lxh@gmail.com" wrote: > On 2019-11-21=C2=A0at 23:17=C2=A0Pengfei Li=C2=A0wrote: > >Motivation > >---------- > >Currently if we want to iterate through all the nodes we have to > >traverse all the zones from the zonelist. > > > >So in order to reduce the number of loops required to traverse node, > >this series of patches modified the zonelist to nodelist. > > > >Two new macros have been introduced: > >1) for_each_node_nlist > >2) for_each_node_nlist_nodemask > > > > > >Benefit > >------- > >1. For a NUMA system with N nodes, each node has M zones, the number > >=C2=A0=C2=A0 of loops is reduced from N*M times to N times when traversi= ng > >node. > >=20 >=20 > It looks to me that we don't really have system which has N nodes and=20 > each node with=C2=A0M zones in its address range.=C2=A0 > We may have systems which has several nodes, but only the first node > has all zone types, other nodes only have NORMAL zone. (Evenly > distribute the !NORMAL zones on all nodes is not reasonable, as those > zones have limited size) > So iterate over zones to reach nodes should at N level, not M*N level. >=20 Thanks for your comments. In the case you said, the number of loops required to traverse all nodes is similar to traversing all zones. I have two main reasons to explain that this series of patches is beneficial. 1. When node has more than one zone, it will take fewer cycles to traverse all nodes. (for example, ZONE_MOVABLE?) 2. Using zonelist to traverse all nodes is inefficient, pgdat must be obtained indirectly via zone->zone_pgdat, and additional judgment must be made. E.g 1) Using zonelist to traverse all nodes last_pgdat =3D NULL;=09 for_each_zone_zonelist(zone, xxx) { pgdat =3D zone->zone_pgdat; if (pgdat =3D=3D last_pgdat) continue; last_pgdat =3D pgdat; do_something(pgdat); } 2) Using nodelist to traverse all nodes for_each_node_nodelist(node, xxx) { do_something(NODE_INFO(node)); }