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=-8.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham 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 0F522C433E1 for ; Tue, 23 Jun 2020 06:42:23 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id AAB902072E for ; Tue, 23 Jun 2020 06:42:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=nitingupta.dev header.i=@nitingupta.dev header.b="XggkRuH8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AAB902072E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=nitingupta.dev Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id F170C6B0002; Tue, 23 Jun 2020 02:42:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EC6966B0005; Tue, 23 Jun 2020 02:42:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DDD186B0006; Tue, 23 Jun 2020 02:42:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0156.hostedemail.com [216.40.44.156]) by kanga.kvack.org (Postfix) with ESMTP id C41AC6B0002 for ; Tue, 23 Jun 2020 02:42:21 -0400 (EDT) Received: from smtpin04.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 49988180AD822 for ; Tue, 23 Jun 2020 06:42:21 +0000 (UTC) X-FDA: 76959532482.04.base74_290770626e39 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin04.hostedemail.com (Postfix) with ESMTP id 28049800B26A for ; Tue, 23 Jun 2020 06:42:21 +0000 (UTC) X-HE-Tag: base74_290770626e39 X-Filterd-Recvd-Size: 21421 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by imf41.hostedemail.com (Postfix) with ESMTP for ; Tue, 23 Jun 2020 06:42:20 +0000 (UTC) Received: by mail-pf1-f195.google.com with SMTP id s23so9623654pfh.7 for ; Mon, 22 Jun 2020 23:42:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nitingupta.dev; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=KBdtjn/eUP0KCyYSVUTxmPmnPLxzRk9ZjyIeGHC8krs=; b=XggkRuH89w9WM7UUI0gtFUXmBpJJeiQ8HhmnKGIC62ASIzzvLjcPdXZM8gXGzpDR9T Dghdu5HhwG05iIK1nZjtzDpKv9flcjL8dL+QwNuGXUcHpgV9Z97aZN/hO8zkhLs1EjLO gWXYep04tm8y7Obgvs+yzLsBGyy9k1RYu2/MOJ+efIbL07OL1Gny5bqUMkBcq7cA9Y2T nEPcza5AW78SuMzFJd6KSOS0GCJ7UHN0hUIEVsXL85n3e2t6Jq90IsGUcNQfCTC7QzEY RNyeHHJWHuK9750anxAjvkpHqdcWHE6M0oZ8lsxu8afng1X1k4+yKXlYgmxFEqFap0LE Y5fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=KBdtjn/eUP0KCyYSVUTxmPmnPLxzRk9ZjyIeGHC8krs=; b=ErSRVSuhyOMsxefxnKG0vLiadD+L7gxYqScP1q89FaGTyJ2RKFf8RLDcajaVJGnL+U /EyzY4pim1vT273L396UKtx/AMl3lCVOIwXXUl0Hc+LLLLsY9nanPcqe+cXg2t6pa8xN otqxVwASvoNDLoTTZA85YoKgGE985wJ6TDIWDfvtmNdInWHGgu+lZt4RAxa/8Hpq2ZjU RPcRvCgk3QhGuucDJRR/7SzCklh5kYIt/Mq7gVw6Bep+iX8RFj6lZDAijCkee75JJjGu uVDmXcQnHtY8xFagbWqI61MN/KilWoiqxooBb6g2Fnprk8pZqMfQxasF+GrJ4dowxRbp XZvg== X-Gm-Message-State: AOAM5312BBOrzSDhWzyr7ryynVTJRe/U2PxyE0rr7J8e0gLY1W5L9d0K hp+HVvNejzt90fc11YemF+nYWQ== X-Google-Smtp-Source: ABdhPJzmtXuO9HplM4wbDlDxbABG1JX3QHBgxJPV2IcoQBTa5BZ/+goHRNwAJPJI+GVw43lV0gugOg== X-Received: by 2002:a62:a110:: with SMTP id b16mr16711905pff.102.1592894539267; Mon, 22 Jun 2020 23:42:19 -0700 (PDT) Received: from ngvpn01-170-51.dyn.scz.us.nvidia.com ([2601:646:9302:1050:d88e:a8a0:b827:da35]) by smtp.gmail.com with ESMTPSA id ca6sm1357851pjb.46.2020.06.22.23.42.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 Jun 2020 23:42:18 -0700 (PDT) Subject: Re: [PATCH v8] mm: Proactive compaction To: Nathan Chancellor Cc: Nitin Gupta , Andrew Morton , Vlastimil Babka , Khalid Aziz , Oleksandr Natalenko , Michal Hocko , Mel Gorman , Matthew Wilcox , Mike Kravetz , Joonsoo Kim , David Rientjes , linux-kernel , linux-mm , Linux API , linux-mips@vger.kernel.org References: <20200616204527.19185-1-nigupta@nvidia.com> <20200623022636.GA1051134@ubuntu-n2-xlarge-x86> <20200623045740.GA2912137@ubuntu-n2-xlarge-x86> From: Nitin Gupta Message-ID: <4d6b4822-f692-9cad-54c9-d6ef087a3947@nitingupta.dev> Date: Mon, 22 Jun 2020 23:42:17 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <20200623045740.GA2912137@ubuntu-n2-xlarge-x86> Content-Type: text/plain; charset=utf-8 Content-Language: en-US X-Rspamd-Queue-Id: 28049800B26A X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam02 Content-Transfer-Encoding: quoted-printable 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 6/22/20 9:57 PM, Nathan Chancellor wrote: > On Mon, Jun 22, 2020 at 09:32:12PM -0700, Nitin Gupta wrote: >> On 6/22/20 7:26 PM, Nathan Chancellor wrote: >>> On Tue, Jun 16, 2020 at 01:45:27PM -0700, Nitin Gupta wrote: >>>> For some applications, we need to allocate almost all memory as >>>> hugepages. However, on a running system, higher-order allocations ca= n >>>> fail if the memory is fragmented. Linux kernel currently does on-dem= and >>>> compaction as we request more hugepages, but this style of compactio= n >>>> incurs very high latency. Experiments with one-time full memory >>>> compaction (followed by hugepage allocations) show that kernel is ab= le >>>> to restore a highly fragmented memory state to a fairly compacted me= mory >>>> state within <1 sec for a 32G system. Such data suggests that a more >>>> proactive compaction can help us allocate a large fraction of memory= as >>>> hugepages keeping allocation latencies low. >>>> >>>> For a more proactive compaction, the approach taken here is to defin= e a >>>> new sysctl called 'vm.compaction_proactiveness' which dictates bound= s >>>> for external fragmentation which kcompactd tries to maintain. >>>> >>>> The tunable takes a value in range [0, 100], with a default of 20. >>>> >>>> Note that a previous version of this patch [1] was found to introduc= e >>>> too many tunables (per-order extfrag{low, high}), but this one reduc= es >>>> them to just one sysctl. Also, the new tunable is an opaque value >>>> instead of asking for specific bounds of "external fragmentation", w= hich >>>> would have been difficult to estimate. The internal interpretation o= f >>>> this opaque value allows for future fine-tuning. >>>> >>>> Currently, we use a simple translation from this tunable to [low, hi= gh] >>>> "fragmentation score" thresholds (low=3D100-proactiveness, high=3Dlo= w+10%). >>>> The score for a node is defined as weighted mean of per-zone externa= l >>>> fragmentation. A zone's present_pages determines its weight. >>>> >>>> To periodically check per-node score, we reuse per-node kcompactd >>>> threads, which are woken up every 500 milliseconds to check the same= . If >>>> a node's score exceeds its high threshold (as derived from user-prov= ided >>>> proactiveness value), proactive compaction is started until its scor= e >>>> reaches its low threshold value. By default, proactiveness is set to= 20, >>>> which implies threshold values of low=3D80 and high=3D90. >>>> >>>> This patch is largely based on ideas from Michal Hocko [2]. See also= the >>>> LWN article [3]. >>>> >>>> Performance data >>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>>> >>>> System: x64_64, 1T RAM, 80 CPU threads. >>>> Kernel: 5.6.0-rc3 + this patch >>>> >>>> echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled >>>> echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag >>>> >>>> Before starting the driver, the system was fragmented from a userspa= ce >>>> program that allocates all memory and then for each 2M aligned secti= on, >>>> frees 3/4 of base pages using munmap. The workload is mainly anonymo= us >>>> userspace pages, which are easy to move around. I intentionally avoi= ded >>>> unmovable pages in this test to see how much latency we incur when >>>> hugepage allocations hit direct compaction. >>>> >>>> 1. Kernel hugepage allocation latencies >>>> >>>> With the system in such a fragmented state, a kernel driver then >>>> allocates as many hugepages as possible and measures allocation >>>> latency: >>>> >>>> (all latency values are in microseconds) >>>> >>>> - With vanilla 5.6.0-rc3 >>>> >>>> percentile latency >>>> =E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2= =80=93=E2=80=93=E2=80=93 =E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2= =80=93=E2=80=93 >>>> 5 7894 >>>> 10 9496 >>>> 25 12561 >>>> 30 15295 >>>> 40 18244 >>>> 50 21229 >>>> 60 27556 >>>> 75 30147 >>>> 80 31047 >>>> 90 32859 >>>> 95 33799 >>>> >>>> Total 2M hugepages allocated =3D 383859 (749G worth of hugepages out= of >>>> 762G total free =3D> 98% of free memory could be allocated as hugepa= ges) >>>> >>>> - With 5.6.0-rc3 + this patch, with proactiveness=3D20 >>>> >>>> sysctl -w vm.compaction_proactiveness=3D20 >>>> >>>> percentile latency >>>> =E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2= =80=93=E2=80=93=E2=80=93 =E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2=80=93=E2= =80=93=E2=80=93 >>>> 5 2 >>>> 10 2 >>>> 25 3 >>>> 30 3 >>>> 40 3 >>>> 50 4 >>>> 60 4 >>>> 75 4 >>>> 80 4 >>>> 90 5 >>>> 95 429 >>>> >>>> Total 2M hugepages allocated =3D 384105 (750G worth of hugepages out= of >>>> 762G total free =3D> 98% of free memory could be allocated as hugepa= ges) >>>> >>>> 2. JAVA heap allocation >>>> >>>> In this test, we first fragment memory using the same method as for = (1). >>>> >>>> Then, we start a Java process with a heap size set to 700G and reque= st >>>> the heap to be allocated with THP hugepages. We also set THP to madv= ise >>>> to allow hugepage backing of this heap. >>>> >>>> /usr/bin/time >>>> java -Xms700G -Xmx700G -XX:+UseTransparentHugePages -XX:+AlwaysPreT= ouch >>>> >>>> The above command allocates 700G of Java heap using hugepages. >>>> >>>> - With vanilla 5.6.0-rc3 >>>> >>>> 17.39user 1666.48system 27:37.89elapsed >>>> >>>> - With 5.6.0-rc3 + this patch, with proactiveness=3D20 >>>> >>>> 8.35user 194.58system 3:19.62elapsed >>>> >>>> Elapsed time remains around 3:15, as proactiveness is further increa= sed. >>>> >>>> Note that proactive compaction happens throughout the runtime of the= se >>>> workloads. The situation of one-time compaction, sufficient to suppl= y >>>> hugepages for following allocation stream, can probably happen for m= ore >>>> extreme proactiveness values, like 80 or 90. >>>> >>>> In the above Java workload, proactiveness is set to 20. The test sta= rts >>>> with a node's score of 80 or higher, depending on the delay between = the >>>> fragmentation step and starting the benchmark, which gives more-or-l= ess >>>> time for the initial round of compaction. As t he benchmark consumes >>>> hugepages, node's score quickly rises above the high threshold (90) = and >>>> proactive compaction starts again, which brings down the score to th= e >>>> low threshold level (80). Repeat. >>>> >>>> bpftrace also confirms proactive compaction running 20+ times during= the >>>> runtime of this Java benchmark. kcompactd threads consume 100% of on= e of >>>> the CPUs while it tries to bring a node's score within thresholds. >>>> >>>> Backoff behavior >>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>>> >>>> Above workloads produce a memory state which is easy to compact. >>>> However, if memory is filled with unmovable pages, proactive compact= ion >>>> should essentially back off. To test this aspect: >>>> >>>> - Created a kernel driver that allocates almost all memory as hugepa= ges >>>> followed by freeing first 3/4 of each hugepage. >>>> - Set proactiveness=3D40 >>>> - Note that proactive_compact_node() is deferred maximum number of t= imes >>>> with HPAGE_FRAG_CHECK_INTERVAL_MSEC of wait between each check >>>> (=3D> ~30 seconds between retries). >>>> >>>> [1] https://patchwork.kernel.org/patch/11098289/ >>>> [2] https://lore.kernel.org/linux-mm/20161230131412.GI13301@dhcp22.s= use.cz/ >>>> [3] https://lwn.net/Articles/817905/ >>>> >>>> Signed-off-by: Nitin Gupta >>>> Reviewed-by: Vlastimil Babka >>>> Reviewed-by: Khalid Aziz >>>> Reviewed-by: Oleksandr Natalenko >>>> Tested-by: Oleksandr Natalenko >>>> To: Andrew Morton >>>> CC: Vlastimil Babka >>>> CC: Khalid Aziz >>>> CC: Michal Hocko >>>> CC: Mel Gorman >>>> CC: Matthew Wilcox >>>> CC: Mike Kravetz >>>> CC: Joonsoo Kim >>>> CC: David Rientjes >>>> CC: Nitin Gupta >>>> CC: Oleksandr Natalenko >>>> CC: linux-kernel >>>> CC: linux-mm >>>> CC: Linux API >>> >>> This is now in -next and causes the following build failure: >>> >>> $ make -skj"$(nproc)" ARCH=3Dmips CROSS_COMPILE=3Dmipsel-linux- O=3Do= ut/mipsel distclean malta_kvm_guest_defconfig mm/compaction.o >>> In file included from include/linux/dev_printk.h:14, >>> from include/linux/device.h:15, >>> from include/linux/node.h:18, >>> from include/linux/cpu.h:17, >>> from mm/compaction.c:11: >>> In function 'fragmentation_score_zone', >>> inlined from '__compact_finished' at mm/compaction.c:1982:11, >>> inlined from 'compact_zone' at mm/compaction.c:2062:8: >>> include/linux/compiler.h:339:38: error: call to '__compiletime_assert= _301' declared with attribute error: BUILD_BUG failed >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^ >>> include/linux/compiler.h:320:4: note: in definition of macro '__compi= letime_assert' >>> 320 | prefix ## suffix(); \ >>> | ^~~~~~ >>> include/linux/compiler.h:339:2: note: in expansion of macro '_compile= time_assert' >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^~~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:39:37: note: in expansion of macro 'compile= time_assert' >>> 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond= ), msg) >>> | ^~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_B= UG_ON_MSG' >>> 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") >>> | ^~~~~~~~~~~~~~~~ >>> arch/mips/include/asm/page.h:70:30: note: in expansion of macro 'BUIL= D_BUG' >>> 70 | #define HUGETLB_PAGE_ORDER ({BUILD_BUG(); 0; }) >>> | ^~~~~~~~~ >>> mm/compaction.c:66:32: note: in expansion of macro 'HUGETLB_PAGE_ORDE= R' >>> 66 | #define COMPACTION_HPAGE_ORDER HUGETLB_PAGE_ORDER >>> | ^~~~~~~~~~~~~~~~~~ >>> mm/compaction.c:1898:28: note: in expansion of macro 'COMPACTION_HPAG= E_ORDER' >>> 1898 | extfrag_for_order(zone, COMPACTION_HPAGE_ORDER); >>> | ^~~~~~~~~~~~~~~~~~~~~~ >>> In function 'fragmentation_score_zone', >>> inlined from 'kcompactd' at mm/compaction.c:1918:12: >>> include/linux/compiler.h:339:38: error: call to '__compiletime_assert= _301' declared with attribute error: BUILD_BUG failed >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^ >>> include/linux/compiler.h:320:4: note: in definition of macro '__compi= letime_assert' >>> 320 | prefix ## suffix(); \ >>> | ^~~~~~ >>> include/linux/compiler.h:339:2: note: in expansion of macro '_compile= time_assert' >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^~~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:39:37: note: in expansion of macro 'compile= time_assert' >>> 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond= ), msg) >>> | ^~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_B= UG_ON_MSG' >>> 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") >>> | ^~~~~~~~~~~~~~~~ >>> arch/mips/include/asm/page.h:70:30: note: in expansion of macro 'BUIL= D_BUG' >>> 70 | #define HUGETLB_PAGE_ORDER ({BUILD_BUG(); 0; }) >>> | ^~~~~~~~~ >>> mm/compaction.c:66:32: note: in expansion of macro 'HUGETLB_PAGE_ORDE= R' >>> 66 | #define COMPACTION_HPAGE_ORDER HUGETLB_PAGE_ORDER >>> | ^~~~~~~~~~~~~~~~~~ >>> mm/compaction.c:1898:28: note: in expansion of macro 'COMPACTION_HPAG= E_ORDER' >>> 1898 | extfrag_for_order(zone, COMPACTION_HPAGE_ORDER); >>> | ^~~~~~~~~~~~~~~~~~~~~~ >>> In function 'fragmentation_score_zone', >>> inlined from 'kcompactd' at mm/compaction.c:1918:12: >>> include/linux/compiler.h:339:38: error: call to '__compiletime_assert= _301' declared with attribute error: BUILD_BUG failed >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^ >>> include/linux/compiler.h:320:4: note: in definition of macro '__compi= letime_assert' >>> 320 | prefix ## suffix(); \ >>> | ^~~~~~ >>> include/linux/compiler.h:339:2: note: in expansion of macro '_compile= time_assert' >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^~~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:39:37: note: in expansion of macro 'compile= time_assert' >>> 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond= ), msg) >>> | ^~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_B= UG_ON_MSG' >>> 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") >>> | ^~~~~~~~~~~~~~~~ >>> arch/mips/include/asm/page.h:70:30: note: in expansion of macro 'BUIL= D_BUG' >>> 70 | #define HUGETLB_PAGE_ORDER ({BUILD_BUG(); 0; }) >>> | ^~~~~~~~~ >>> mm/compaction.c:66:32: note: in expansion of macro 'HUGETLB_PAGE_ORDE= R' >>> 66 | #define COMPACTION_HPAGE_ORDER HUGETLB_PAGE_ORDER >>> | ^~~~~~~~~~~~~~~~~~ >>> mm/compaction.c:1898:28: note: in expansion of macro 'COMPACTION_HPAG= E_ORDER' >>> 1898 | extfrag_for_order(zone, COMPACTION_HPAGE_ORDER); >>> | ^~~~~~~~~~~~~~~~~~~~~~ >>> In function 'fragmentation_score_zone', >>> inlined from 'kcompactd' at mm/compaction.c:1918:12: >>> include/linux/compiler.h:339:38: error: call to '__compiletime_assert= _301' declared with attribute error: BUILD_BUG failed >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^ >>> include/linux/compiler.h:320:4: note: in definition of macro '__compi= letime_assert' >>> 320 | prefix ## suffix(); \ >>> | ^~~~~~ >>> include/linux/compiler.h:339:2: note: in expansion of macro '_compile= time_assert' >>> 339 | _compiletime_assert(condition, msg, __compiletime_assert_, _= _COUNTER__) >>> | ^~~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:39:37: note: in expansion of macro 'compile= time_assert' >>> 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond= ), msg) >>> | ^~~~~~~~~~~~~~~~~~ >>> include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_B= UG_ON_MSG' >>> 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") >>> | ^~~~~~~~~~~~~~~~ >>> arch/mips/include/asm/page.h:70:30: note: in expansion of macro 'BUIL= D_BUG' >>> 70 | #define HUGETLB_PAGE_ORDER ({BUILD_BUG(); 0; }) >>> | ^~~~~~~~~ >>> mm/compaction.c:66:32: note: in expansion of macro 'HUGETLB_PAGE_ORDE= R' >>> 66 | #define COMPACTION_HPAGE_ORDER HUGETLB_PAGE_ORDER >>> | ^~~~~~~~~~~~~~~~~~ >>> mm/compaction.c:1898:28: note: in expansion of macro 'COMPACTION_HPAG= E_ORDER' >>> 1898 | extfrag_for_order(zone, COMPACTION_HPAGE_ORDER); >>> | ^~~~~~~~~~~~~~~~~~~~~~ >>> make[3]: *** [scripts/Makefile.build:281: mm/compaction.o] Error 1 >>> make[3]: Target '__build' not remade because of errors. >>> make[2]: *** [Makefile:1765: mm] Error 2 >>> make[2]: Target 'mm/compaction.o' not remade because of errors. >>> make[1]: *** [Makefile:336: __build_one_by_one] Error 2 >>> make[1]: Target 'distclean' not remade because of errors. >>> make[1]: Target 'malta_kvm_guest_defconfig' not remade because of err= ors. >>> make[1]: Target 'mm/compaction.o' not remade because of errors. >>> make: *** [Makefile:185: __sub-make] Error 2 >>> make: Target 'distclean' not remade because of errors. >>> make: Target 'malta_kvm_guest_defconfig' not remade because of errors= . >>> make: Target 'mm/compaction.o' not remade because of errors. >>> >>> I am not sure why MIPS is special with its handling of hugepage suppo= rt >>> but I am far from a MIPS expert :) >>> >> >> Can you check if this patch fixes the compile error: >> >> >> diff --git a/mm/compaction.c b/mm/compaction.c >> index 45fd24a0ea0b..02963ffb9e70 100644 >> --- a/mm/compaction.c >> +++ b/mm/compaction.c >> @@ -62,7 +62,7 @@ static const unsigned int >> HPAGE_FRAG_CHECK_INTERVAL_MSEC =3D 500; >> */ >> #if defined CONFIG_TRANSPARENT_HUGEPAGE >> #define COMPACTION_HPAGE_ORDER HPAGE_PMD_ORDER >> -#elif defined HUGETLB_PAGE_ORDER >> +#elif defined CONFIG_HUGETLBFS >> #define COMPACTION_HPAGE_ORDER HUGETLB_PAGE_ORDER >> #else >> #define COMPACTION_HPAGE_ORDER (PMD_SHIFT - PAGE_SHIFT) >> >> >> >> >=20 > Tested-by: Nathan Chancellor # build >=20 Thanks. I will send out a patch with this fix soon. Nitin