Received: by 2002:ac0:a591:0:0:0:0:0 with SMTP id m17-v6csp1513696imm; Fri, 6 Jul 2018 01:15:57 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfJ2h+r0nyCx4EG18n6T+dJcEuyedKOIsacrpBFYNQBvgZsl898w7R9AYpsxhD6Pk82sgD6 X-Received: by 2002:a63:7e1a:: with SMTP id z26-v6mr8548154pgc.278.1530864957060; Fri, 06 Jul 2018 01:15:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530864957; cv=none; d=google.com; s=arc-20160816; b=FYQcttgNvPK1qG1d7Z88OyZ9AEeAVmN+9tZRkv38B0Tg7qINzqRHbFTvA26NUH8AuW ajKEt0hp/QmT4rGXKQGTp0mb5OaMBJdjx0Zx2sW2XLOX7Q9zKMUIKUuXXTX3PnXe0zsX ca5+ZjynU9oo+spUZz0dluPkBgZWsVmIeLNz7pZtfEqorvB4398W0NEktAzbwErPrk9t jaOPYmay5YvkIkVbTEuPs1qZNVwvaXIkwx8mcvgJEAQNw6yFEAQrjmo1F0xVPLWW6Q5l W2XrpoLDeWsGTKo4y4OFc3d8HhJtX4DyyGWAw10xU8wGGVhe8ot4ZfATowFYfFqGuvoG +kIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=0wln88X6dDt/45fJNfHnRTVgP3KNkaJEczTUnFGtNTI=; b=rcxb0fr1z2pIxsxr7BPJBfqkobTZvh1KxKZHdDM5sGO/LTJ7sKedq+50ECuy5oaxmZ lrGpX8Zj9eng4myxNt2vmAtHRiLZotzEegQbgmlXq/6NaiZ2fmyDxoIcNVJRsnIYRv5U +mVAZn+sz5jTysn4l7gBQy6+Xf+ld6PUIPCm2yfSgPFw3mmJG0b35sWEL4gTfODzSEQ6 rUDZdJvTJ9NWqqkOXf+6m7ZZQWnBeKFdYpKphVigKvnsFUQlq561RkoCzu2YPl4tcBm8 /VyrrFXqHg5lHZTH0ndWyMdg/nGFEdAVkguzpRbR3UXUhAipp/ej7vq8IQprsoFasZ1d TIZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="kOmI/2CZ"; 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 c11-v6si7459313plo.271.2018.07.06.01.15.41; Fri, 06 Jul 2018 01:15:57 -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="kOmI/2CZ"; 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 S1753643AbeGFIOv (ORCPT + 99 others); Fri, 6 Jul 2018 04:14:51 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:42669 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752681AbeGFIOr (ORCPT ); Fri, 6 Jul 2018 04:14:47 -0400 Received: by mail-pf0-f195.google.com with SMTP id v9-v6so7787439pff.9 for ; Fri, 06 Jul 2018 01:14:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=0wln88X6dDt/45fJNfHnRTVgP3KNkaJEczTUnFGtNTI=; b=kOmI/2CZBj49YZuokPdPNAoUOfVz+eZa1riiFCsO5oQAkwJNm1XBNydwKzn1OlqXLO OOx+98gEivpzvMW/0AipNkRGaqzY+TdQO0cn5bI05JWoJI92iKLoh2ABqpoBVt0Cg+Gd OxDVKDdCzq0eKJz6MZx6YZGoyQSDIwk4ZJr2DsU0oVpnov4rEh4ubVBsevS9bRmx8Uwa Adt/W/x5nkCP8qp+Lj9CQP/oSiQk60z5iG0FLzw229WgNVmDr+HJvPaxZhedfiAhzrYn FL6wnGrqj2h4Snoz24p811MZNpTJSlJqzOHMW+pzRgxdOTNtzrRZiKfASgmB3hb3yi6Z U5GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=0wln88X6dDt/45fJNfHnRTVgP3KNkaJEczTUnFGtNTI=; b=ZHk0BoAivYWVB9F83G/+s7Ca5UQ4XDL7EdJ0OmzmE5BibsbCSLYdjmw+SMbUNuLUtV 1V7AbgNxJUvqNGqE51SrZcqUwCdv3VP21tWh0PBC7NxUKpeKXMBG7KwX2PC9aUbOeCz8 GfnIqxSYFOk3aF+ruHn13cZb4NuxVXGXQgMDhdZiK9PHs7BKKIxaIy2+sP0x5VInej9W BW30QkuTrKCp9WCQZrD5x5q7YxRi7zZ+uWt+iThnLahZofnxxi3lWqX85jipDS4TwZJ6 4e9peCpwoXR7JTwlzjFfHvXydgVAdH6B2hVk+i6nN7HhbKicZ4Zp5n6lCJ5V0Phq4V54 IKFg== X-Gm-Message-State: APt69E30Nn5/aTZjyNlta7dONa0ol9HqZ/vQ1tuAdK6ACL0hyEVR/IH1 AVWEviaNBliEriKrgiEyL+c= X-Received: by 2002:a63:5d58:: with SMTP id o24-v6mr6957840pgm.349.1530864887080; Fri, 06 Jul 2018 01:14:47 -0700 (PDT) Received: from ct7host.localdomain ([38.106.11.25]) by smtp.gmail.com with ESMTPSA id c141-v6sm4673049pfc.25.2018.07.06.01.14.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Jul 2018 01:14:46 -0700 (PDT) From: Jia He To: Russell King , Andrew Morton , Michal Hocko , Catalin Marinas , Mel Gorman , Will Deacon , Mark Rutland , "H. Peter Anvin" Cc: 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 , Ard Biesheuvel , Steve Capper , Thomas Gleixner , Ingo Molnar , Greg Kroah-Hartman , Kate Stewart , Philippe Ombredanne , Johannes Weiner , Kemi Wang , Petr Tesarik , YASUAKI ISHIMATSU , Andrey Ryabinin , Nikolay Borisov , richard.weiyang@gmail.com, Jia He Subject: [PATCH v10 0/6] optimize memblock_next_valid_pfn and early_pfn_valid on arm and arm64 Date: Fri, 6 Jul 2018 16:14:14 +0800 Message-Id: <1530864860-7671-1-git-send-email-hejianet@gmail.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jia He Commit b92df1de5d28 ("mm: page_alloc: skip over regions of invalid pfns where possible") optimized the loop in memmap_init_zone(). But it causes possible panic bug. So Daniel Vacek reverted it later. But as suggested by Daniel Vacek, it is fine to using memblock to skip gaps and finding next valid frame with CONFIG_HAVE_ARCH_PFN_VALID. More from what Daniel said: "On arm and arm64, memblock is used by default. But generic version of pfn_valid() is based on mem sections and memblock_next_valid_pfn() does not always return the next valid one but skips more resulting in some valid frames to be skipped (as if they were invalid). And that's why kernel was eventually crashing on some !arm machines." About the performance consideration: As said by James in b92df1de5, "I have tested this patch on a virtual model of a Samurai CPU with a sparse memory map. The kernel boot time drops from 109 to 62 seconds." Thus it would be better if we remain memblock_next_valid_pfn on arm/arm64. Besides we can remain memblock_next_valid_pfn, there is still some room for improvement. After this set, I can see the time overhead of memmap_init is reduced from 27956us to 13537us in my armv8a server(QDF2400 with 96G memory, pagesize 64k). I believe arm server will benefit more if memory is larger than TBs Patch 1 introduces new config to make codes more generic Patch 2 remains the memblock_next_valid_pfn on arm and arm64,this patch is originated from b92df1de5 Patch 3 optimizes the memblock_next_valid_pfn() Patch 4~6 optimizes the early_pfn_valid() Changelog: V10:- move codes to memblock.c, refine the performance consideration V9: - rebase to mmotm master, refine the log description. No major changes V8: - introduce new config and move generic code to early_pfn.h - optimize memblock_next_valid_pfn as suggested by Matthew Wilcox V7: - fix i386 compilation error. refine the commit description V6: - simplify the codes, move arm/arm64 common codes to one file. - refine patches as suggested by Danial Vacek and Ard Biesheuvel V5: - further refining as suggested by Danial Vacek. Make codes arm/arm64 more arch specific V4: - refine patches as suggested by Danial Vacek and Wei Yang - optimized on arm besides arm64 V3: - fix 2 issues reported by kbuild test robot V2: - rebase to mmotm latest - remain memblock_next_valid_pfn on arm64 - refine memblock_search_pfn_regions and pfn_valid_region Jia He (6): arm: arm64: introduce CONFIG_HAVE_MEMBLOCK_PFN_VALID mm: page_alloc: remain memblock_next_valid_pfn() on arm/arm64 mm: page_alloc: reduce unnecessary binary search in memblock_next_valid_pfn() mm/memblock: introduce memblock_search_pfn_regions() mm/memblock: introduce pfn_valid_region() mm: page_alloc: reduce unnecessary binary search in early_pfn_valid() arch/arm/Kconfig | 4 +++ arch/arm64/Kconfig | 4 +++ include/linux/memblock.h | 2 ++ include/linux/mmzone.h | 16 +++++++++ mm/Kconfig | 3 ++ mm/memblock.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ mm/page_alloc.c | 5 ++- 7 files changed, 117 insertions(+), 1 deletion(-) -- 1.8.3.1