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 1932EC4345F for ; Tue, 23 Apr 2024 00:44:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B0E26B0085; Mon, 22 Apr 2024 20:44:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2611E6B0087; Mon, 22 Apr 2024 20:44:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1015D6B0088; Mon, 22 Apr 2024 20:44:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id E24686B0085 for ; Mon, 22 Apr 2024 20:44:42 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 38A0E1205FD for ; Tue, 23 Apr 2024 00:44:42 +0000 (UTC) X-FDA: 82038951204.18.7384C6E Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf29.hostedemail.com (Postfix) with ESMTP id E36D1120003 for ; Tue, 23 Apr 2024 00:44:38 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=l8eBtfq9; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf29.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713833079; 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:in-reply-to:references:references:dkim-signature; bh=+JmmpxKUidFl9Tzdpxt7PGe6d/Y7lMsPlhyVIGpXUYI=; b=w36pcHmFeNbgyOTXnN2C2pU+OrPbBcWjS3uNRgQvRDRLJVycGlqk2FcB8IN8MchiojRnDn otJpHPyZNBkwIwrVTC3pNBiyJypSzXKaLb/NyStEjWSwKZruacFTNmXngRLFWDVZ8bnd09 jJmxUm1mppI4gbFsgFAZnXvML7HOrpE= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=l8eBtfq9; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf29.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713833079; a=rsa-sha256; cv=none; b=zon0NgkWnxhHksaQt6k7vkymL0umWTbcPx92G2dWKcAS9SJGheq99lCRA1enRzD+4r0ZWx OCNziKeMtAJvsyX/3fyeu+JtLnqvFc/gNTG3GE1UdUZJX8mEiXDX3yA1MpFLp6Dw82JU+a XygWwvKfifSOyoqjqvQx8fFl7eOR2Ag= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 8EFC9CE0EEF; Tue, 23 Apr 2024 00:44:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD782C113CC; Tue, 23 Apr 2024 00:44:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713833073; bh=77v/z4pf5G4vO82BkGrG5tUThBqnCicr34yR2Tw/p3U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l8eBtfq9mJ37HXPcCtGC6rxe59aLTHv+peCLZVh0sXeHBv2fmxRJWQ8FIPxFarS67 RztpnbCUjEZj71WTF82E+mm6epWyqTASnJ7PblEQKbryIHC+k+qPO9E/zI2ZpK6LtA S26Zdd2g6/lnLPyYE5fGo9lx63qT+IjaivOYJdWvJdV1Ms34Fcas9wFpDX3ldAbzAJ 6iHqZfZUox3KVGxQ6+qnHtymtLdEAgIaJiAW6xnOwTyDRdU3o6XK9yeW6AA7ZPKYhU godRJb1KGT5oVfYn+AD3gbgyMYm5+f+UYbWGZKhMnUDbc6G8Ddo8jjZIaeReuPaKKV 44Gi9j8gKFvOg== From: SeongJae Park To: Kemeng Shi Cc: SeongJae Park , akpm@linux-foundation.org, willy@infradead.org, jack@suse.cz, bfoster@redhat.com, tj@kernel.org, dsterba@suse.com, mjguzik@gmail.com, dhowells@redhat.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v4 2/4] writeback: support retrieving per group debug writeback stats of bdi Date: Mon, 22 Apr 2024 17:44:30 -0700 Message-Id: <20240423004430.140320-1-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240422164808.13627-3-shikemeng@huaweicloud.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: E36D1120003 X-Rspam-User: X-Stat-Signature: h5nc1579tizj1jcmyhg35hwz6s5ccj4n X-HE-Tag: 1713833078-987056 X-HE-Meta: U2FsdGVkX19fyUNOce/Opt9r/sF9zuKNq3kL4Okk9EUDysJFwfT+dYOm5KzgW7EKA/hZ3w4mx77s8pG1R6IQF96OEnupj2p/Hxkwt6WCckPAA7HJAqk6uaEKyyUkB+O/MGc6Xyvg+VLrNAfbtS7MteDByiCI1mBrgKulQeIsjYEV8t6+nzhogKYLfstx0lBA1G979/5snz1Q+rQQBePQMVfZn3uGqRttBLQ/Kbe0D4yGPmtFIGJ2SpX0s5iVGXXXW+DnmPFaTIS7uJGKio9K745EPXs9Fum1IlxO5W6husdysmCOnvagdXL1foD/VfyZOyUlEuS8W4uoDgnPld1/4pJvrqUy2jS295hlc5Lrn/iaoC2xsR9sCPlV7HoeYgl49PRrVSScUhu0764mf9QeAY5ymYyIYhTimzAJJw8x3AJI4WV799XdprPbJ+m5+ZfRCv+SShz1JtPnJiMZ2rcZTNbTYaKORSj9taKHcXMtuY8BJpxTI9piK1e/750QNFqhbajsEBrr9QEHnHRkptqLGtSs+CuDtmVLBFx+WtfxFE8LmQOA2rktHC8QhH5sTXg6m9IBhLMQA6KDct2ylYKEpxGM79DhDI8KU7kBIGrqDfxHcHIX0PBa0Ku0wK2t6JpIx3hkqO7s4PJOFhza1A7/96vawIUKaEQXliwIAhfLyRzdsMRHR9tH9i+MwdiHPy8xtV+4+NROjUIV7YU1vcnbuwB4BY+7UtH3C0Z4VdUYy0GZF64T38dFvPDIBeLeqCjL4ROQMJpsy/b1FplrFMx41oeiPDEMSgQPFh4RkzD6j2fRcLLHlTmzyWJPmNUDAniWdpKc6cAZqIF5op65uywV3EfShHSH3ekpvpyToaTlUhkzswT6WDTW0797d6OGx2jW6CdeNEAp3Iesw/j6IrpmHKhQrcdVMQFERlznn6SFXXQUx6ESBk9wTPPxM+vq50BJMPZlQiBnkXrhcDjO7S0 fT8KiBQd iP89Dzc7KiHOcvPWAuYo5T5eZmLvuAeRyTRaVcSZkoEAoRt3/ZUt4OqnIFe1EQoJrv5WTdnLbcyh7ChM0oZc//2xUvi6t4m6gvf4dbwkUVGiWph59jL9WRn40U7aDx3a3KETtHE97MsLQSsO1EelsSCiOOaYi+PrIDddNSCIAuwNDiM2zRDyq+bseg7qe+lXY5aFeNN6iGHrhgsIGzZT/s3qO6EkfXmpFHU4kKO6cFHwopXf0KAX8aFviaQ== 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: List-Subscribe: List-Unsubscribe: Hi Kemeng, On Tue, 23 Apr 2024 00:48:06 +0800 Kemeng Shi wrote: > Add /sys/kernel/debug/bdi/xxx/wb_stats to show per group writeback stats > of bdi. > > Following domain hierarchy is tested: > global domain (320G) > / \ > cgroup domain1(10G) cgroup domain2(10G) > | | > bdi wb1 wb2 > > /* per wb writeback info of bdi is collected */ > cat /sys/kernel/debug/bdi/252:16/wb_stats > WbCgIno: 1 > WbWriteback: 0 kB > WbReclaimable: 0 kB > WbDirtyThresh: 0 kB > WbDirtied: 0 kB > WbWritten: 0 kB > WbWriteBandwidth: 102400 kBps > b_dirty: 0 > b_io: 0 > b_more_io: 0 > b_dirty_time: 0 > state: 1 > WbCgIno: 4094 > WbWriteback: 54432 kB > WbReclaimable: 766080 kB > WbDirtyThresh: 3094760 kB > WbDirtied: 1656480 kB > WbWritten: 837088 kB > WbWriteBandwidth: 132772 kBps > b_dirty: 1 > b_io: 1 > b_more_io: 0 > b_dirty_time: 0 > state: 7 > WbCgIno: 4135 > WbWriteback: 15232 kB > WbReclaimable: 786688 kB > WbDirtyThresh: 2909984 kB > WbDirtied: 1482656 kB > WbWritten: 681408 kB > WbWriteBandwidth: 124848 kBps > b_dirty: 0 > b_io: 1 > b_more_io: 0 > b_dirty_time: 0 > state: 7 > > Signed-off-by: Kemeng Shi > --- > include/linux/writeback.h | 1 + > mm/backing-dev.c | 78 ++++++++++++++++++++++++++++++++++++++- > mm/page-writeback.c | 19 ++++++++++ > 3 files changed, 96 insertions(+), 2 deletions(-) > > diff --git a/include/linux/writeback.h b/include/linux/writeback.h > index 9845cb62e40b..112d806ddbe4 100644 > --- a/include/linux/writeback.h > +++ b/include/linux/writeback.h > @@ -355,6 +355,7 @@ int dirtytime_interval_handler(struct ctl_table *table, int write, > > void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty); > unsigned long wb_calc_thresh(struct bdi_writeback *wb, unsigned long thresh); > +unsigned long cgwb_calc_thresh(struct bdi_writeback *wb); > > void wb_update_bandwidth(struct bdi_writeback *wb); > > diff --git a/mm/backing-dev.c b/mm/backing-dev.c > index 089146feb830..6ecd11bdce6e 100644 > --- a/mm/backing-dev.c > +++ b/mm/backing-dev.c > @@ -155,19 +155,93 @@ static int bdi_debug_stats_show(struct seq_file *m, void *v) > } > DEFINE_SHOW_ATTRIBUTE(bdi_debug_stats); > > +static void wb_stats_show(struct seq_file *m, struct bdi_writeback *wb, > + struct wb_stats *stats) > +{ > + > + seq_printf(m, > + "WbCgIno: %10lu\n" > + "WbWriteback: %10lu kB\n" > + "WbReclaimable: %10lu kB\n" > + "WbDirtyThresh: %10lu kB\n" > + "WbDirtied: %10lu kB\n" > + "WbWritten: %10lu kB\n" > + "WbWriteBandwidth: %10lu kBps\n" > + "b_dirty: %10lu\n" > + "b_io: %10lu\n" > + "b_more_io: %10lu\n" > + "b_dirty_time: %10lu\n" > + "state: %10lx\n\n", > + cgroup_ino(wb->memcg_css->cgroup), I'm getting below kunit build failure from the latest mm-unstable tree, and 'git bisect' points this patch. ERROR:root:.../linux/mm/backing-dev.c: In function ‘wb_stats_show’: .../linux/mm/backing-dev.c:175:20: error: implicit declaration of function ‘cgroup_ino’; did you mean ‘cgroup_init’? [-Werror=implicit-function-declaration] 175 | cgroup_ino(wb->memcg_css->cgroup), | ^~~~~~~~~~ | cgroup_init .../linux/mm/backing-dev.c:175:33: error: ‘struct bdi_writeback’ has no member named ‘memcg_css’ 175 | cgroup_ino(wb->memcg_css->cgroup), | ^~ The kunit build config is not having CONFIG_CGROUPS. I guess we need to check the case? I confirmed below dumb change is fixing the issue, but I guess it could be cleaner. May I ask your opinion? --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -160,7 +160,9 @@ static void wb_stats_show(struct seq_file *m, struct bdi_writeback *wb, { seq_printf(m, +#ifdef CONFIG_CGROUPS "WbCgIno: %10lu\n" +#endif "WbWriteback: %10lu kB\n" "WbReclaimable: %10lu kB\n" "WbDirtyThresh: %10lu kB\n" @@ -172,7 +174,9 @@ static void wb_stats_show(struct seq_file *m, struct bdi_writeback *wb, "b_more_io: %10lu\n" "b_dirty_time: %10lu\n" "state: %10lx\n\n", +#ifdef CONFIG_CGROUPS cgroup_ino(wb->memcg_css->cgroup), +#endif K(stats->nr_writeback), K(stats->nr_reclaimable), K(stats->wb_thresh), > + K(stats->nr_writeback), > + K(stats->nr_reclaimable), > + K(stats->wb_thresh), > + K(stats->nr_dirtied), > + K(stats->nr_written), > + K(wb->avg_write_bandwidth), > + stats->nr_dirty, > + stats->nr_io, > + stats->nr_more_io, > + stats->nr_dirty_time, > + wb->state); > +} > + > +static int cgwb_debug_stats_show(struct seq_file *m, void *v) > +{ > + struct backing_dev_info *bdi = m->private; > + unsigned long background_thresh; > + unsigned long dirty_thresh; > + struct bdi_writeback *wb; > + struct wb_stats stats; Kunit build also shows below warning: .../linux/mm/backing-dev.c: In function ‘cgwb_debug_stats_show’: .../linux/mm/backing-dev.c:195:25: warning: unused variable ‘stats’ [-Wunused-variable] 195 | struct wb_stats stats; | ^~~~~ I guess above line can simply removed? > + > + global_dirty_limits(&background_thresh, &dirty_thresh); > + > + rcu_read_lock(); > + list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node) { > + struct wb_stats stats = { .dirty_thresh = dirty_thresh }; > + > + if (!wb_tryget(wb)) > + continue; > + > + collect_wb_stats(&stats, wb); > + > + /* > + * Calculate thresh of wb in writeback cgroup which is min of > + * thresh in global domain and thresh in cgroup domain. Drop > + * rcu lock because cgwb_calc_thresh may sleep in > + * cgroup_rstat_flush. We can do so here because we have a ref. > + */ > + if (mem_cgroup_wb_domain(wb)) { > + rcu_read_unlock(); > + stats.wb_thresh = min(stats.wb_thresh, cgwb_calc_thresh(wb)); > + rcu_read_lock(); > + } > + > + wb_stats_show(m, wb, &stats); > + > + wb_put(wb); > + } > + rcu_read_unlock(); > + > + return 0; > +} Thanks, SJ [...]