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 61B4AC6FD1F for ; Thu, 21 Mar 2024 18:06:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9FA6F6B0083; Thu, 21 Mar 2024 14:06:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9AC1A6B0085; Thu, 21 Mar 2024 14:06:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 84C996B0088; Thu, 21 Mar 2024 14:06:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 73D966B0083 for ; Thu, 21 Mar 2024 14:06:31 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 10E701616AF for ; Thu, 21 Mar 2024 18:06:31 +0000 (UTC) X-FDA: 81921826182.12.C992D9F Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf05.hostedemail.com (Postfix) with ESMTP id B66CE100033 for ; Thu, 21 Mar 2024 18:06:27 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=w7lT68Oz; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MYtuAGMa; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=w7lT68Oz; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MYtuAGMa; dmarc=none; spf=pass (imf05.hostedemail.com: domain of jack@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711044388; a=rsa-sha256; cv=none; b=BPFAmKarjErzKbyCZCH7wx4D6k5H3MQj3sQOliaZfD9nZ+zmvne5+qdVXjTOZAdcbeaWLk 4ssqcGcpbY0+k0Yo//1xrfnb7nKjnfDZ5iq8NLmp6OEms6vp5uzdR6R+G3iZxUmp4oeAwt rtScEP64hxbvBxRDItj+kItrUo5Yer0= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=w7lT68Oz; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MYtuAGMa; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=w7lT68Oz; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MYtuAGMa; dmarc=none; spf=pass (imf05.hostedemail.com: domain of jack@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711044388; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=CGVHmTaTp8V9BZmoFhStOl7fyzif6q6m2j5KQberDvI=; b=w0jQ9xIyZqtI5mHb3BGPUwA9vxOHCXgFFzLeIZ9Cj6bD8Gqjlc6B+ni4et02xd5ReA8bYx DSuwOZCy24odKTRO6aOMn384ejac5EJlnqmNRCGi3slmGZG7eO4ozuRtw1PUf1e2k8BPen 6j6LnUDBxykQHGIJTgkUOg6+9ItedfI= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 9059421E83; Thu, 21 Mar 2024 18:06:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1711044385; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CGVHmTaTp8V9BZmoFhStOl7fyzif6q6m2j5KQberDvI=; b=w7lT68OzRPoxfG/hfxpofqN8QxlCEI72WnQVD/otuPit/xsQS3kknF0DZcO31LBzqy4B5l ZKCw+9zyq50FVn2Y9QxS2C0mBmUNUyz1TJF1aFzethOvkk9y7tmxVS4Tju4Qtdb3SGUiga 9U31koKDRrrb07uPZW4g5wnW4MpM62Q= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1711044385; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CGVHmTaTp8V9BZmoFhStOl7fyzif6q6m2j5KQberDvI=; b=MYtuAGMaNl8DwPSPn6WffLO7cvdpC1k+t9LxlY0JUkXnuc53PR8ZW9ZbehMg9bgaQigS2y ZuRsp7pPd7CwpDDw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1711044385; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CGVHmTaTp8V9BZmoFhStOl7fyzif6q6m2j5KQberDvI=; b=w7lT68OzRPoxfG/hfxpofqN8QxlCEI72WnQVD/otuPit/xsQS3kknF0DZcO31LBzqy4B5l ZKCw+9zyq50FVn2Y9QxS2C0mBmUNUyz1TJF1aFzethOvkk9y7tmxVS4Tju4Qtdb3SGUiga 9U31koKDRrrb07uPZW4g5wnW4MpM62Q= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1711044385; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CGVHmTaTp8V9BZmoFhStOl7fyzif6q6m2j5KQberDvI=; b=MYtuAGMaNl8DwPSPn6WffLO7cvdpC1k+t9LxlY0JUkXnuc53PR8ZW9ZbehMg9bgaQigS2y ZuRsp7pPd7CwpDDw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 7B675138A1; Thu, 21 Mar 2024 18:06:25 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id eV3cHSF3/GWVOQAAD6G6ig (envelope-from ); Thu, 21 Mar 2024 18:06:25 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id DA2D0A0806; Thu, 21 Mar 2024 19:06:20 +0100 (CET) Date: Thu, 21 Mar 2024 19:06:20 +0100 From: Jan Kara To: Kemeng Shi Cc: akpm@linux-foundation.org, tj@kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, willy@infradead.org, bfoster@redhat.com, jack@suse.cz, dsterba@suse.com, mjguzik@gmail.com, dhowells@redhat.com, peterz@infradead.org Subject: Re: [PATCH 1/6] writeback: collect stats of all wb of bdi in bdi_debug_stats_show Message-ID: <20240321180620.mbint45pbyc74vpg@quack3> References: <20240320110222.6564-1-shikemeng@huaweicloud.com> <20240320110222.6564-2-shikemeng@huaweicloud.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240320110222.6564-2-shikemeng@huaweicloud.com> X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: B66CE100033 X-Stat-Signature: st7fqhehz1yuyzkp4eudujzwt9wkrdye X-HE-Tag: 1711044387-621921 X-HE-Meta: U2FsdGVkX1/1s1H4k7PWShHWSTj2mYz2t+LDSuOovTNow4ZB17U9L8dC2/HJRU8n4hrcgwAaURsi2AD/v2i/8B3jlprMtYIsLAuznlTunLYQzMga+kBtlEj+r7IPwUyLVepBXeGnMearxeNfHMOe1RhuZjsBFdhPk9wHeT2RgB8JKqIdT8GAWNWkqMnpnb1hvObZZ3m5VPCyDZkeJFGrMqsObJHyy+h030oB9wuvL99Q8/E5Jb8RlcMyGMJT1vIoEsZlFrzrFDTB3CoQK7muIXKQMNFr4GaESMrTelmrjKcAPecIC4RJ0VmwgdX7URcbfhmSxoRQc1KkeNJqiVzpy5pfE7wzcZ+gXtxFncXcOHMI2aWsCy7IZtTKNjP5HedNMDmxuk2Amu6fDn5OolNWaYTRLLHppVfnrJN53dH1Z8EkgyZLXQXaDZ02u7+FybgrJlOYrJPIpA1cRSclvhjTeKp+C4/G2JNvWU1fYnK8Qeoa3bZR3fHqKEi6shW9i65dOtcOcQEsO04z2eF/3MqilmNyDsqdV6c7ywq13geq7Ruz9ft70amPlnawpNQ0vKAMBYFYfSaF06w2eeVQsLBx5/e3y/UfoVUsVM4IpLsVZrOLShhQ4XpZmq8oO2j+ZKkXrzP54lLQFVLPvRXY302IaMu1/r/9x92svhmyqE5eviTCx906RRjI0shYqpulcXiiaWKiPnobUlXxC4KWRs04Flfk25FPa/qSFSzM9gZvkVPKHYuOOM2XThhAc7WMBOwU4CMkgoGsJQ4+VFfxuwu2HNSpTBkrxeJZMjdVy1EWBQHFvxFIzkFWjcSHfaK+v3pdZOYjZ0DM712pC3D9IL5Gx/c/Zbl/3P+NLHxyMj2egNTyHjajGrK4+vUUY1F7wMYCXGsisN5C/in/4i6gSqnDb+po5cNoytHDm2nrrMxtg9OBJFkgXl5D47miPpPDKyfT 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: On Wed 20-03-24 19:02:17, Kemeng Shi wrote: > /sys/kernel/debug/bdi/xxx/stats is supposed to show writeback information > of whole bdi, but only writeback information of bdi in root cgroup is > collected. So writeback information in non-root cgroup are missing now. > To be more specific, considering following case: > > /* create writeback cgroup */ > cd /sys/fs/cgroup > echo "+memory +io" > cgroup.subtree_control > mkdir group1 > cd group1 > echo $$ > cgroup.procs > /* do writeback in cgroup */ > fio -name test -filename=/dev/vdb ... > /* get writeback info of bdi */ > cat /sys/kernel/debug/bdi/xxx/stats > The cat result unexpectedly implies that there is no writeback on target > bdi. > > Fix this by collecting stats of all wb in bdi instead of only wb in > root cgroup. > > Signed-off-by: Kemeng Shi Looks mostly good, one comment below: > --- > mm/backing-dev.c | 93 ++++++++++++++++++++++++++++++++++++------------ > 1 file changed, 70 insertions(+), 23 deletions(-) > > diff --git a/mm/backing-dev.c b/mm/backing-dev.c > index 5f2be8c8df11..788702b6c5dd 100644 > --- a/mm/backing-dev.c > +++ b/mm/backing-dev.c > @@ -39,6 +39,19 @@ struct workqueue_struct *bdi_wq; > #include > #include > > +struct wb_stats { > + unsigned long nr_dirty; > + unsigned long nr_io; > + unsigned long nr_more_io; > + unsigned long nr_dirty_time; > + unsigned long nr_writeback; > + unsigned long nr_reclaimable; > + unsigned long nr_dirtied; > + unsigned long nr_written; > + unsigned long dirty_thresh; > + unsigned long wb_thresh; > +}; > + > static struct dentry *bdi_debug_root; > > static void bdi_debug_init(void) > @@ -46,31 +59,65 @@ static void bdi_debug_init(void) > bdi_debug_root = debugfs_create_dir("bdi", NULL); > } > > -static int bdi_debug_stats_show(struct seq_file *m, void *v) > +static void collect_wb_stats(struct wb_stats *stats, > + struct bdi_writeback *wb) > { > - struct backing_dev_info *bdi = m->private; > - struct bdi_writeback *wb = &bdi->wb; > - unsigned long background_thresh; > - unsigned long dirty_thresh; > - unsigned long wb_thresh; > - unsigned long nr_dirty, nr_io, nr_more_io, nr_dirty_time; > struct inode *inode; > > - nr_dirty = nr_io = nr_more_io = nr_dirty_time = 0; > spin_lock(&wb->list_lock); > list_for_each_entry(inode, &wb->b_dirty, i_io_list) > - nr_dirty++; > + stats->nr_dirty++; > list_for_each_entry(inode, &wb->b_io, i_io_list) > - nr_io++; > + stats->nr_io++; > list_for_each_entry(inode, &wb->b_more_io, i_io_list) > - nr_more_io++; > + stats->nr_more_io++; > list_for_each_entry(inode, &wb->b_dirty_time, i_io_list) > if (inode->i_state & I_DIRTY_TIME) > - nr_dirty_time++; > + stats->nr_dirty_time++; > spin_unlock(&wb->list_lock); > > + stats->nr_writeback += wb_stat(wb, WB_WRITEBACK); > + stats->nr_reclaimable += wb_stat(wb, WB_RECLAIMABLE); > + stats->nr_dirtied += wb_stat(wb, WB_DIRTIED); > + stats->nr_written += wb_stat(wb, WB_WRITTEN); > + stats->wb_thresh += wb_calc_thresh(wb, stats->dirty_thresh); > +} > + > +#ifdef CONFIG_CGROUP_WRITEBACK > +static void bdi_collect_stats(struct backing_dev_info *bdi, > + struct wb_stats *stats) > +{ > + struct bdi_writeback *wb; > + > + /* protect wb from release */ > + mutex_lock(&bdi->cgwb_release_mutex); > + list_for_each_entry(wb, &bdi->wb_list, bdi_node) > + collect_wb_stats(stats, wb); > + mutex_unlock(&bdi->cgwb_release_mutex); > +} So AFAICT this function can race against bdi_unregister() -> wb_shutdown(&bdi->wb) because that doesn't take the cgwb_release_mutex. So we either need the RCU protection as Brian suggested or cgwb_lock or something. But given collect_wb_stats() can take a significant amount of time (traversing all the lists etc.) I think we'll need something more clever. Honza -- Jan Kara SUSE Labs, CR