From patchwork Wed Apr 27 09:32:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xie Yongmei X-Patchwork-Id: 12828505 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 1BCA3C433F5 for ; Wed, 27 Apr 2022 09:33:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7F6706B0072; Wed, 27 Apr 2022 05:32:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7A6EA6B0073; Wed, 27 Apr 2022 05:32:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 621D66B0075; Wed, 27 Apr 2022 05:32:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.27]) by kanga.kvack.org (Postfix) with ESMTP id 5609D6B0072 for ; Wed, 27 Apr 2022 05:32:59 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 2B0B662487 for ; Wed, 27 Apr 2022 09:32:59 +0000 (UTC) X-FDA: 79402144878.19.28BB79D Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01olkn2073.outbound.protection.outlook.com [40.92.98.73]) by imf29.hostedemail.com (Postfix) with ESMTP id AE0B9120059 for ; Wed, 27 Apr 2022 09:32:55 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kk1iTEQvyZZ+TIaKnJVmDQJP3SNFx8gtq24MvSQ/f9oSXa8b7dIal62+VGhN55KNPjh7BA5x00HjmwQAjt4PCs21551CdkkQVPQ6cJ4XpRoAZDut+93/D01efbXCBCGoYvHG+RRgrIf/QDKr7rmqRSTnKUYWs85xoGsXlx6ZNzwzVC4uWuOWYEeRv2CyfttCJKsjp7uha3lbpssbOEcJZ05xst1Zt4YDpJ/0rXyG5VylsoXC0JiX+uvYocdCI0/ckI1ipmuHoMz9MLjRRpkHKGO25boZ2y9uU4+k0pMDPvt5vMrcElUaIanL9j8vDbAA2KQdruOOVet5vDxMieif5w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rPiEZmeglqvoxdv72dytwOYa5duzSuYNGy6hKVgjX2A=; b=NiVpRTZ2e2hiWKBXzAAbE0KXbDol2sVZFDqGjeVoVzu3hBTMiY9w10wCJR3EcFFXRHo4MXGstLsDP3x9VPI9Xerpk3/AB6emmbIQzfhGU87RczXEBFZ2/V4OANDoCHmO/mc4Z6ONsyplMbLf4YMkqrz07qWU+iRQuxMBBD0nXpT6adbelWO3nbbm1nqA0m7pUJafsJSyw6oL+oQoblp3H+6O/6SWLUvT361rRw01McS+B4nRBenEZ77kSr9iWtUo0B2dXP2538A0NkMjmFEegAAxybwTqRc5MN8jOSJ3oGh2aGpRVc6PQjKt3fA+RIviD2MPk5ZCIlthEY7P/Q5PGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rPiEZmeglqvoxdv72dytwOYa5duzSuYNGy6hKVgjX2A=; b=E6vw8BLwDfg3OD/JgPdpeHgQfKJ3b8OcahQPsei3lRYPX0eftwTUe28YoiqPsm6jL9u9D1WaCIbSJBEZtEtjtPDriqJ0MKdNwEPSl/imiQtJqGUDsMMFekwkX/37WP9pGsrZWfJm49Kg9RQIt60gAtfAM6Fkk/GHxt2ALh522r7gflI1C6UGju0Rd/2ugyT7tCYUR62MOKi2miWCpj+mV2jOqgiYRgFO95iqA+ie8RMGWmsm0njIxe6Po/rkLblmMjxptxiVMCkJuF0eytZ0ABAQOXYL6YdFgDpyJJ030Y16wZQE8IKEbNfovs/ueLrwVe2D89x8QUBbfDMwfHTybg== Received: from TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:ce::9) by OSZP286MB0901.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:111::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Wed, 27 Apr 2022 09:32:55 +0000 Received: from TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM ([fe80::ed8c:9e75:ddab:8c5e]) by TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM ([fe80::ed8c:9e75:ddab:8c5e%4]) with mapi id 15.20.5186.021; Wed, 27 Apr 2022 09:32:55 +0000 From: Xie Yongmei To: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Alexander Viro , linux-fsdevel@vger.kernel.org Cc: yongmeixie@hotmail.comc, Xie Yongmei Subject: [PATCH 1/3] writeback: refine trace event balance_dirty_pages Date: Wed, 27 Apr 2022 05:32:39 -0400 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220427093241.108281-1-yongmeixie@hotmail.com> References: <20220427093241.108281-1-yongmeixie@hotmail.com> X-TMN: [GaslTuJl2lChuSsUI9ZuT5WunlXusab6] X-ClientProxiedBy: HK0PR01CA0067.apcprd01.prod.exchangelabs.com (2603:1096:203:a6::31) To TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:ce::9) X-Microsoft-Original-Message-ID: <20220427093241.108281-2-yongmeixie@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b21c8d0e-e223-44cd-fd7f-08da2830e88d X-MS-Exchange-SLBlob-MailProps: zswcL9HXbeUs2ByizIwMZz3XeV1no+ZL29OrKzEbdawTGXbg6P1LP4JFskwgMzZN22KgmCo0Y0sfqv6cA7xs9puvS6SVfqAUQ2omPFfRyr7KU1Dm+9JzU2wAMKZWg/NDg/NH/kS+U5kiEAsnT+K67WOjKF3ELEFiVN74CyKddPiSTupCfmqqI5NaqRU2dff+5A9dTWZxvBfaF4e3yWMpv6RXQfGcc6p/y90cDybRUOBI9KHWtXVJUnky7jNrWlnlVf8mMT33IXFJgssEHsnmBGYkiLJUJ828zZAaN9jtl6VrtPXxHZRv4wEBkM8r39AX+KLLISHcy/JNur6oYSa0cllDJr32fMAC/jLWMTMbMsK+vykEd9xEoKK7u/EDkezQs50Qq+xmiZ5nx8roXPbr1wVm8CqPkhOF3oudju8+j6kgRK5b6o6Un/eMpoM3+9QIhvxs3/NtjkkVZLzX/D5330xXr5qLPPrGze1QXqNirswo8U+yO4yQDduNNwcQZy1N9caBe4HWAHGjH1Yb9FXPv42BPjjmMs0O0vWK+KeGoL+ij5nQhvIfOR0+PXQG1eRS6jaNn0N5NeX3BEIUNVYQ2UJaUlPr3k1iWCHlrT2/Yytgm8Rr/s47GxCTKPnIJmhYxUZ81pTUR1g8UCoXoG8ZN8Z/4QydPC34zmvyfQkpbJMmbPxGQOXlbHP5EUTFfbtJ/QDklmIj/v7sYH9QrLj/uKCVSg8O2X+punuwNDN29oEErEx5x1olLhPTn4xlcM+f X-MS-TrafficTypeDiagnostic: OSZP286MB0901:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gQ2jrFc2J5lRJ4YiUYwHcb+rvN+hKCW3vFlImALb1I1fMNRXVm27GeiQb8uATwbZjTB9ZbQiu30ehpnsFP1dhra9DlqrovPVqe1VuF5AMZtY3TCJpOCH0aiZQTtcwp52ZHl1X2jf0u4bnfwSgNBFyLy4oRLsPljppebvdAiWywm0j8HVi/Pm4lcLkr3+tk82rs+doyOaaLHxAPfxm48rjxfWgvNihqLfr309GoLIYk/rSiUM4vBHeccohtrhVnL+rjZeP/mbBXMhtz4Fc06MzJKnnvem2iaEKxerljzkdccDKmRXU5AP+4SnG4kw7DazOF5Szbh3QR0d75Fb8r19xRsyK0W/FNO3SSxEJT2fpeJL+SycICRAD6KM+sA36kN8ZBX+ksP3D/o2kdbHhrXrAuKhVmtCYREl+Aez9KwM7DqSuN1ia5GWUSRG8zzoYUjDuNnRwaBARTQwWGho/0dZq4JfzssL3aoCuL+MXQXgofAJCeKdh7mJ2zjQ9qEZcYT3h6HckaL0V48H6ktO9Va6e4bn/jmlkAWub3BmSeOcmDHqxDrfEYxebdiGYrmaLa2j6aprfflygE2/LlM2JsRPGQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qBsyemX4oZtkBxOxmZbvU+76c+lp/m1pwMTgyzpyJjH3cuEUI8iO+2CPGhm/xxG3fJf+TKCBfqp1IzoKpY+2ps9vaVi1wngID4TtnY1K9LdMOM3uIfLjVEYl5DmeTI8bmRO+H9nk28xAQ0yz59EV3rrtMbepNND/UVOaDQ2bSyZ/eplki+QlyJYkDs/v1+pKxbtwj2DJ37l4hXfOPy2RmrOU6itPLEqKYnb9Vj+Z4wEbP0ZG0qNXSFu7b2zHORTsPLKlkK6PiXrJxIH77T74mkFo3k7/mxsXd1psVYX6Qoq8F1P8ZbpaVXNRwsM4yC/w/EhQhy4wng8aqwRTnthe0kQBMvG1XumaQ3kCI4rIcnpxJGYyQLuwZS/W+4QCFXxFx7TzowWvwY4gOxpQ2wQKAS/Fhrvb5KcYOjrQs7RWNrniKaf7cZYicVVKZzw9U0AQap0ojtsZ8B+j77ONHd+uxjmQaDK7WDB40n9judQMEzDYbr36kt9/I61PlzjOfcYZ9uDhK0Lc1E7chdNgepgFmxZex/k6OSD9g890sxyu8xuAlkcDjkufNCnI9uN1NJiMVdRoYSPbl8ZrXcefeE1CoyJvxblUeUYXFzeUcDw4tc1XPWl4ykjhuzAuV5LMvIgBosHY+Ujt9p52orcNFXsqAGh0UeFMS+x92hjVxC5hnkQbP43QkJipqMpKlfmXG6fFM11YxkkvG8fLucAvgVehq1m5Kqlp5TG7D5H3yIG5fXI2cKwYfr6oSw7glmGB4babrveWOlnUUgYmTwYkjJfK0XUQkvgJ2UrGO8JHxA7hdyqbhuIpMbQN4ONeoBHVnHaXLDPt1YWN41sOAtWUr5JevS5KUx6ITMFf+wRKAYj3a+nrFgTdxIhP8fAZkHRj/KWhwAzmbZQuau73roGAl1XPTiBAu6pguXt0pVQuZRe3k5GtXFhDoZwn+o5b1xSbwqVW03LBOHWOPBxE2s1vB5FyqZuJfsPGdG54t6/QeAyZF+dXd2tRIsU34fcVpLhzGxV7DRt18udUnHOm/uz9DxplNO1hTuuk2Of7deCRzy+f70nYF164g6FxxCRcs1elLdyXre+biRBxY4cgH5tGdWt7hCaeuVoEfScBXTyjh5ca6A+JWG93FVBkXayJckAkh+/mgX1uwGJA6rffyBaGPAW0dhwfSgBBGfdsjkf7Eyp6HO+iKRTeA+mXvhXXns6C0Cf3hjPWJ8wPFuyVeKSELas65uR4Yoz08Ni0jUiTxNUepOerVegaJ6wnMe9Rz4Y65bFoyx22YLxMmrg5YRC6jEe298CQUkr0pJChpL8BlAcRioYguGYQ7MRL/SqpDe/tljPu1wZMpqgagim2KdcGdrJ3LN+ltUkMlLlSKdNIVR7FDLx34c7xIrjG4qP427YAAtrSOcXdK/RKKBKCzgJD98+rEhp8SAXzERVYe8bnch0DfyY= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-05f45.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: b21c8d0e-e223-44cd-fd7f-08da2830e88d X-MS-Exchange-CrossTenant-AuthSource: TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2022 09:32:55.4163 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSZP286MB0901 X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: AE0B9120059 X-Stat-Signature: ndfu7reyifhmxhby7iyoiemndq7jxk5r Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=hotmail.com header.s=selector1 header.b=E6vw8BLw; dmarc=pass (policy=none) header.from=hotmail.com; spf=pass (imf29.hostedemail.com: domain of yongmeixie@hotmail.com designates 40.92.98.73 as permitted sender) smtp.mailfrom=yongmeixie@hotmail.com X-Rspam-User: X-HE-Tag: 1651051975-284627 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: Patch set "writeback: cgroup writeback support" supports wb for cgroups. Since then, writeback code introduces two domains to control the dirty pages, namely global domain and cgroup domain via pos_ratio in commit c2aa723a6093 ("writeback: implement memcg writeback domain based throttling") When one of domains is over freerun level of pages, it enters the throttle code. Then it computes the position ratio for each of domains and use the smaller one as a factor to make sure dirty rate keeping paces with writeout speed. Unfortunately, the trace code didn't update correspondingly. They still use bdi as prefix to describe the part propotionally with writeout speed (AKA feedback). No functional change. Signed-off-by: Xie Yongmei --- include/trace/events/writeback.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h index 86b2a82da546..0394f425f832 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h @@ -624,8 +624,8 @@ TRACE_EVENT(balance_dirty_pages, unsigned long thresh, unsigned long bg_thresh, unsigned long dirty, - unsigned long bdi_thresh, - unsigned long bdi_dirty, + unsigned long wb_thresh, + unsigned long wb_dirty, unsigned long dirty_ratelimit, unsigned long task_ratelimit, unsigned long dirtied, @@ -633,7 +633,7 @@ TRACE_EVENT(balance_dirty_pages, long pause, unsigned long start_time), - TP_ARGS(wb, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty, + TP_ARGS(wb, thresh, bg_thresh, dirty, wb_thresh, wb_dirty, dirty_ratelimit, task_ratelimit, dirtied, period, pause, start_time), @@ -642,8 +642,8 @@ TRACE_EVENT(balance_dirty_pages, __field(unsigned long, limit) __field(unsigned long, setpoint) __field(unsigned long, dirty) - __field(unsigned long, bdi_setpoint) - __field(unsigned long, bdi_dirty) + __field(unsigned long, wb_setpoint) + __field(unsigned long, wb_dirty) __field(unsigned long, dirty_ratelimit) __field(unsigned long, task_ratelimit) __field(unsigned int, dirtied) @@ -663,9 +663,9 @@ TRACE_EVENT(balance_dirty_pages, __entry->setpoint = (global_wb_domain.dirty_limit + freerun) / 2; __entry->dirty = dirty; - __entry->bdi_setpoint = __entry->setpoint * - bdi_thresh / (thresh + 1); - __entry->bdi_dirty = bdi_dirty; + __entry->wb_setpoint = __entry->setpoint * + wb_thresh / (thresh + 1); + __entry->wb_dirty = wb_dirty; __entry->dirty_ratelimit = KBps(dirty_ratelimit); __entry->task_ratelimit = KBps(task_ratelimit); __entry->dirtied = dirtied; @@ -681,16 +681,17 @@ TRACE_EVENT(balance_dirty_pages, TP_printk("bdi %s: " "limit=%lu setpoint=%lu dirty=%lu " - "bdi_setpoint=%lu bdi_dirty=%lu " + "wb_setpoint=%lu wb_dirty=%lu " "dirty_ratelimit=%lu task_ratelimit=%lu " "dirtied=%u dirtied_pause=%u " - "paused=%lu pause=%ld period=%lu think=%ld cgroup_ino=%lu", + "paused=%lu pause=%ld period=%lu think=%ld " + "cgroup_ino=%lu", __entry->bdi, __entry->limit, __entry->setpoint, __entry->dirty, - __entry->bdi_setpoint, - __entry->bdi_dirty, + __entry->wb_setpoint, + __entry->wb_dirty, __entry->dirty_ratelimit, __entry->task_ratelimit, __entry->dirtied, From patchwork Wed Apr 27 09:32:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xie Yongmei X-Patchwork-Id: 12828506 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 0C210C433F5 for ; Wed, 27 Apr 2022 09:33:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 92F176B0073; Wed, 27 Apr 2022 05:33:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8DEF56B0075; Wed, 27 Apr 2022 05:33:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7594B6B0078; Wed, 27 Apr 2022 05:33:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.25]) by kanga.kvack.org (Postfix) with ESMTP id 693146B0073 for ; Wed, 27 Apr 2022 05:33:03 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 45B8D6244C for ; Wed, 27 Apr 2022 09:33:03 +0000 (UTC) X-FDA: 79402145046.16.86E5F6C Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01olkn2037.outbound.protection.outlook.com [40.92.99.37]) by imf22.hostedemail.com (Postfix) with ESMTP id A4D96C0040 for ; Wed, 27 Apr 2022 09:33:01 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I/pnxbDYX8D1n4oTOg5fxUIQekN5qhWGfdNGphFBc/n1WCIAYpBEa/Ey0d2i3jbbPpkz0tSGsmzFCyA0Usw+yC8uA5VeyaqyWft3iivVdShDaBm0rHVIKAzM35Hj/mCH/WefP99+szFa6YRnjb1t/RYooFCEMBobQJUtQvad0WZYbWZ+/X5wwT+YJq1H5jzgAxIdNQ98FFn0i0j0RM1w9lcQNZb3PXveQw4OnkScgH0Z5xcVdAL84y4Z20flx6YEX/khJBhuQzsdB/lYdZzzq0ntn+2Nk3KX2xxq0UGkIAAhexuwcEKio7va+Jb9m5hv3Q9AhGtsC7qTQnUNurhf0w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8bc0VA7NjTfc10O2vTJg7NTIQa/Al+Kv3WZgNRuLvIA=; b=koiCEKK8aEwYBvjzOjjD8KT/p7l79HFfTGdQNv3f12RDm0sYUntpOLRAIEwIAKPu4eRbK4hNhNpm+RnzjVrx5PHpT3Yb57CiFbXlrK8yWiAT0YfxdaU3QKaBKvubmAFr1hSSboZ+sGz6GzJ7iM0tSNk17dy7P2sg3JoU4wX3/H1MjX5PETzxUo7Lkhu/nJO5DpK/osdFLvkMT9sdxhEnO+MYZReHSCrwQd9QTKM9WoZWoMXtP1Ra9P/xAITPRrTNTWCpLovuKf6gFvQPnWzD+W1K0BYjUCtPV4+FvWRFV+OJr/iEJKQ5tE6oAX3/Ki9zqe4eFfaHiDnjpFna+4c0IA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8bc0VA7NjTfc10O2vTJg7NTIQa/Al+Kv3WZgNRuLvIA=; b=ENM+CVDjOI0B35Ddf1OxHyQaRKdkqK96TP96zeMkKUrsZCT4xx3/ieNT5dHBIkqLfvUHDOBPxKcUYAYaauU8bBBWfXuVueIghhQO/pf3jidOJ1Uda74m2getRSlPOdDvuKwJFNgounZ3rWhmZyhFGeDRmQQrKCswQvm5izOSZUBmYAuypWgrso4j6mmprwWJ5RCImhbxq25dBsXMzmQLHTB2pQtVlqzpdjuWtS2gVE3Wl6PFyIj9o5uEMZIyP1RVr41JWFFg4iGRTYAC3sB/svUlYM02AClZbQvedfsIcMoxMMy6zSgRylBx/RNDHxbDMl3HzkL61HHfz/3b7/cNvQ== Received: from TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:ce::9) by OS3P286MB1057.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Wed, 27 Apr 2022 09:32:58 +0000 Received: from TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM ([fe80::ed8c:9e75:ddab:8c5e]) by TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM ([fe80::ed8c:9e75:ddab:8c5e%4]) with mapi id 15.20.5186.021; Wed, 27 Apr 2022 09:32:58 +0000 From: Xie Yongmei To: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Alexander Viro , linux-fsdevel@vger.kernel.org Cc: yongmeixie@hotmail.comc, Xie Yongmei Subject: [PATCH 2/3] writeback: per memcg dirty flush Date: Wed, 27 Apr 2022 05:32:40 -0400 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220427093241.108281-1-yongmeixie@hotmail.com> References: <20220427093241.108281-1-yongmeixie@hotmail.com> X-TMN: [HMiPaF3wZ5f624u3a2Cil/zMNEGOepzi] X-ClientProxiedBy: HK0PR01CA0067.apcprd01.prod.exchangelabs.com (2603:1096:203:a6::31) To TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:ce::9) X-Microsoft-Original-Message-ID: <20220427093241.108281-3-yongmeixie@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d90ecebe-28b7-41ba-fbc2-08da2830ea44 X-MS-Exchange-SLBlob-MailProps: zswcL9HXbeUs2ByizIwMZz3XeV1no+ZLtKVE8mk0WkDdb8wbxO0RIKOp367exO0P2XNE3cqNBquMgA3Tzx7Ug7Yam54FBek78ouRrTlUrEKOUGVSk5k27eWJWYeMpoefkvKUPHarOy5vu/NNnaZAQWiyc5R4YBSISEvQtPH/ORjIIdmxu1PlzOO7/+Df0/RZcyydhcvaQuW0H8KGecDNa6GAYMn19nXFwPc1JR6PERpsOwsl8GUryfJ3picwVeXisrOnCvyqkt62m3cRV93QjuJuvRaNcII99uGqXbRIUKYLeGkIs3lSfSjtrha7FuFutnbn+ywBkwTku4E8iQpxqOSUqpbDZk5zexRLX6cYe8kSW0208LaUNcR3MWAF9Sit6j+8/YQ67ugemSCmXbwa5Tnibq5qhO1f28JvoSzZn6DVd3aFSwAQs1smbADWuPABLAUxVo8MaP+Ha0yVHhGPZo6Av8252dMq4EupAAQ7diNRaAjy3ETkG4dqxY/7BrdATDUUN6N3ribERiqla+BBtsahKLcYREBf1ECfJmSt9+S9k/Uv1RqoalFU8uaUzZprJOpm/XDnjWwFz/vWwMItvjbemCcNXG0JQY+NEjQ5yThawUreGNSCOSVk/nr4bIwHNHiDAKAAmqp+bu3/hkqW7Ae6Zz6LfxX/fjVXrO2I8YNV8myk0rVDsEV/7SW2uGUYNi5VZyFWblpU4Vg6ewgM0YD5/Pw68VubROq/Be/eS1P+NSahUHdI+H8lH9mD+WVS X-MS-TrafficTypeDiagnostic: OS3P286MB1057:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0nUH2oFcDYTvTMr1GpsmWyrI7+VXlhXmKqifbN/UH7gC4zXDbMopZ1DWRxnFv3PWZ7li414opCcgdB2dTC2GiComZ3oihFtCIrrdR7GOeLzjApw3p3hHXLela0mwbW1s4j0EGd97xGzzQT0PymsKFUejVVkZ0JkLB2C/4ePjvJsrcJzEEcE9LnY/1pZQ2hqScPCcEB8dV2RdU+ldQ4G4g/rY+fMsiIB1sRbQcuQHTRkQYqEa1UUi/CMwfJJb4HU6yqXaL1DQGkm8y40KRV85Ih92UmoCa6xU9I5bBxo90jWjo+zVs7xqv460RrMRFUqUzbDneUluyPrAm7d2InFacwSXBOj7yXhNzdFg6213+YTPeBX6xDQ1aZzPr2stT6q/gSpkAQfHx8sy7lg6u5hLKadDu0qAEoMTjGt5+aIeGOBDTPSGNpLBzmo/CXLjPQDhEy9V2k6LlvLOr8e1FSrZBQjhIMDzrJwEjcJBG6CB4skkH+CGfWQ7gavZUAZHxZgzKOdR0zKO4NokGr9jVLR+x8AOaOypcPHY1MXYUhU8onauN40T77frlmV0mNxkEck8+JsM8sfxclM9u9hTwcoBtg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YF0zGO9HKkLET+DR1NKjE2RPyJ6IuOESkjU5vziOV9asQTP1OB5kemGbjYP8qJ/XbKL+Em3rtX90DIHI7vI6N3xApGdGiWG44YuV5m03ntLA8WK4Ljw/pFdGdIdJQXV7wOyNJADr80dqKxIgktdTjLIUPixiJdlMFRCuxDp18f25IswdSlZH2JKDY48TdIY7/ogJkIy+J0Sohs4HQ0gIQxiQPHyWyEY2pOj8LSdKBOWcWo2zriRzmh7hXlAq1I7tK/FNPbEtj0uaW2qZqMd2GRD3OiCCQ91Xq7X3+H7e/wDlCKUn3JmAqhDF5tTFnZpvZwo0QIAxH4UcZqFJbmMM6E3NkffnqFBmcJwkdZcU2Kb36y9MgpmITz+dc+DxrpoOH6G4534eGWUJ2GXyx8hHhLKaeVmq9HHyQdcNNdX0vCH7l33qp7MwG919MLmTl3sGWyOKSDDpctqWLeeCw76i8oFtX6KIab0+5QIVwsIRJIYXbu2gfCpQo9R2ooee5QPCPKOHjEqqEN80Mp6L3g6+fFuW9I8NFbXaRLgBLZBEPQJqTOhZKN2L2n5ndWB6oFNfAmgHzwUWs1eKsnJixQ4XuFF5bJkka3kSNN2uR+GT7SVktFw8j8L4k8A7FgCITvmZZJSbywfuXuoXgFYoAENJysQO00GO1SYkddM6oll14cGksOfnyLzKGhC4Wtrzn+fPGNOwZXkQk7c1VS7vmlbp2LaX0Pl+y9J3/M730a8JGhghX4eNsUuVjGdcy+OrUEps/p/XoBjZQ36BcDA0EGQjR5WaC2tUWWfrV9XZ0M+ROzjmrcjbUZVG6N8J+0gG9vVc2WucTXEfn8sTohFPe4xtRVx9qecYjw+UjNWntr/UD2FHZeGxfeLYY63DcGkKyWPi7XXvvQ5UZrtnUSAafBjHnc0w3MngEd8Bq5qhI7REgrqonmydRfY4aOWQvgnPgOHCAGva7eIrIs2Ix7KgItgZg0v7+IGJ9JDS0JG5rsFcCpuZZSKcKXBhadEeZcReqDx9bro5J6g2M+f7z50wliwvBkoHzfTXJqm62DCC4iXbquHIYdTQmH0rpGQ75XtDCteobp2r0kpKyQ9ZiuHPHwj50iluqou9JEO9l4FqZHVArqMOjqHYfH3C4BPKcaipJJH45wtPDSa4maFkqrHPAvyHKBwn2MSFzBm5pkkQGLc6xtGrv1BZASiCl2cTxrvrk+ThEel/NRb7udIYuh2l0xye2dJXtEt0Fgc1yMs0VwpPWXrDkEtqiPBxFCg2UG4452asWlwP4OSABqDU2H62cGEXNhT4VOia+8Ev+13Lcc9uCAPNflWBLCTLJLk3g33473XHLsZqRQu4jRSoFHisQYUjq8/VRUDYuHu2MvjjMjJBRp5ZLsWHptUwCsW3zMCbx7V0sdTk3iq/K0NvWp9nTdr5EPiEjAyiEweXg6wKCM46Kog= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-05f45.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: d90ecebe-28b7-41ba-fbc2-08da2830ea44 X-MS-Exchange-CrossTenant-AuthSource: TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2022 09:32:58.3882 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3P286MB1057 X-Stat-Signature: k1pgr48yswdwb5gsqdgiufuefgrj1tij Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=hotmail.com header.s=selector1 header.b=ENM+CVDj; spf=pass (imf22.hostedemail.com: domain of yongmeixie@hotmail.com designates 40.92.99.37 as permitted sender) smtp.mailfrom=yongmeixie@hotmail.com; dmarc=pass (policy=none) header.from=hotmail.com X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: A4D96C0040 X-HE-Tag: 1651051981-293920 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: Currently, dirty writeback is under global control. We can tune it by parameters in /proc/sys/vm/ - dirty_expire_centisecs: expire interval in centiseconds - dirty_writeback_centisecs: periodcal writeback interval in centiseconds - dirty_background_bytes/dirty_background_ratio: async writeback threshold - dirty_bytes/dirty_ratio: sync writeback threshold Sometimes, we'd like to specify special wrtiteback policy for user application, especially for offline application in co-location scenerio. This patch provides dirty flush policy per memcg, user can specify them in memcg interface. Actually, writeback code maintains two dimensions of dirty pages control in balance_dirty_pages. - gdtc for global control - mdtc for cgroup control When dirty pages is under both of control, it leaves the check quickly. Otherwise, it computes the wb threshold (along with bg_threshold) taking the writeout bandwidth into consideration. And computes position ratio against wb_thresh for both global control and cgroup control as well. After that, it takes the smaller one (IOW the strict one) as the factor to generate task ratelimit based on wb's dirty_ratelimit. So far, the writeback code can control the dirty limit for both global view and cgroup view. That means the framework works well for controlling cgroup's dirty limit. This patch only provides an extra interface for memcg to tune writeback behavior. Signed-off-by: Xie Yongmei --- include/linux/memcontrol.h | 22 ++++++ init/Kconfig | 7 ++ mm/memcontrol.c | 136 +++++++++++++++++++++++++++++++++++++ mm/page-writeback.c | 15 +++- 4 files changed, 178 insertions(+), 2 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index a68dce3873fc..386fc9b70c95 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -344,6 +344,11 @@ struct mem_cgroup { struct deferred_split deferred_split_queue; #endif +#ifdef CONFIG_CGROUP_WRITEBACK_PARA + int dirty_background_ratio; + int dirty_ratio; +#endif + struct mem_cgroup_per_node *nodeinfo[]; }; @@ -1634,6 +1639,23 @@ static inline void mem_cgroup_flush_foreign(struct bdi_writeback *wb) #endif /* CONFIG_CGROUP_WRITEBACK */ +#ifdef CONFIG_CGROUP_WRITEBACK_PARA +unsigned int wb_dirty_background_ratio(struct bdi_writeback *wb); +unsigned int wb_dirty_ratio(struct bdi_writeback *wb); +#else +static inline +unsigned int wb_dirty_background_ratio(struct bdi_writeback *wb) +{ + return dirty_background_ratio; +} + +static inline +unsigned int wb_dirty_ratio(struct bdi_writeback *wb) +{ + return vm_dirty_ratio; +} +#endif + struct sock; bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages, gfp_t gfp_mask); diff --git a/init/Kconfig b/init/Kconfig index ddcbefe535e9..0b8152000d6e 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -989,6 +989,13 @@ config CGROUP_WRITEBACK depends on MEMCG && BLK_CGROUP default y +config CGROUP_WRITEBACK_PARA + bool "Enable setup dirty flush parameters per memcg" + depends on CGROUP_WRITEBACK + default y + help + This feature helps cgroup could specify its own diry wriback policy. + menuconfig CGROUP_SCHED bool "CPU controller" default n diff --git a/mm/memcontrol.c b/mm/memcontrol.c index e8922bacfe2a..b1c1b150637a 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4822,6 +4822,112 @@ static int mem_cgroup_slab_show(struct seq_file *m, void *p) } #endif +#ifdef CONFIG_CGROUP_WRITEBACK_PARA +unsigned int wb_dirty_background_ratio(struct bdi_writeback *wb) +{ + struct mem_cgroup *memcg; + + if (mem_cgroup_disabled() || !wb) + return dirty_background_ratio; + + memcg = mem_cgroup_from_css(wb->memcg_css); + if (memcg == root_mem_cgroup || memcg->dirty_background_ratio < 0) + return dirty_background_ratio; + + return memcg->dirty_background_ratio; +} + +unsigned int wb_dirty_ratio(struct bdi_writeback *wb) +{ + struct mem_cgroup *memcg; + + if (mem_cgroup_disabled() || !wb) + return vm_dirty_ratio; + + memcg = mem_cgroup_from_css(wb->memcg_css); + if (memcg == root_mem_cgroup || memcg->dirty_ratio < 0) + return vm_dirty_ratio; + + return memcg->dirty_ratio; +} + +static void wb_memcg_inherit_from_parent(struct mem_cgroup *parent, + struct mem_cgroup *memcg) +{ + memcg->dirty_background_ratio = parent->dirty_background_ratio; + memcg->dirty_ratio = parent->dirty_ratio; +} + +static void wb_memcg_init(struct mem_cgroup *memcg) +{ + memcg->dirty_background_ratio = -1; + memcg->dirty_ratio = -1; +} + +static int mem_cgroup_dirty_background_ratio_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); + + seq_printf(m, "%d\n", memcg->dirty_background_ratio); + return 0; +} + +static ssize_t +mem_cgroup_dirty_background_ratio_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, + loff_t off) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of)); + int ret, background_ratio; + + buf = strstrip(buf); + ret = kstrtoint(buf, 0, &background_ratio); + if (ret) + return ret; + + if (background_ratio < -1 || background_ratio > 100) + return -EINVAL; + + memcg->dirty_background_ratio = background_ratio; + return nbytes; +} + +static int mem_cgroup_dirty_ratio_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); + + seq_printf(m, "%d\n", memcg->dirty_ratio); + return 0; +} + +static ssize_t +mem_cgroup_dirty_ratio_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, loff_t off) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of)); + int ret, dirty_ratio; + + buf = strstrip(buf); + ret = kstrtoint(buf, 0, &dirty_ratio); + if (ret) + return ret; + + if (dirty_ratio < -1 || dirty_ratio > 100) + return -EINVAL; + + memcg->dirty_ratio = dirty_ratio; + return nbytes; +} +#else +static void wb_memcg_inherit_from_parent(struct mem_cgroup *parent, + struct mem_cgroup *memcg) +{ +} + +static inline void wb_memcg_init(struct mem_cgroup *memcg) +{ +} +#endif static struct cftype mem_cgroup_legacy_files[] = { { .name = "usage_in_bytes", @@ -4948,6 +5054,20 @@ static struct cftype mem_cgroup_legacy_files[] = { .write = mem_cgroup_reset, .read_u64 = mem_cgroup_read_u64, }, +#ifdef CONFIG_CGROUP_WRITEBACK_PARA + { + .name = "dirty_background_ratio", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_background_ratio_show, + .write = mem_cgroup_dirty_background_ratio_write, + }, + { + .name = "dirty_ratio", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_ratio_show, + .write = mem_cgroup_dirty_ratio_write, + }, +#endif { }, /* terminate */ }; @@ -5151,11 +5271,13 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) page_counter_init(&memcg->swap, &parent->swap); page_counter_init(&memcg->kmem, &parent->kmem); page_counter_init(&memcg->tcpmem, &parent->tcpmem); + wb_memcg_inherit_from_parent(parent, memcg); } else { page_counter_init(&memcg->memory, NULL); page_counter_init(&memcg->swap, NULL); page_counter_init(&memcg->kmem, NULL); page_counter_init(&memcg->tcpmem, NULL); + wb_memcg_init(memcg); root_mem_cgroup = memcg; return &memcg->css; @@ -6414,6 +6536,20 @@ static struct cftype memory_files[] = { .seq_show = memory_oom_group_show, .write = memory_oom_group_write, }, +#ifdef CONFIG_CGROUP_WRITEBACK_PARA + { + .name = "dirty_background_ratio", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_background_ratio_show, + .write = mem_cgroup_dirty_background_ratio_write, + }, + { + .name = "dirty_ratio", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_ratio_show, + .write = mem_cgroup_dirty_ratio_write, + }, +#endif { } /* terminate */ }; diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 7e2da284e427..cec2ef032927 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -395,12 +395,23 @@ static void domain_dirty_limits(struct dirty_throttle_control *dtc) * per-PAGE_SIZE, they can be obtained by dividing bytes by * number of pages. */ +#ifdef CONFIG_CGROUP_WRITEBACK_PARA + ratio = (wb_dirty_ratio(dtc->wb) * PAGE_SIZE) / 100; + bg_ratio = (wb_dirty_background_ratio(dtc->wb) * PAGE_SIZE) / 100; + if (!ratio && bytes) + ratio = min(DIV_ROUND_UP(bytes, global_avail), + PAGE_SIZE); + if (!bg_ratio && bg_bytes) + bg_ratio = min(DIV_ROUND_UP(bg_bytes, global_avail), + PAGE_SIZE); +#else if (bytes) ratio = min(DIV_ROUND_UP(bytes, global_avail), PAGE_SIZE); if (bg_bytes) bg_ratio = min(DIV_ROUND_UP(bg_bytes, global_avail), PAGE_SIZE); +#endif bytes = bg_bytes = 0; } @@ -418,8 +429,8 @@ static void domain_dirty_limits(struct dirty_throttle_control *dtc) bg_thresh = thresh / 2; tsk = current; if (rt_task(tsk)) { - bg_thresh += bg_thresh / 4 + global_wb_domain.dirty_limit / 32; - thresh += thresh / 4 + global_wb_domain.dirty_limit / 32; + bg_thresh += bg_thresh / 4 + dtc_dom(dtc)->dirty_limit / 32; + thresh += thresh / 4 + dtc_dom(dtc)->dirty_limit / 32; } dtc->thresh = thresh; dtc->bg_thresh = bg_thresh; From patchwork Wed Apr 27 09:32:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xie Yongmei X-Patchwork-Id: 12828507 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 11B3DC433EF for ; Wed, 27 Apr 2022 09:33:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A1B486B0075; Wed, 27 Apr 2022 05:33:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9CAE06B0078; Wed, 27 Apr 2022 05:33:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 81CD96B007B; Wed, 27 Apr 2022 05:33:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.a.hostedemail.com [64.99.140.24]) by kanga.kvack.org (Postfix) with ESMTP id 6E9216B0075 for ; Wed, 27 Apr 2022 05:33:04 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 44ABD29F5E for ; Wed, 27 Apr 2022 09:33:04 +0000 (UTC) X-FDA: 79402145088.01.8AAADEB Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01olkn2037.outbound.protection.outlook.com [40.92.99.37]) by imf22.hostedemail.com (Postfix) with ESMTP id A2D4EC0032 for ; Wed, 27 Apr 2022 09:33:02 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I2J3mR8d7sWLjO95c1Tpb82+Brlq3ONFZaAYmqLzVWs1GaYOSCq7WvGWtbVTnFnfJcv6JXpg+wcHUsH5pZ16YBD0wCJhDv7L6DjTWa9aj6YDuwQEJQ/JMxg1xspJzVO0Nh3SubVl3wq6QjyiqsQ/eAI8CyIZ8RgV25k4uo6L2CNGsa0mIZ0LKfmUiWMY8vOPJT+Gm9mKCeMdHNuWOuk9eA66KIQjIn8tkS9vL6Y2UxxtOIUkAdblXSmdaJ7GguWtyNXeJ7UEyMbCcfcFMZYt0S3j2cgZEkgl7+A7chL0uTmKg/bV4+/2suO6p7DPxhd1PBzr+DrBA9ENuts4TXFc+g== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rGR6+NgsNpXIWjEwY9hs+rTt5kII+sa1gLwGI9mLJ0M=; b=nNAFfmCX+SC4jWkh7OWJI5MMf72U2pipUwIDbknGA+BJszkj3ekLkKfuVWfi+XZKe7vZ2+s4p8Huym/PatbxhPHSdB6dNeQw9GqV20QPC9gGCj8hY4CoORM1/6yQW1uKhAyoT68BXgPKRN5s4wjDhW1gkCo8qjaos2eY1jb1oP68R/n3xg2bwCt9Ko7ARD8qYBoMjGr2+y5QEGlRenKnNP/kUy2SroyQoOqou16c3koro2r+Q2Ziv1r8+8TIR9CNKSwiq8RGe+XrjDZVT54J1j0AyLhNOycDx1pUSo3alfpj0WSIAxzO9TNCZqu34eHIrtteLHka9zfEMrkMxPs3TA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rGR6+NgsNpXIWjEwY9hs+rTt5kII+sa1gLwGI9mLJ0M=; b=WrKj4mt7o3j7mocAOJ/lVWfsPJpizuJKJn7LJvUXSu4Q2Hj4kdd/2Nd0cRdBT7XyScgk+NKLY4sqEzy+oKDuSRQ9NcfCRY5D/mik6pz1djTP7R6Jgb0Z9RVYDm8aE5yfcXYjBpA01xbY4Qv3gC+7Prp7l72vLT42x4wGkmT1fI+jC8Aahac0/QWeiqkyR2j8G8S9mW/idM9k3s63mthNpPUcw5LGvmQSBGRYJWa+vkzVK8Fj1d6Cn5klYlHQCzanIydHHnuZd5ByQC+2AoifaNB1UjaK3P3BehGVZZjwxpnWf9wFhKAYa1dUAWdiTvapNs8EXvLGKBYVZcr7YFeGsQ== Received: from TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:ce::9) by OS3P286MB1057.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Wed, 27 Apr 2022 09:33:01 +0000 Received: from TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM ([fe80::ed8c:9e75:ddab:8c5e]) by TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM ([fe80::ed8c:9e75:ddab:8c5e%4]) with mapi id 15.20.5186.021; Wed, 27 Apr 2022 09:33:01 +0000 From: Xie Yongmei To: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Alexander Viro , linux-fsdevel@vger.kernel.org Cc: yongmeixie@hotmail.comc, Xie Yongmei Subject: [PATCH 3/3] writeback: specify writeback period and expire interval per memcg Date: Wed, 27 Apr 2022 05:32:41 -0400 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220427093241.108281-1-yongmeixie@hotmail.com> References: <20220427093241.108281-1-yongmeixie@hotmail.com> X-TMN: [XbBKjZKgJ/uPV0EtxqE/Feo+t1tbxwHe] X-ClientProxiedBy: HK0PR01CA0067.apcprd01.prod.exchangelabs.com (2603:1096:203:a6::31) To TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:ce::9) X-Microsoft-Original-Message-ID: <20220427093241.108281-4-yongmeixie@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 974a3c04-51bb-4c67-f184-08da2830ebef X-MS-Exchange-SLBlob-MailProps: Zv/SX2iM+5XXEEEdR/xMXhNCeF/y1+93HUjrN3m8MDCUewaI1nR/wSpNIuOIuWJzda/Pjr8Q7LMUGAFZf0frLZogWCQ9BY6YTIMtEPWm6ZbPnAqMV3jQ9Qa8J8MiiU0HlP2sNpaoBFWmF/M0BJhIeKkBzpxCSWlETieosOVhPZF7/mgnV1k0KGoXL62N9wBMFPQffkwXiRMCQk+HHIpH33Ee58kIdF7b0GlIS9mJxinW8oRxZ25FODJlHYgXKVs0EnKMr5S55OXW0zgVUkKVWRrTxCqg+cLjjbH1ViBKgfZLIKJX/am0TYN+OaXNnA9rhI3VRBxhXHhg+V3rrUNS1/qlcUDJcEkoBOV31zMfxvb/G77wwb4ye5usXRmBm1w86MYdWkx9H7naMYPDez872ZDZJC1xUN6FgJFOyQS5+GBt0wQsfIUt9qn1Jm+w2nhZIkWA8flHkz884zWlYdBXhzXHXPeKVJmir6FOpM5wkDSNj2Fuh86N5pvX13jA/J2NqLhROt5VrcGnq5h7IMdXzb3tdVp2RVmhccnjdNgXiqEjOU1PVsmO8Il3WeugD3d6ra21ypzd9RQxs1PD2eNvMWbzBR8HZhIluBQTW5eFuGKkI7n2yowvigy8kzJ7ZhO2Ko9nn+87FlO3O6YOaDPX7W10vWJMsRtz1OdrfMma+I8g9R5gSwM9M9QGQmdVS6cJYLu2bGZNxo4= X-MS-TrafficTypeDiagnostic: OS3P286MB1057:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iO5u6YuWYb/R8PJf91wLiHCKPY7pGEMs6DahvS/9awUvcHe33x0/AjAXfWJo2ZqkEhL6D6dU/Kaha3a4KVmA06YXdINlBeFjs2zy/FqcWFMl89NxEOyQ+2wavY/t+2noNZPFMFBnqgi8M7B/XLcLnaregehr5t9NuXL5xW+rbRHxXnhXruIajOc0ZGTxIYD6ujhR8C4t+L8077yGZGmEAmuvgV+rlK01gvV2SY2IhNE/mc319Diy8yfakPRFBnJFOIGjNmDnk1aqDyGVj/xZupStfvxgDrBNhxWmBR3GuEseS4tqiRECve2UHSZUyqKq9A4/0y5iqnX6fkePYE0BNsxGgOprms7rtNsiF89NjSC13zuW+KLXb/DoT8g+6ngzkVyzNIuDHkMCeUbcmK6psn2zEi5r5kVxXJoVWVhePa2VONK2cSrEEOO2IUlOIlaZ5mz7bFEspibZrFiD3sd/co0KM9qzZYeDPT6hR79YxYXkDGFv6zBa+J9tk4bWfVTTfrL0DFt9BjUE7J3SjpqMEwzzSHQPimIugjfwdsuvIV6fxQu8cLnaO7eYovClfMKf44GZ91+xiTNuJyGHFo7REA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mmuDWfVau0H2Y0fYYbmM8KswuSTgsVi4FEdaQM6RfvxZuByCoNp8JZVyCNUj5onMCW5jd7V3u0iVjYK2o+vXihk8FLp5KyZyCU3fwkYKv4cTShUsqus2kSLgaehjaH6LIPewvb66H3ant2p1kbT0I9O2fW3x51/dTJWsJwgyou7QwI/q4l3Rg0lpPq0TmSxcHofq7yV8uOfZmYXnspZqyVNYJlDyUdYfFPBy3BOwNmyX9xoGtdG3d6IEX2CLRZ7vK6vme/fXUzWZIu8TgyJO2ITMqPaFnSTfDkjG8+lJyLAwfzoCqAfdGzZ4rMaOumAxBd9yfFYOfxRKMEvzDZFDiDHE223CU2x0QkqUS3oaAnpkg1eNTSFaqnPvIhfSKO6nuGgQQac6tp+myBpeoTH3aTCXYHEvLYPs2Uubu0ujQVCMg7VRceX5RlLwAb9aCHMB2RdGDSWFrg+1ZQtE2CRNrhs9pagrydpzA1NhX9gnEs3MFZd7BKlSYpnkqdAOoxHiSdyVn88U65UD0J0WOAtFWpiASvgpLu8l+Q4axID9QbDl/XeJi235ggS/dYeHhw/RRH70Uem9WpqkgjM8edngcjy/u40jXLIGqrjX+2LEFIR+CFqbeWs2JMXCBBxBguzBVjcq2EqIy6ynpU0xpkChzJmvIlVu6KhBvcKhS3BOJbQdYZyM85whq5aXt+cNik0ihcuZhDOKEPGfnjt/nBlTs6WgaoWDZ31bb8wtWmGFFt90fUHmq4ZasIvLSWjLC+gmpYXp55QDtBzY9fHxUwuuny6csOH6p9F49PmRRGAv3e0ULgX2xVLN5rpgE5M5qLaq8xGE1Qk3CG+CviadJodUcg4xyKNwGKRUKEGeykHkxcMd1h9j3+EH2OlLpf6815vymVeJCq9rFpkAmHIijo8yJ5BifGMVPT4glDzgaRNuyv3zEdW59HrjvMAtTCSFYKj4KdpLV4sSxncM0WU+EUEni4rN84hPLPHJB/Js82Qfidlb3eV5SGA5ywot3H5qvzBRxDdCap8BmfpWubZYR48BMb8KKoKkFW5Aro8eLos8FLObMqAhweBlztoKZuZ8HZbuWa2+2reUaeW7VRhaHloXOSG6gHhOegLIPBYQ/VB8Nky/8ydz4FaLjH5Kk7wnHLMer0Ka0mZ3ibvivQVa0cWKQBamFdHPiad3xSQxeSlBES5kCvGwCyJMG0QFAInejstroSQfqzjc9DETmDgOxOYna60uGE88deA7fsqRC2rjdwkCpxJdklHzvFr6vt+ZucjEaNmSqdUEQ2ysNxzT0io/j30Nrf0OfuMBiwrB+AVPgIuH+UGn1dHFfjlYX/KAFqRKUCoutLgmYwzXcwWUB8/Ga4+z4HKcu2TIM/jlejB6RWFzWsXjiBfq4FGedx4odbL3Tco4lFGE0G+jtdYybL6kp96vhfUObnpd2UP/kuABmYs= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-05f45.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 974a3c04-51bb-4c67-f184-08da2830ebef X-MS-Exchange-CrossTenant-AuthSource: TYYP286MB1115.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2022 09:33:01.1851 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3P286MB1057 X-Stat-Signature: 5zeqh9nok7c64wzwazay1crm3z46mpz1 Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=hotmail.com header.s=selector1 header.b=WrKj4mt7; spf=pass (imf22.hostedemail.com: domain of yongmeixie@hotmail.com designates 40.92.99.37 as permitted sender) smtp.mailfrom=yongmeixie@hotmail.com; dmarc=pass (policy=none) header.from=hotmail.com X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: A2D4EC0032 X-HE-Tag: 1651051982-817006 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: dirty_writeback_interval: dirty wakeup period dirty_expire_interval: expire period This patch provides per memcg setttings for writeback interval. Dirty writeback could be triggered in the below ways: - mark_inode_dirty: when the first time of dirtying pages for this inode, it tries to wakeup the callback hook wb_workfn in wakeup period later. - wb_workfn: if there're more writeback works to do, it would wakeup the callback hook wb_workfn in another wakeup period later. - external event: kswad found dirty pages piled up at the end of inactive list or desktop mode timer. - buffered write context: balance_dirty_pages tries to wake up background writeback once dirty pages above freerun level of pages. - sync context: sync(fs sync) writeback immediately No matter how writeback is triggered, wb_workfn is the unique callback hook to manipulate the flushing things. Actually, wb_check_old_data_flush handles the period writeback and decides the scope of dirty pages which have to be written back because they were too old. Signed-off-by: Xie Yongmei --- fs/fs-writeback.c | 11 ++-- include/linux/memcontrol.h | 16 ++++++ mm/backing-dev.c | 4 +- mm/memcontrol.c | 114 +++++++++++++++++++++++++++++++++++++ 4 files changed, 140 insertions(+), 5 deletions(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 591fe9cf1659..f59e4709ec39 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -1980,6 +1980,7 @@ static long wb_writeback(struct bdi_writeback *wb, struct inode *inode; long progress; struct blk_plug plug; + unsigned int dirty_expire = wb_dirty_expire_interval(wb); blk_start_plug(&plug); spin_lock(&wb->list_lock); @@ -2015,7 +2016,7 @@ static long wb_writeback(struct bdi_writeback *wb, */ if (work->for_kupdate) { dirtied_before = jiffies - - msecs_to_jiffies(dirty_expire_interval * 10); + msecs_to_jiffies(dirty_expire * 10); } else if (work->for_background) dirtied_before = jiffies; @@ -2101,15 +2102,16 @@ static long wb_check_old_data_flush(struct bdi_writeback *wb) { unsigned long expired; long nr_pages; + unsigned int writeback_interval = wb_dirty_writeback_interval(wb); /* * When set to zero, disable periodic writeback */ - if (!dirty_writeback_interval) + if (!writeback_interval) return 0; expired = wb->last_old_flush + - msecs_to_jiffies(dirty_writeback_interval * 10); + msecs_to_jiffies(writeback_interval * 10); if (time_before(jiffies, expired)) return 0; @@ -2194,6 +2196,7 @@ void wb_workfn(struct work_struct *work) struct bdi_writeback *wb = container_of(to_delayed_work(work), struct bdi_writeback, dwork); long pages_written; + unsigned int writeback_interval = wb_dirty_writeback_interval(wb); set_worker_desc("flush-%s", bdi_dev_name(wb->bdi)); @@ -2222,7 +2225,7 @@ void wb_workfn(struct work_struct *work) if (!list_empty(&wb->work_list)) wb_wakeup(wb); - else if (wb_has_dirty_io(wb) && dirty_writeback_interval) + else if (wb_has_dirty_io(wb) && writeback_interval) wb_wakeup_delayed(wb); } diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 386fc9b70c95..c1dc88bb8f80 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -347,6 +347,8 @@ struct mem_cgroup { #ifdef CONFIG_CGROUP_WRITEBACK_PARA int dirty_background_ratio; int dirty_ratio; + int dirty_writeback_interval; + int dirty_expire_interval; #endif struct mem_cgroup_per_node *nodeinfo[]; @@ -1642,6 +1644,8 @@ static inline void mem_cgroup_flush_foreign(struct bdi_writeback *wb) #ifdef CONFIG_CGROUP_WRITEBACK_PARA unsigned int wb_dirty_background_ratio(struct bdi_writeback *wb); unsigned int wb_dirty_ratio(struct bdi_writeback *wb); +unsigned int wb_dirty_writeback_interval(struct bdi_writeback *wb); +unsigned int wb_dirty_expire_interval(struct bdi_writeback *wb); #else static inline unsigned int wb_dirty_background_ratio(struct bdi_writeback *wb) @@ -1654,6 +1658,18 @@ unsigned int wb_dirty_ratio(struct bdi_writeback *wb) { return vm_dirty_ratio; } + +static inline +unsigned int wb_dirty_writeback_interval(struct bdi_writeback *wb) +{ + return dirty_writeback_interval; +} + +static inline +unsigned int wb_dirty_expire_interval(struct bdi_writeback *wb) +{ + return dirty_expire_interval; +} #endif struct sock; diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 7176af65b103..685558362ad8 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -15,6 +15,7 @@ #include #include #include +#include struct backing_dev_info noop_backing_dev_info; EXPORT_SYMBOL_GPL(noop_backing_dev_info); @@ -264,8 +265,9 @@ subsys_initcall(default_bdi_init); void wb_wakeup_delayed(struct bdi_writeback *wb) { unsigned long timeout; + unsigned int dirty_interval = wb_dirty_writeback_interval(wb); - timeout = msecs_to_jiffies(dirty_writeback_interval * 10); + timeout = msecs_to_jiffies(dirty_interval * 10); spin_lock_bh(&wb->work_lock); if (test_bit(WB_registered, &wb->state)) queue_delayed_work(bdi_wq, &wb->dwork, timeout); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index b1c1b150637a..c392aec22e2e 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4851,17 +4851,49 @@ unsigned int wb_dirty_ratio(struct bdi_writeback *wb) return memcg->dirty_ratio; } +unsigned int wb_dirty_writeback_interval(struct bdi_writeback *wb) +{ + struct mem_cgroup *memcg; + + if (mem_cgroup_disabled() || !wb) + return dirty_writeback_interval; + + memcg = mem_cgroup_from_css(wb->memcg_css); + if (memcg == root_mem_cgroup || memcg->dirty_writeback_interval < 0) + return dirty_writeback_interval; + + return memcg->dirty_writeback_interval; +} + +unsigned int wb_dirty_expire_interval(struct bdi_writeback *wb) +{ + struct mem_cgroup *memcg; + + if (mem_cgroup_disabled() || !wb) + return dirty_expire_interval; + + memcg = mem_cgroup_from_css(wb->memcg_css); + if (memcg == root_mem_cgroup || memcg->dirty_expire_interval < 0) + return dirty_expire_interval; + + return memcg->dirty_expire_interval; +} + static void wb_memcg_inherit_from_parent(struct mem_cgroup *parent, struct mem_cgroup *memcg) { memcg->dirty_background_ratio = parent->dirty_background_ratio; memcg->dirty_ratio = parent->dirty_ratio; + memcg->dirty_writeback_interval = parent->dirty_writeback_interval; + memcg->dirty_expire_interval = parent->dirty_expire_interval; } static void wb_memcg_init(struct mem_cgroup *memcg) { memcg->dirty_background_ratio = -1; memcg->dirty_ratio = -1; + memcg->dirty_writeback_interval = -1; + memcg->dirty_expire_interval = -1; } static int mem_cgroup_dirty_background_ratio_show(struct seq_file *m, void *v) @@ -4918,6 +4950,64 @@ mem_cgroup_dirty_ratio_write(struct kernfs_open_file *of, memcg->dirty_ratio = dirty_ratio; return nbytes; } + +static int mem_cgroup_dirty_writeback_interval_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); + + seq_printf(m, "%d\n", memcg->dirty_writeback_interval); + return 0; +} + +static ssize_t +mem_cgroup_dirty_writeback_interval_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, + loff_t off) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of)); + int ret, writeback_interval; + + buf = strstrip(buf); + ret = kstrtoint(buf, 0, &writeback_interval); + if (ret) + return ret; + + if (writeback_interval < -1) + return -EINVAL; + + if (memcg->dirty_writeback_interval != writeback_interval) { + memcg->dirty_writeback_interval = writeback_interval; + wakeup_flusher_threads(WB_REASON_PERIODIC); + } + return nbytes; +} + +static int mem_cgroup_dirty_expire_interval_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); + + seq_printf(m, "%d\n", memcg->dirty_expire_interval); + return 0; +} + +static ssize_t +mem_cgroup_dirty_expire_interval_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, loff_t off) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of)); + int ret, expire_interval; + + buf = strstrip(buf); + ret = kstrtoint(buf, 0, &expire_interval); + if (ret) + return ret; + + if (expire_interval < -1) + return -EINVAL; + + memcg->dirty_expire_interval = expire_interval; + return nbytes; +} #else static void wb_memcg_inherit_from_parent(struct mem_cgroup *parent, struct mem_cgroup *memcg) @@ -5067,6 +5157,18 @@ static struct cftype mem_cgroup_legacy_files[] = { .seq_show = mem_cgroup_dirty_ratio_show, .write = mem_cgroup_dirty_ratio_write, }, + { + .name = "dirty_writeback_interval_centisecs", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_writeback_interval_show, + .write = mem_cgroup_dirty_writeback_interval_write, + }, + { + .name = "dirty_expire_interval_centisecs", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_expire_interval_show, + .write = mem_cgroup_dirty_expire_interval_write, + }, #endif { }, /* terminate */ }; @@ -6549,6 +6651,18 @@ static struct cftype memory_files[] = { .seq_show = mem_cgroup_dirty_ratio_show, .write = mem_cgroup_dirty_ratio_write, }, + { + .name = "dirty_writeback_interval_centisecs", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_writeback_interval_show, + .write = mem_cgroup_dirty_writeback_interval_write, + }, + { + .name = "dirty_expire_interval_centisecs", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = mem_cgroup_dirty_expire_interval_show, + .write = mem_cgroup_dirty_expire_interval_write, + }, #endif { } /* terminate */ };