From patchwork Fri Apr 3 08:18:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prathu Baronia X-Patchwork-Id: 11472079 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 81D7C17EA for ; Fri, 3 Apr 2020 08:18:23 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 40E3920B1F for ; Fri, 3 Apr 2020 08:18:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=oneplus.com header.i=@oneplus.com header.b="l9ulkbKg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 40E3920B1F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=oneplus.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4CA3B8E0008; Fri, 3 Apr 2020 04:18:22 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 47C518E0007; Fri, 3 Apr 2020 04:18:22 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 36B008E0008; Fri, 3 Apr 2020 04:18:22 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0123.hostedemail.com [216.40.44.123]) by kanga.kvack.org (Postfix) with ESMTP id 1EC598E0007 for ; Fri, 3 Apr 2020 04:18:22 -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 CFC15180AD817 for ; Fri, 3 Apr 2020 08:18:21 +0000 (UTC) X-FDA: 76665841602.04.meat24_831ac18da7002 X-Spam-Summary: 2,0,0,e23eee41d2407dca,d41d8cd98f00b204,prathu.baronia@oneplus.com,,RULES_HIT:41:69:152:355:379:582:800:960:973:988:989:1152:1260:1277:1312:1313:1314:1345:1437:1516:1518:1519:1535:1542:1593:1594:1595:1596:1711:1730:1747:1777:1792:2393:2559:2562:2914:3138:3139:3140:3141:3142:3353:3865:3866:3867:3868:3870:4119:4250:4321:5007:6119:6120:6261:6653:7264:7774:7901:10004:10400:11026:11232:11473:11658:11914:12043:12296:12297:12438:12519:12555:12663:12679:12683:12895:13161:13221:13229:13895:14096:14097:14181:14721:21080:21444:21451:21611:21627:21740:21795:30051:30054:30056,0,RBL:40.107.132.122:@oneplus.com:.lbl8.mailshell.net-62.2.1.100 66.100.201.201,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fp,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:56,LUA_SUMMARY:none X-HE-Tag: meat24_831ac18da7002 X-Filterd-Recvd-Size: 8007 Received: from APC01-PU1-obe.outbound.protection.outlook.com (mail-eopbgr1320122.outbound.protection.outlook.com [40.107.132.122]) by imf05.hostedemail.com (Postfix) with ESMTP for ; Fri, 3 Apr 2020 08:18:20 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oVxYq9qGWlSqktk+jskVoXUrL6U9bSIwwZ0HxtPCMSsgLfMPQAVK+GOpAK06LC5VK0wTs65pXnB5VNJWv1y7y2golR6QYkELNiVwy+YKoualtosu4piKQyg7lOYADYxIMlhf/cYYTK0bTgTlWUSZ1yRJTBiQkewh/c7PJ1xNsgR53dOG6fM2g/P/7viBRyMdOnJ1El4ne+Jm74oSxSwPPLdSyNZiUC+BS9bcvP7R+PQ+fcyoku33xHI2M7Gxw6P72cxQIyepsFSAPJz7w0pZunwdIiGX9hreeEtpe8wARBlQNsVr4lSp6YpbHo8rkXaOmMsFDha4fnDibXdLNp7a2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=caUjuxZh0W7Yma148EmBbK2OW2JlxiedEGqLKzPgpsQ=; b=FyHqp6IBGNQKATuecfKookhR1QpXiFJeGxUdzGF5Hh4Wc4tZos00aC2wy5uLur3Ti9PIb/f0r06ygcU4oyki62qnteOze/me/zW2nPfv3BmaVnNL/vtl1hioDSStgA//88IFHFIOQKsqWruo5Y88v35i14lRKhf16BUDJwACstdXHVvn8ahXl3O26sWmh2qjHrKmxHtINN1Vbmi8lu9TPeJTo8k248+zywZbyBkr8NOSxvyTnG4WpxKKox4JZ6w1GGQZv9QWI8983B4fgCub/B3xcY1jJbl4JJfW88qbFYLHToMGWZB5w7ZVgRNsAB7ege7aktn+/Vq9XtyzA2rcuQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oneplus.com; dmarc=pass action=none header.from=oneplus.com; dkim=pass header.d=oneplus.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneplus.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=caUjuxZh0W7Yma148EmBbK2OW2JlxiedEGqLKzPgpsQ=; b=l9ulkbKgCfB96ra28cSqUdMnxddZLbGGqTTgr8sU6g8CNvvHcYadf9Zcy4YaWyFobqDEe+yE83MdAuk5hqTTdLiMrd83S3BrwOMegVoBgFshN3okaeOTRN9wHrYTxlh4rKdg68bMCbJLZ0h5fLAgXT3tbxpLgD9YjTO/0t1qImM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=prathu.baronia@oneplus.com; Received: from HKAPR04MB4067.apcprd04.prod.outlook.com (20.180.91.77) by HKAPR04MB3987.apcprd04.prod.outlook.com (20.180.89.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.19; Fri, 3 Apr 2020 08:18:18 +0000 Received: from HKAPR04MB4067.apcprd04.prod.outlook.com ([fe80::41bb:a53c:a2f5:3511]) by HKAPR04MB4067.apcprd04.prod.outlook.com ([fe80::41bb:a53c:a2f5:3511%9]) with mapi id 15.20.2878.016; Fri, 3 Apr 2020 08:18:18 +0000 Date: Fri, 3 Apr 2020 13:48:14 +0530 From: Prathu Baronia To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: gregkh@linuxfoundation.org, gthelen@google.com, jack@suse.cz, mhocko@suse.com, ken.lin@oneplus.com, gasine.xu@oneplus.com, chintan.pandya@oneplus.com Subject: [RFC] mm/memory.c: Optimizing THP zeroing routine for !HIGHMEM cases Message-ID: <20200403081812.GA14090@oneplus.com> Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: HK2PR02CA0159.apcprd02.prod.outlook.com (2603:1096:201:1f::19) To HKAPR04MB4067.apcprd04.prod.outlook.com (2603:1096:203:de::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from oneplus.com (183.83.136.195) by HK2PR02CA0159.apcprd02.prod.outlook.com (2603:1096:201:1f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.15 via Frontend Transport; Fri, 3 Apr 2020 08:18:16 +0000 X-Originating-IP: [183.83.136.195] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff6254e7-c915-462b-a642-08d7d7a79077 X-MS-TrafficTypeDiagnostic: HKAPR04MB3987:|HKAPR04MB3987: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 0362BF9FDB X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HKAPR04MB4067.apcprd04.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10019020)(4636009)(346002)(376002)(39860400002)(396003)(136003)(366004)(316002)(52116002)(107886003)(1076003)(86362001)(33656002)(2906002)(4326008)(66476007)(5660300002)(66946007)(81156014)(81166006)(2616005)(66556008)(16526019)(55016002)(7696005)(26005)(956004)(8676002)(8936002)(478600001)(186003)(44832011)(36756003)(8886007);DIR:OUT;SFP:1102; Received-SPF: None (protection.outlook.com: oneplus.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dfsMo5xY6hQCRQIdLvtZ6hPwtEUVbmSLirVZsyylStlRmR5kan6vo5+Q7w9gWoY+cd6boUmep8yPsRf48pn/Cd7g5hnmEh9kxVRfxauXBNGQVfa5qbpZGZfvYQjs+MkhWxbhMXPev2Ce0RDSCmg/mVj/b4LsBLPbPOk8kDd5rWqzX3dRXyYHsKfFRpaNkqZSpRyJoj8fTpKuM0a8jRcNza+0PEyg/Qj0ltMzd6SSkancELFd5EgEVpz+Icmk61/df5p/l1CXh/vivnLVcMi6DBTn9nZ70PO/GzAzFw192Umg8DdJ5gD1x2ISv/s+EY4fYYJaffkHQJN5xDKi6nms7o6/v4cSXWSx1eUHCUBcqgrdAw74xJBL4o8BeTIfXyk/Xvyth9ohLi1qa/Fh7O9rz2VK0OZFTOVRMZWIbQYJ0VNkaf4ZkPrlkei+t18W8quF X-MS-Exchange-AntiSpam-MessageData: gGhV36pwRyXiAmyN3zeZsQoTfAMk5sFKfX+ulaESRpztp5oTh7+dJHmoZZgGoRmNs3IZLMEa4tcbUxtwsVKkyobWfalAdRpUcT5FdqR+iFd3md7wCCtz7U6w6Dt6xMxRX5kRlh2M9uYos8+9JB1dcQ== X-OriginatorOrg: oneplus.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff6254e7-c915-462b-a642-08d7d7a79077 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2020 08:18:18.1685 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0423909d-296c-463e-ab5c-e5853a518df8 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: uVx9JTS8UxditJc7rlrU0r3AREAl1Ysbgw9CL2cyRkA2EWeCZ22f9fUbHbCO7PsE5UvMdArTXC+ud8eLrMUbQXnuRj5BKT4E9pCnLN7nT44= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HKAPR04MB3987 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: THP allocation for anon memory requires zeroing of the huge page. To do so, we iterate over 2MB memory in 4KB chunks. Each iteration calls for kmap_atomic() and kunmap_atomic(). This routine makes sense where we need temporary mapping of the user page. In !HIGHMEM cases, specially in 64-bit architectures, we don't need temp mapping. Hence, kmap_atomic() acts as nothing more than multiple barrier() calls. This called for optimization. Simply getting VADDR from page does the job for us. So, implement another (optimized) routine for clear_huge_page() which doesn't need temporary mapping of user space page. While testing this patch on Qualcomm SM8150 SoC (kernel v4.14.117), we see 64% Improvement in clear_huge_page(). Ftrace results: Default profile: ------------------------------------------ 6) ! 473.802 us | clear_huge_page(); ------------------------------------------ With this patch applied: ------------------------------------------ 5) ! 170.156 us | clear_huge_page(); ------------------------------------------ Signed-off-by: Prathu Baronia Reported-by: Chintan Pandya --- mm/memory.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index 3ee073d..3e120e8 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5119,6 +5119,7 @@ EXPORT_SYMBOL(__might_fault); #endif #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS) +#ifdef CONFIG_HIGHMEM static void clear_gigantic_page(struct page *page, unsigned long addr, unsigned int pages_per_huge_page) @@ -5183,6 +5184,16 @@ void clear_huge_page(struct page *page, addr + right_idx * PAGE_SIZE); } } +#else +void clear_huge_page(struct page *page, + unsigned long addr_hint, unsigned int pages_per_huge_page) +{ + void *addr; + + addr = page_address(page); + memset(addr, 0, pages_per_huge_page*PAGE_SIZE); +} +#endif static void copy_user_gigantic_page(struct page *dst, struct page *src, unsigned long addr,