Received: by 10.213.65.68 with SMTP id h4csp98024imn; Tue, 27 Mar 2018 17:31:28 -0700 (PDT) X-Google-Smtp-Source: AIpwx48uyec8/oS5giWGcwCeu1xjaOWYBBTvrUFBJ0edJ82IsTgacrfmNk451Hbp+5m8ctmLknzI X-Received: by 2002:a17:902:8483:: with SMTP id c3-v6mr1427050plo.156.1522197088676; Tue, 27 Mar 2018 17:31:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522197088; cv=none; d=google.com; s=arc-20160816; b=P8dNOOvAfE81ufdcoD/09q3T73SAAp0md1bIDCN+vHKHStjtql411w+Tad4Ogg8+RH b6eOFlF4odfL9rgfkiDWaYufQuWQNS2MYiohZYYKPi1mqobtu7q50DNYt09jAzk3EDre lO6I7zLbwRQZDfU16Yhqkw3h2yb/811YEfaPZEhgivBTmQrTGkbzrXswBPunKc4POSoy IYoq8snV5AQZBoWCMtO7NIMbW3pplmYrgrTIJwhkWzUycpJAmUmWRMMi4ZDdn0cshuEH As1Ur78ZYw/pg89X3jsVA2Kmt9Rct0YS44ded2TXW+ls/sPycx32IY4SJQiJTODyQrol wQOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:reply-to:message-id:subject:cc:to:from:date :dkim-signature:arc-authentication-results; bh=fwZlk6NSX96YKk7s6bi4BGGfYP3kpm8eTXrtk0jv9YY=; b=a/BoxVdXJGVerAO1277ngOmmOuG1PNGrTSh0XkO4LRNByNPzqB5dxYm6R6rExojgZr l0s6ouc873eLCqhwBNuyjAIbR70g25ke+Et2FZIP43Q2BkYjYB+pyRzmf4YhhEPG/bks PXmKpPiRvpfse6rQqAdpsR8NYRceQ2st2AvEa/niOveMYO2ZalKSe3frWpwkA5emB1xH WQjGYLrroRnA/TNl4zM4eP9zt98GlV3JeVLfWO/9f5gXh14z4vzGA6MPAfbS6rCcNxbb fiQtzuDSWz2fXjBpl4MmlTWdVOG2y7shJbdovzTwSzBTAEE7/+mi+n1m3zos+9/Vmjqc qaOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=FtBl1XhK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g22-v6si2451741pli.527.2018.03.27.17.31.13; Tue, 27 Mar 2018 17:31:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=FtBl1XhK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752526AbeC1AaW (ORCPT + 99 others); Tue, 27 Mar 2018 20:30:22 -0400 Received: from mail-pl0-f66.google.com ([209.85.160.66]:41912 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752008AbeC1AaV (ORCPT ); Tue, 27 Mar 2018 20:30:21 -0400 Received: by mail-pl0-f66.google.com with SMTP id b7-v6so494580plr.8 for ; Tue, 27 Mar 2018 17:30:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:reply-to:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=fwZlk6NSX96YKk7s6bi4BGGfYP3kpm8eTXrtk0jv9YY=; b=FtBl1XhKHSwhEWdLVMRXQoRVs6rRDX0HlbeUW8BoYwiHtRDpImAK+ddgkDMlnKxIHO lTgOqr15V4xcFK/7LAPRa43+UM6FN23B/qGD9bV/eqWCnpMvmLLeZCn9MV1tQtSZW256 rasNrBZgtrbqLZmr6LNwRQSy2r0hd7KR6D+Rx/Ppv2OXZmQA40/QmU3byM/YT/2w6Cid 4WJTxkn7en6Gg4xs9SCMdQhb/kie9j2ZXyww4ukEb1/k9SdMpmIHVF9oasPzVnO/PDWk eXyvl52KjosOh8hZDjJojtGaZS8nmltShrkis+RDL1iseS84HLUWtPtnNQSMPJVCF81f vhWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:reply-to :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=fwZlk6NSX96YKk7s6bi4BGGfYP3kpm8eTXrtk0jv9YY=; b=OirpSt9+v7swOzvAOIUhp9PpKJ0h8IaOGEsWm8XMA9OH2GvVn9fo5M8vo3SRFjFeEG LBj3bsJGs2XE0OnSVsORlr927iLzVlJ4CzuWYaPO6W0ILjPI1e5B9U9LPY4JMsjQuRFR oN1yd40tsp7+eVgvyG2e64mMaPqfmAdENCYgoh0uzqp07LAPK4v28x6+BbU/hnUf0s32 SE3gbF1sAmqKyCAH0DRGDt2H22MuspKwM8aXOzDff01RmjxcyxLFSbKdXMGjXFPqlZ6p vBumEFYwVIIBaUAE2yKbD62ulQDbenBRyOs0d2PS8BHb7H2xfQtlcmh7+EoMr1OtXyg1 ERsw== X-Gm-Message-State: AElRT7GDL9CnJ7S+NLrDszUSc8OOhOzSTU6Itg8yRgZGrvpBw8h1GTlb nW8+twrTRBXnOP5xQeD2s9k= X-Received: by 2002:a17:902:158b:: with SMTP id m11-v6mr1440644pla.300.1522197020607; Tue, 27 Mar 2018 17:30:20 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id m10sm4077977pgd.32.2018.03.27.17.30.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Mar 2018 17:30:19 -0700 (PDT) Date: Wed, 28 Mar 2018 08:30:12 +0800 From: Wei Yang To: Jia He Cc: Wei Yang , Andrew Morton , Michal Hocko , Catalin Marinas , Mel Gorman , Will Deacon , Mark Rutland , Ard Biesheuvel , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Pavel Tatashin , Daniel Jordan , AKASHI Takahiro , Gioh Kim , Steven Sistare , Daniel Vacek , Eugeniu Rosca , Vlastimil Babka , linux-kernel@vger.kernel.org, linux-mm@kvack.org, James Morse , Steve Capper , x86@kernel.org, Greg Kroah-Hartman , Kate Stewart , Philippe Ombredanne , Johannes Weiner , Kemi Wang , Petr Tesarik , YASUAKI ISHIMATSU , Andrey Ryabinin , Nikolay Borisov Subject: Re: [PATCH v3 0/5] optimize memblock_next_valid_pfn and early_pfn_valid Message-ID: <20180328003012.GA91956@WeideMacBook-Pro.local> Reply-To: Wei Yang References: <1522033340-6575-1-git-send-email-hejianet@gmail.com> <20180327010213.GA80447@WeideMacBook-Pro.local> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 27, 2018 at 03:15:08PM +0800, Jia He wrote: > > >On 3/27/2018 9:02 AM, Wei Yang Wrote: >> On Sun, Mar 25, 2018 at 08:02:14PM -0700, Jia He wrote: >> > Commit b92df1de5d28 ("mm: page_alloc: skip over regions of invalid pfns >> > where possible") tried to optimize the loop in memmap_init_zone(). But >> > there is still some room for improvement. >> > >> > Patch 1 remain the memblock_next_valid_pfn when CONFIG_HAVE_ARCH_PFN_VALID >> > is enabled >> > Patch 2 optimizes the memblock_next_valid_pfn() >> > Patch 3~5 optimizes the early_pfn_valid(), I have to split it into parts >> > because the changes are located across subsystems. >> > >> > I tested the pfn loop process in memmap_init(), the same as before. >> > As for the performance improvement, after this set, I can see the time >> > overhead of memmap_init() is reduced from 41313 us to 24345 us in my >> > armv8a server(QDF2400 with 96G memory). >> > >> > Attached the memblock region information in my server. >> > [ 86.956758] Zone ranges: >> > [ 86.959452] DMA [mem 0x0000000000200000-0x00000000ffffffff] >> > [ 86.966041] Normal [mem 0x0000000100000000-0x00000017ffffffff] >> > [ 86.972631] Movable zone start for each node >> > [ 86.977179] Early memory node ranges >> > [ 86.980985] node 0: [mem 0x0000000000200000-0x000000000021ffff] >> > [ 86.987666] node 0: [mem 0x0000000000820000-0x000000000307ffff] >> > [ 86.994348] node 0: [mem 0x0000000003080000-0x000000000308ffff] >> > [ 87.001029] node 0: [mem 0x0000000003090000-0x00000000031fffff] >> > [ 87.007710] node 0: [mem 0x0000000003200000-0x00000000033fffff] >> > [ 87.014392] node 0: [mem 0x0000000003410000-0x000000000563ffff] >> > [ 87.021073] node 0: [mem 0x0000000005640000-0x000000000567ffff] >> > [ 87.027754] node 0: [mem 0x0000000005680000-0x00000000056dffff] >> > [ 87.034435] node 0: [mem 0x00000000056e0000-0x00000000086fffff] >> > [ 87.041117] node 0: [mem 0x0000000008700000-0x000000000871ffff] >> > [ 87.047798] node 0: [mem 0x0000000008720000-0x000000000894ffff] >> > [ 87.054479] node 0: [mem 0x0000000008950000-0x0000000008baffff] >> > [ 87.061161] node 0: [mem 0x0000000008bb0000-0x0000000008bcffff] >> > [ 87.067842] node 0: [mem 0x0000000008bd0000-0x0000000008c4ffff] >> > [ 87.074524] node 0: [mem 0x0000000008c50000-0x0000000008e2ffff] >> > [ 87.081205] node 0: [mem 0x0000000008e30000-0x0000000008e4ffff] >> > [ 87.087886] node 0: [mem 0x0000000008e50000-0x0000000008fcffff] >> > [ 87.094568] node 0: [mem 0x0000000008fd0000-0x000000000910ffff] >> > [ 87.101249] node 0: [mem 0x0000000009110000-0x00000000092effff] >> > [ 87.107930] node 0: [mem 0x00000000092f0000-0x000000000930ffff] >> > [ 87.114612] node 0: [mem 0x0000000009310000-0x000000000963ffff] >> > [ 87.121293] node 0: [mem 0x0000000009640000-0x000000000e61ffff] >> > [ 87.127975] node 0: [mem 0x000000000e620000-0x000000000e64ffff] >> > [ 87.134657] node 0: [mem 0x000000000e650000-0x000000000fffffff] >> > [ 87.141338] node 0: [mem 0x0000000010800000-0x0000000017feffff] >> > [ 87.148019] node 0: [mem 0x000000001c000000-0x000000001c00ffff] >> > [ 87.154701] node 0: [mem 0x000000001c010000-0x000000001c7fffff] >> > [ 87.161383] node 0: [mem 0x000000001c810000-0x000000007efbffff] >> > [ 87.168064] node 0: [mem 0x000000007efc0000-0x000000007efdffff] >> > [ 87.174746] node 0: [mem 0x000000007efe0000-0x000000007efeffff] >> > [ 87.181427] node 0: [mem 0x000000007eff0000-0x000000007effffff] >> > [ 87.188108] node 0: [mem 0x000000007f000000-0x00000017ffffffff] >> Hi, Jia >> >> I haven't taken a deep look into your code, just one curious question on your >> memory layout. >> >> The log above is printed out in free_area_init_nodes(), which iterates on >> memblock.memory and prints them. If I am not wrong, memory regions added to >> memblock.memory are ordered and merged if possible. >> >> While from your log, I see many regions could be merged but are isolated. For >> example, the last two region: >> >> node 0: [mem 0x000000007eff0000-0x000000007effffff] >> node 0: [mem 0x000000007f000000-0x00000017ffffffff] >> >> So I am curious why they are isolated instead of combined to one. >> >> >From the code, the possible reason is the region's flag differs from each >> other. If you have time, would you mind taking a look into this? >> >Hi Wei >I thought these 2 have different flags >[??? 0.000000] idx=30,region [7eff0000:10000]flag=4???? <--- aka >MEMBLOCK_NOMAP >[??? 0.000000]?? node?? 0: [mem 0x000000007eff0000-0x000000007effffff] >[??? 0.000000] idx=31,region [7f000000:81000000]flag=0 <--- aka MEMBLOCK_NONE >[??? 0.000000]?? node?? 0: [mem 0x000000007f000000-0x00000017ffffffff] Thanks. Hmm, I am not that familiar with those flags, while they look like to indicate the physical capability of this range. MEMBLOCK_NONE no special MEMBLOCK_HOTPLUG hotplug-able MEMBLOCK_MIRROR high reliable MEMBLOCK_NOMAP no direct map While these flags are not there when they are first added into the memory region. When you look at the memblock_add_range(), the last parameter passed is always 0. This means current several separated ranges reflect the physical memory capability layout. Then, why this layout is so scattered? As you can see several ranges are less than 1M. If, just my assumption, we could merge some of them, we could have a better performance. Less ranges, less searching time. > >-- >Cheers, >Jia -- Wei Yang Help you, Help me