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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83250C00140 for ; Tue, 2 Aug 2022 20:32:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D9A9C8E0002; Tue, 2 Aug 2022 16:32:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D49618E0001; Tue, 2 Aug 2022 16:32:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C11418E0002; Tue, 2 Aug 2022 16:32:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B19248E0001 for ; Tue, 2 Aug 2022 16:32:54 -0400 (EDT) Received: from smtpin31.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 85F2E4103C for ; Tue, 2 Aug 2022 20:32:54 +0000 (UTC) X-FDA: 79755801468.31.05C33B3 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf15.hostedemail.com (Postfix) with ESMTP id E4D4CA010B for ; Tue, 2 Aug 2022 20:32:53 +0000 (UTC) Received: from pps.filterd (m0044010.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 272I2lq2008225 for ; Tue, 2 Aug 2022 13:32:52 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=facebook; bh=jQXMVD17Q+oY1vQphivwjVRtcDEGg5bEem2kARFesYk=; b=qAyOMi7bZYNvENMzOmVY0oqbM0eZheloTjHmV76fIqCtjkKsd+IOsDwdNRh8zVVF06lU EWBla84eOhzI7pGy7befoH77mJffUwlwFGj5z8aHyZz1wEi8Ih3CeZsAysXe288KjsKz Bd9jZgbw0HQWQXGMW5VdALih4lRHtPi9q88= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3hpq1pf58e-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 02 Aug 2022 13:32:52 -0700 Received: from twshared25107.07.ash9.facebook.com (2620:10d:c085:108::4) by mail.thefacebook.com (2620:10d:c085:21d::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Tue, 2 Aug 2022 13:32:51 -0700 Received: by devvm6390.atn0.facebook.com (Postfix, from userid 352741) id E7BCA1B76716; Tue, 2 Aug 2022 13:32:48 -0700 (PDT) From: To: , , , , , , CC: Alexander Zhu Subject: [PATCH v3] btrfs: fix alginment of VMA for memory mapped files on THP Date: Tue, 2 Aug 2022 13:32:46 -0700 Message-ID: <20220802203246.434560-1-alexlzhu@fb.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-FB-Internal: Safe Content-Type: text/plain X-Proofpoint-GUID: N1lkm2Q4_Ia-qByy6fLhy_kIOolv0uE1 X-Proofpoint-ORIG-GUID: N1lkm2Q4_Ia-qByy6fLhy_kIOolv0uE1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-08-02_14,2022-08-02_01,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659472374; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=jQXMVD17Q+oY1vQphivwjVRtcDEGg5bEem2kARFesYk=; b=xd826Tj3TZV7YAHv1POkcIVOQjftTGlaCkPVVJvCSjSXxnQGXVAn3RqQIfCcPoTSWQpxJT TmblkmSjl7G8HNyJynG+bkBSUTQZUfAQ3hIoUSf8oUyY678kqCxVnKBVFf1GlEtNWyXRSb KIZKQLXU4loBtrtfOaqPczjvDd9fJyg= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=qAyOMi7b; spf=pass (imf15.hostedemail.com: domain of "prvs=9213387f59=alexlzhu@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=9213387f59=alexlzhu@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1659472374; a=rsa-sha256; cv=none; b=w8P3yQ+iKo7tk/JatDblcEaJtl694K4D0jv8fn3jMCobJykQsC4XCvAQL998sGG7+Az8uM RYy1kFtT/ix0vdjFUJX/BmbpDyJttJXj6zWXrSHtJOulNqK6aOuy12z8GtqZWsRqFgCXsE U9NwZ0Nm348pXupQsVV3DJ0O+L05eJg= Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=qAyOMi7b; spf=pass (imf15.hostedemail.com: domain of "prvs=9213387f59=alexlzhu@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=9213387f59=alexlzhu@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E4D4CA010B X-Stat-Signature: 47d61fxzt3fdc1qa7sf4cjzymcrnqqk4 X-HE-Tag: 1659472373-470985 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: From: Alexander Zhu With CONFIG_READ_ONLY_THP_FOR_FS, the Linux kernel supports using THPs fo= r read-only mmapped files, such as shared libraries. However, the kernel makes no attempt to actually align those mappings on 2MB boundaries, which makes it impossible to use those THPs most of the time. This issue applies to general file mapping THP as well as existing setups using CONFIG_READ_ONLY_THP_FOR_FS. This is easily fixed by using thp_get_unmapped_area for the unmapped_area function in btrfs, which is what ext2, ext4, fuse, and xfs all use. Initially btrfs had been left out in Commit 8c07fc452ac0 ("btrfs: fix alginment of VMA for memory mapped files on THP") as btrfs does not suppo= rt DAX. However, Commit 1854bc6e2420 ("mm/readahead: Align file mappings for non-DAX") removed the DAX requirement. We should now be able to call thp_get_unmapped_area() for btrfs. The problem can be seen in /proc/PID/smaps where THPeligible is set to 0 on mappings to eligible shared object files as shown below. Before this patch: 7fc6a7e18000-7fc6a80cc000 r-xp 00000000 00:1e 199856 /usr/lib64/libcrypto.so.1.1.1k Size: 2768 kB THPeligible: 0 VmFlags: rd ex mr mw me With this patch the library is mapped at a 2MB aligned address: fbdfe200000-7fbdfe4b4000 r-xp 00000000 00:1e 199856 /usr/lib64/libcrypto.so.1.1.1k Size: 2768 kB THPeligible: 1 VmFlags: rd ex mr mw me This fixes the alignment of VMAs for any mmap of a file that has the rd and ex permissions and size >=3D 2MB. The VMA alignment and THPeligible field for anonymous memory is handled separately and is thus not effected by this change. Signed-off-by: Alexander Zhu Changes in v3: -Fixed subject to be btrfs instead of mm -Fixed Signed-off-by to use full name -Added to description explaining why thp_get_unmapped_area can be used for btrfs Changes in v2: -Changed from x86_64 diff to btrfs diff using thp_get_unmapped_area --- fs/btrfs/file.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 9dfde1af8a64..2423040db167 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -3808,6 +3808,7 @@ const struct file_operations btrfs_file_operations = =3D { .mmap =3D btrfs_file_mmap, .open =3D btrfs_file_open, .release =3D btrfs_release_file, + .get_unmapped_area =3D thp_get_unmapped_area, .fsync =3D btrfs_sync_file, .fallocate =3D btrfs_fallocate, .unlocked_ioctl =3D btrfs_ioctl, --=20 2.30.2