From patchwork Sat Oct 9 09:26:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rongwei Wang X-Patchwork-Id: 12547385 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9015AC433FE for ; Sat, 9 Oct 2021 09:27:09 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2659D60F21 for ; Sat, 9 Oct 2021 09:27:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2659D60F21 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 6646F6B0071; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E936940007; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F042900002; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 27A8A6B0071 for ; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) Received: from smtpin11.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id B6FE4182B52B8 for ; Sat, 9 Oct 2021 09:27:06 +0000 (UTC) X-FDA: 78676370052.11.BB87C7A Received: from out30-57.freemail.mail.aliyun.com (out30-57.freemail.mail.aliyun.com [115.124.30.57]) by imf10.hostedemail.com (Postfix) with ESMTP id A3BCC6004426 for ; Sat, 9 Oct 2021 09:27:05 +0000 (UTC) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R101e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04395;MF=rongwei.wang@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0Ur5qOcb_1633771618; Received: from localhost.localdomain(mailfrom:rongwei.wang@linux.alibaba.com fp:SMTPD_---0Ur5qOcb_1633771618) by smtp.aliyun-inc.com(127.0.0.1); Sat, 09 Oct 2021 17:27:00 +0800 From: Rongwei Wang To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: akpm@linux-foundation.org, willy@infradead.org, viro@zeniv.linux.org.uk, song@kernel.org, william.kucharski@oracle.com, hughd@google.com, shy828301@gmail.com, linmiaohe@huawei.com, peterx@redhat.com Subject: [PATCH 1/3] mm, thp: support binaries transparent use of file THP Date: Sat, 9 Oct 2021 17:26:56 +0800 Message-Id: <20211009092658.59665-2-rongwei.wang@linux.alibaba.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211009092658.59665-1-rongwei.wang@linux.alibaba.com> References: <20211009092658.59665-1-rongwei.wang@linux.alibaba.com> MIME-Version: 1.0 Authentication-Results: imf10.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf10.hostedemail.com: domain of rongwei.wang@linux.alibaba.com designates 115.124.30.57 as permitted sender) smtp.mailfrom=rongwei.wang@linux.alibaba.com X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: A3BCC6004426 X-Stat-Signature: 9nb7zrzc7hi3bwpbksaau3d19yidh6c4 X-HE-Tag: 1633771625-147486 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: The file THP for .text is not convenient to use at present. Applications need to explicitly madvise MADV_HUGEPAGE for .text, which is not friendly for tasks in the production environment. This patch extends READ_ONLY_THP_FOR_FS, introduces a new sysfs interface: hugetext_enabled, to make the read-only file-backed pages THPeligible proactively and transparently. Compared with original design, It not depend on 'madvise()' any more. And because of 'hugetext_enabled' introduced, users are no longer limited to 'enabled' setting (e.g., always, madvise and never). There are two methods to enable or disable this feature: To enable hugetext: 1. echo 1 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled 2. hugetext=1 in boot cmdline To disable hugetext: 1. echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled 2. hugetext=0 in boot cmdline This feature is disabled by default. Signed-off-by: Gang Deng Signed-off-by: Xu Yu Signed-off-by: Rongwei Wang --- include/linux/huge_mm.h | 24 ++++++++++++++++ include/linux/khugepaged.h | 9 ++++++ mm/Kconfig | 11 ++++++++ mm/huge_memory.c | 57 ++++++++++++++++++++++++++++++++++++++ mm/khugepaged.c | 4 +++ mm/memory.c | 12 ++++++++ 6 files changed, 117 insertions(+) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index f123e15d966e..95b718031ef3 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -87,6 +87,9 @@ enum transparent_hugepage_flag { TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG, TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG, +#ifdef CONFIG_HUGETEXT + TRANSPARENT_HUGEPAGE_HUGETEXT_ENABLED_FLAG, +#endif }; struct kobject; @@ -140,6 +143,27 @@ static inline bool transhuge_vma_enabled(struct vm_area_struct *vma, return true; } +#ifdef CONFIG_HUGETEXT +#define hugetext_enabled() \ + (transparent_hugepage_flags & \ + (1<vm_file && !inode_is_open_for_write(vma->vm_file->f_inode)) + return IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) - vma->vm_pgoff, + HPAGE_PMD_NR); + + return false; +} + /* * to be used on vmas which are known to support THP. * Use transparent_hugepage_active otherwise diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h index 2fcc01891b47..ad56f75a2fda 100644 --- a/include/linux/khugepaged.h +++ b/include/linux/khugepaged.h @@ -26,10 +26,18 @@ static inline void collapse_pte_mapped_thp(struct mm_struct *mm, } #endif +#ifdef CONFIG_HUGETEXT +#define khugepaged_enabled() \ + (transparent_hugepage_flags & \ + ((1<vm_mm->flags)) if ((khugepaged_always() || (shmem_file(vma->vm_file) && shmem_huge_enabled(vma)) || + (hugetext_enabled() && vma_is_hugetext(vma, vm_flags)) || (khugepaged_req_madv() && (vm_flags & VM_HUGEPAGE))) && !(vm_flags & VM_NOHUGEPAGE) && !test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)) diff --git a/mm/Kconfig b/mm/Kconfig index d16ba9249bc5..5aa3fa86e7b1 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -868,6 +868,17 @@ config READ_ONLY_THP_FOR_FS support of file THPs will be developed in the next few release cycles. +config HUGETEXT + bool "THP for text segments" + depends on READ_ONLY_THP_FOR_FS + + help + Allow khugepaged to put read-only file-backed pages, including + shared libraries, as well as the anonymous and executable pages + in THP. + + This feature builds on and extends READ_ONLY_THP_FOR_FS. + config ARCH_HAS_PTE_SPECIAL bool diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 5e9ef0fc261e..f6fffb5c5130 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -330,6 +330,35 @@ static ssize_t hpage_pmd_size_show(struct kobject *kobj, static struct kobj_attribute hpage_pmd_size_attr = __ATTR_RO(hpage_pmd_size); +#ifdef CONFIG_HUGETEXT +static ssize_t hugetext_enabled_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return single_hugepage_flag_show(kobj, attr, buf, + TRANSPARENT_HUGEPAGE_HUGETEXT_ENABLED_FLAG); +} + +static ssize_t hugetext_enabled_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + ssize_t ret = count; + + ret = single_hugepage_flag_store(kobj, attr, buf, count, + TRANSPARENT_HUGEPAGE_HUGETEXT_ENABLED_FLAG); + + if (ret > 0) { + int err = start_stop_khugepaged(); + + if (err) + ret = err; + } + + return ret; +} +struct kobj_attribute hugetext_enabled_attr = + __ATTR(hugetext_enabled, 0644, hugetext_enabled_show, hugetext_enabled_store); +#endif /* CONFIG_HUGETEXT */ + static struct attribute *hugepage_attr[] = { &enabled_attr.attr, &defrag_attr.attr, @@ -337,6 +366,9 @@ static struct attribute *hugepage_attr[] = { &hpage_pmd_size_attr.attr, #ifdef CONFIG_SHMEM &shmem_enabled_attr.attr, +#endif +#ifdef CONFIG_HUGETEXT + &hugetext_enabled_attr.attr, #endif NULL, }; @@ -491,6 +523,31 @@ static int __init setup_transparent_hugepage(char *str) } __setup("transparent_hugepage=", setup_transparent_hugepage); +#ifdef CONFIG_HUGETEXT +static int __init setup_hugetext(char *str) +{ + int ret = 0; + + if (!str) + goto out; + if (!strcmp(str, "1")) { + set_bit(TRANSPARENT_HUGEPAGE_HUGETEXT_ENABLED_FLAG, + &transparent_hugepage_flags); + ret = 1; + } else if (!strcmp(str, "0")) { + clear_bit(TRANSPARENT_HUGEPAGE_HUGETEXT_ENABLED_FLAG, + &transparent_hugepage_flags); + ret = 1; + } + +out: + if (!ret) + pr_warn("hugetext= cannot parse, ignored\n"); + return ret; +} +__setup("hugetext=", setup_hugetext); +#endif + pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 045cc579f724..2810bc1962b3 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -451,6 +451,10 @@ static bool hugepage_vma_check(struct vm_area_struct *vma, HPAGE_PMD_NR); } + /* Make hugetext independent of THP settings */ + if (hugetext_enabled() && vma_is_hugetext(vma, vm_flags)) + return true; + /* THP settings require madvise. */ if (!(vm_flags & VM_HUGEPAGE) && !khugepaged_always()) return false; diff --git a/mm/memory.c b/mm/memory.c index adf9b9ef8277..b0d0889af6ab 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -73,6 +73,7 @@ #include #include #include +#include #include @@ -4157,6 +4158,17 @@ static vm_fault_t do_read_fault(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; vm_fault_t ret = 0; +#ifdef CONFIG_HUGETEXT + /* Add the candidate hugetext vma into khugepaged scan list */ + if (pmd_none(*vmf->pmd) && hugetext_enabled() + && vma_is_hugetext(vma, vma->vm_flags)) { + unsigned long haddr = vmf->address & HPAGE_PMD_MASK; + + if (transhuge_vma_suitable(vma, haddr)) + khugepaged_enter(vma, vma->vm_flags); + } +#endif + /* * Let's call ->map_pages() first and use ->fault() as fallback * if page by the offset is not ready to be mapped (cold cache or From patchwork Sat Oct 9 09:26:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rongwei Wang X-Patchwork-Id: 12547387 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D1017C433FE for ; Sat, 9 Oct 2021 09:27:11 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6572960EE4 for ; Sat, 9 Oct 2021 09:27:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6572960EE4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id F3C02900002; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EC4936B0073; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D655F900002; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0009.hostedemail.com [216.40.44.9]) by kanga.kvack.org (Postfix) with ESMTP id BF7CC6B0072 for ; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) Received: from smtpin34.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 71D89182B69D4 for ; Sat, 9 Oct 2021 09:27:07 +0000 (UTC) X-FDA: 78676370094.34.0BE3E2C Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by imf21.hostedemail.com (Postfix) with ESMTP id AC7E7D03D945 for ; Sat, 9 Oct 2021 09:27:06 +0000 (UTC) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R121e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04407;MF=rongwei.wang@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0Ur5qOcb_1633771618; Received: from localhost.localdomain(mailfrom:rongwei.wang@linux.alibaba.com fp:SMTPD_---0Ur5qOcb_1633771618) by smtp.aliyun-inc.com(127.0.0.1); Sat, 09 Oct 2021 17:27:01 +0800 From: Rongwei Wang To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: akpm@linux-foundation.org, willy@infradead.org, viro@zeniv.linux.org.uk, song@kernel.org, william.kucharski@oracle.com, hughd@google.com, shy828301@gmail.com, linmiaohe@huawei.com, peterx@redhat.com Subject: [PATCH 2/3] mm, thp: make mapping address of libraries THP align Date: Sat, 9 Oct 2021 17:26:57 +0800 Message-Id: <20211009092658.59665-3-rongwei.wang@linux.alibaba.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211009092658.59665-1-rongwei.wang@linux.alibaba.com> References: <20211009092658.59665-1-rongwei.wang@linux.alibaba.com> MIME-Version: 1.0 X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: AC7E7D03D945 X-Stat-Signature: ys3sdppt6eiwdyrhtyfqsh99izakonw7 Authentication-Results: imf21.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf21.hostedemail.com: domain of rongwei.wang@linux.alibaba.com designates 115.124.30.130 as permitted sender) smtp.mailfrom=rongwei.wang@linux.alibaba.com X-HE-Tag: 1633771626-528367 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: For shared libraries, ld.so seems not to consider p_align well, as shown below. $ readelf -l /usr/lib64/libc-2.17.so LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x00000000001c2fe8 0x00000000001c2fe8 R E 200000 $ cat /proc/1/smaps 7fecc4072000-7fecc4235000 r-xp 00000000 08:03 655802 /usr/lib64/libc-2.17.so This makes the mapping address allocated by 'get_unmapped_area' align with 2M for libraries, to facilitate file THP for .text section as far as possible. Signed-off-by: Gang Deng Signed-off-by: Xu Yu Signed-off-by: Rongwei Wang --- include/linux/huge_mm.h | 12 ++++++++++++ mm/huge_memory.c | 15 +++++++++++++++ mm/mmap.c | 18 ++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 95b718031ef3..ddbc0d19f90f 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -147,8 +147,20 @@ static inline bool transhuge_vma_enabled(struct vm_area_struct *vma, #define hugetext_enabled() \ (transparent_hugepage_flags & \ (1<mm->get_unmapped_area(filp, addr, len, pgoff, flags); +} +#endif /* CONFIG_HUGETEXT */ + static vm_fault_t __do_huge_pmd_anonymous_page(struct vm_fault *vmf, struct page *page, gfp_t gfp) { diff --git a/mm/mmap.c b/mm/mmap.c index 88dcc5c25225..cad94a13edc2 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2242,8 +2242,26 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, get_area = current->mm->get_unmapped_area; if (file) { +#ifdef CONFIG_HUGETEXT + /* + * Prior to the file->f_op->get_unmapped_area. + * + * If hugetext is enabled, except for MAP_FIXED, it always + * make the mapping address of files that have executable + * attribute be mapped in 2MB alignment. + */ + struct inode *inode = file_inode(file); + + if (hugetext_enabled() && (inode->i_mode & 0111) && + (!file->f_op->get_unmapped_area || + file->f_op->get_unmapped_area == thp_get_unmapped_area)) + get_area = hugetext_get_unmapped_area; + else if (file->f_op->get_unmapped_area) + get_area = file->f_op->get_unmapped_area; +#else if (file->f_op->get_unmapped_area) get_area = file->f_op->get_unmapped_area; +#endif } else if (flags & MAP_SHARED) { /* * mmap_region() will call shmem_zero_setup() to create a file, From patchwork Sat Oct 9 09:26:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rongwei Wang X-Patchwork-Id: 12547383 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56DACC4332F for ; Sat, 9 Oct 2021 09:27:08 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id DD69A60EE4 for ; Sat, 9 Oct 2021 09:27:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DD69A60EE4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 3FD21900004; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 352DF900003; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1CD21900002; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0122.hostedemail.com [216.40.44.122]) by kanga.kvack.org (Postfix) with ESMTP id 073F86B0071 for ; Sat, 9 Oct 2021 05:27:07 -0400 (EDT) Received: from smtpin03.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 9ED25182B254E for ; Sat, 9 Oct 2021 09:27:06 +0000 (UTC) X-FDA: 78676370052.03.31CAFFE Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by imf01.hostedemail.com (Postfix) with ESMTP id A005F5079EF3 for ; Sat, 9 Oct 2021 09:27:05 +0000 (UTC) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R161e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04394;MF=rongwei.wang@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0Ur5qOcb_1633771618; Received: from localhost.localdomain(mailfrom:rongwei.wang@linux.alibaba.com fp:SMTPD_---0Ur5qOcb_1633771618) by smtp.aliyun-inc.com(127.0.0.1); Sat, 09 Oct 2021 17:27:02 +0800 From: Rongwei Wang To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: akpm@linux-foundation.org, willy@infradead.org, viro@zeniv.linux.org.uk, song@kernel.org, william.kucharski@oracle.com, hughd@google.com, shy828301@gmail.com, linmiaohe@huawei.com, peterx@redhat.com Subject: [PATCH 3/3] mm, thp: make mapping address of PIC binaries THP align Date: Sat, 9 Oct 2021 17:26:58 +0800 Message-Id: <20211009092658.59665-4-rongwei.wang@linux.alibaba.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211009092658.59665-1-rongwei.wang@linux.alibaba.com> References: <20211009092658.59665-1-rongwei.wang@linux.alibaba.com> MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: A005F5079EF3 X-Stat-Signature: pzi49qc3rmabm7hfg818b3afs1bsbpyw Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf01.hostedemail.com: domain of rongwei.wang@linux.alibaba.com designates 115.124.30.130 as permitted sender) smtp.mailfrom=rongwei.wang@linux.alibaba.com X-HE-Tag: 1633771625-598806 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: For binaries that are compiled with '--pie -fPIC' and with LOAD alignment smaller than 2M (typically 4K, 64K), the load address is least likely to be 2M aligned. This changes the maximum_alignment of such binaries to 2M to facilitate file THP for .text section as far as possible. Signed-off-by: Gang Deng Signed-off-by: Xu Yu Signed-off-by: Rongwei Wang --- fs/binfmt_elf.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index a813b70f594e..78795572d877 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1136,6 +1136,11 @@ static int load_elf_binary(struct linux_binprm *bprm) retval = -EINVAL; goto out_free_dentry; } +#ifdef CONFIG_HUGETEXT + if (hugetext_enabled() && interpreter && + total_size >= HPAGE_PMD_SIZE) + load_bias &= HPAGE_PMD_MASK; +#endif } error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,