Received: by 10.192.165.156 with SMTP id m28csp394223imm; Wed, 11 Apr 2018 00:26:39 -0700 (PDT) X-Google-Smtp-Source: AIpwx495hgQiikEPIRJH/YDx0fL8zzQ8/Z0scBp0bE96R2VqW7GmaJbR7hyugO4T1gkEi7vPTMUF X-Received: by 2002:a17:902:7c0f:: with SMTP id x15-v6mr2497468pll.369.1523431599337; Wed, 11 Apr 2018 00:26:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523431599; cv=none; d=google.com; s=arc-20160816; b=kJZdicdkpMcaaYxVEBaU0viawBhJvgweFW5yo0ZYqGj7Cu4yLbVkk/+JhOPjtCOJt7 hQ74iXsoHDHlcL7C/r3ec7eaT4/4ajspEmK5ofPGJyF28YqgvVPSGSmImoyTgtcFJoxU m6P4wrP+eNz2OwiwC0RZJiVpUXrEDc8kakKKiusDD0mJgxhweHX222Cf2NuF/vzJc2Dc /4cbb8O57LVxPM7uN4nIQ9InKQ6Pe3ZvnLzmpFoUZCQOKibcfIdAsyP6CPiW62VWVZCY Zr/iKZn2SRLC9VMSs3B/uXkF6WuFwaCdoBE4PsdwoTihDEOxBkLpPdM1qUZbfmBRF6W/ L0iQ== 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=n2gTZhRA4fqrepNYtLgkwxWKONukfOAxV62L+n4fVjY=; b=iPWUGfxoQKSD5wMbJB1wk22fiPbt1KFmuqKidl0j2/htjfqfWoY0EdH5mFwG0k+22F h8u4VUfDiojKLyhJWUjlDdTa7CvME3+LSGEsx2AnmvRLKMlvE+JgKzFoHb/rQLXVHzqx tONXZTyKqU+OnEz9A/hUd4DFY9EUYXSis4a9ZXhwHjWHvdnLevoxPC+4+gyX4NCxjY7Y pYbZoWY/2gQ93nAnFkdLBcY5JfmGkNZC2ZKfRH/LYnqBmOPF54ksRWpDr09Fad1Q8wc8 DTQKVAi4m5sqQIYx8UyHv6QgxACZwmKaIWECGeS5kCYxj10MdZT+VxKqBcwFdZZCRRwR 5Y7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=rtC1eYRw; 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 e63-v6si544900plb.91.2018.04.11.00.26.01; Wed, 11 Apr 2018 00:26:39 -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=rtC1eYRw; 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 S1751858AbeDKHXC (ORCPT + 99 others); Wed, 11 Apr 2018 03:23:02 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:43400 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750730AbeDKHXA (ORCPT ); Wed, 11 Apr 2018 03:23:00 -0400 Received: by mail-pf0-f195.google.com with SMTP id u8so151355pfg.10 for ; Wed, 11 Apr 2018 00:23:00 -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=n2gTZhRA4fqrepNYtLgkwxWKONukfOAxV62L+n4fVjY=; b=rtC1eYRwbSmnMJ1Cnk2dQM9X9w0c3p6cio2E2b34vGAlKi+2d9D5r9GLodJUziLQgl pNj8ck5pzVUm7BBhd67OYqxeEDAFkn8Z3+Qgu0S/7I0AakUT0k+v/wE8s49sv5BNvY/H ov0nMj/362TFbe1hIoP6VgozuSoaPOtwSZOepqcZMqjiC5P8WtD7FDY/0rPpnr4VHvnG UGMZ0c+JogCDgWska5FHra+FgvVelKv9ltFyqxn/sy/39u6FvG20N2lJEMhnyduuC0Wy 6iba8qTXiexgGqfsc5X06xvrVI2Pj4mP2tPPKsPrMTXKKVRAfv72ifhd0x1Les0aUAbV /v8g== 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=n2gTZhRA4fqrepNYtLgkwxWKONukfOAxV62L+n4fVjY=; b=CvfY8ph01/arsa9qqlLt2Jc+2nGieHIQ4q5/v9R0hwtl0TfbblD6PfdrqTbirNfh7J pe8V9/EKqtT/bL53p937Brhb2Vodo98qvt8L+Yp8wzTvj6kxMrqIfyjioY9E4GBi3JIa fwDQvRy3yeiJrFlzfZro/T3JcEdiHfBYUPFTwkU6O+PD0/cigycMGQQPIhH+tKaLP5JM FhoxCvGBF27f4BGCwFO8tVm+MoXyDjsoBvRqCLMAQBMVReeodrH1FPHrVuqqsi3SpvdK AmBIj2BLcb0YuWWKUDXkiEiPKelk0CbCm8AOKvkwAaPFDNm0DVv1Q5eIELkLD3GHhDbo jlTg== X-Gm-Message-State: ALQs6tCvWNH8HkoFw4JyVmNhhXJ4zxA6ADg6WBTmsGG9qyH0X7b/hGaT vvmt2cGu4o8Mv0mHt8qHPgM= X-Received: by 10.99.117.79 with SMTP id f15mr2639595pgn.47.1523431380094; Wed, 11 Apr 2018 00:23:00 -0700 (PDT) Received: from localhost.localdomain ([38.106.11.25]) by smtp.gmail.com with ESMTPSA id o90sm1561898pfj.102.2018.04.11.00.22.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 11 Apr 2018 00:22:59 -0700 (PDT) From: Jia He To: Russell King , Catalin Marinas , Will Deacon , Mark Rutland , Ard Biesheuvel , Andrew Morton , Michal Hocko Cc: Wei Yang , Kees Cook , Laura Abbott , Vladimir Murzin , Philip Derrin , AKASHI Takahiro , James Morse , Steve Capper , Pavel Tatashin , Gioh Kim , Vlastimil Babka , Mel Gorman , Johannes Weiner , Kemi Wang , Petr Tesarik , YASUAKI ISHIMATSU , Andrey Ryabinin , Nikolay Borisov , Daniel Jordan , Daniel Vacek , Eugeniu Rosca , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Jia He Subject: [PATCH v8 0/6] optimize memblock_next_valid_pfn and early_pfn_valid on arm and arm64 Date: Wed, 11 Apr 2018 00:21:51 -0700 Message-Id: <1523431317-30612-1-git-send-email-hejianet@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 introduce new config to make codes more generic Patch 2 remain the memblock_next_valid_pfn on arm and arm64 Patch 3 optimizes the memblock_next_valid_pfn() Patch 4~6 optimizes the early_pfn_valid() As for the performance improvement, after this set, I can see the time overhead of memmap_init() is reduced from 41313 us to 24389 us in my armv8a server(QDF2400 with 96G memory). Without this patchset: [ 117.113677] before memmap_init [ 117.118195] after memmap_init >>> memmap_init takes 4518 us [ 117.121446] before memmap_init [ 117.154992] after memmap_init >>> memmap_init takes 33546 us [ 117.158241] before memmap_init [ 117.161490] after memmap_init >>> memmap_init takes 3249 us >>> totally takes 41313 us With this patchset: [ 123.222962] before memmap_init [ 123.226819] after memmap_init >>> memmap_init takes 3857 [ 123.230070] before memmap_init [ 123.247354] after memmap_init >>> memmap_init takes 17284 [ 123.250604] before memmap_init [ 123.253852] after memmap_init >>> memmap_init takes 3248 >>> totally takes 24389 us 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] [ 87.194791] Initmem setup node 0 [mem 0x0000000000200000-0x00000017ffffffff] Changelog: 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 arm: arm64: page_alloc: reduce unnecessary binary search in memblock_next_valid_pfn() mm/memblock: introduce memblock_search_pfn_regions() arm: arm64: introduce pfn_valid_region() mm: page_alloc: reduce unnecessary binary search in early_pfn_valid() arch/arm/Kconfig | 4 +++ arch/arm/mm/init.c | 1 + arch/arm64/Kconfig | 4 +++ arch/arm64/mm/init.c | 1 + include/linux/early_pfn.h | 79 +++++++++++++++++++++++++++++++++++++++++++++++ include/linux/memblock.h | 2 ++ include/linux/mmzone.h | 18 ++++++++++- mm/Kconfig | 3 ++ mm/memblock.c | 9 ++++++ mm/page_alloc.c | 5 ++- 10 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 include/linux/early_pfn.h -- 2.7.4