Re: [ATCH v3 0/4] Improve visibility of writeback

From: Kemeng Shi
Date: Mon Apr 22 2024 - 03:55:44 EST




on 4/23/2024 12:05 AM, Kemeng Shi wrote:
Forget to fix a build warning, please ignore this series. Sorry for the
noise.
> v2->v3:
> -Drop patches to protect non-exist race and to define GDTC_INIT_NO_WB to
> null.
> -Add wb_tryget to wb from which we collect stats to bdi stats.
> -Create wb_stats when CONFIG_CGROUP_WRITEBACK is no enabled.
> -Add a blank line between two wb stats in wb_stats.
>
> v1->v2:
> -Send cleanup to wq_monitor.py separately.
> -Add patch to avoid use after free of bdi.
> -Rename wb_calc_cg_thresh to cgwb_calc_thresh as Tejun suggested.
> -Use rcu walk to avoid use after free.
> -Add debug output to each related patches.
>
> This series tries to improve visilibity of writeback. Patch 1 make
> /sys/kernel/debug/bdi/xxx/stats show writeback info of whole bdi
> instead of only writeback info in root cgroup. Patch 2 add a new
> debug file /sys/kernel/debug/bdi/xxx/wb_stats to show per wb writeback
> info. Patch 3 add wb_monitor.py to monitor basic writeback info
> of running system, more info could be added on demand. Patch 4
> is a random cleanup. More details can be found in respective
> patches. Thanks!
>
> Following domain hierarchy is tested:
> global domain (320G)
> / \
> cgroup domain1(10G) cgroup domain2(10G)
> | |
> bdi wb1 wb2
>
> /* all writeback info of bdi is successfully collected */
> cat stats
> BdiWriteback: 4704 kB
> BdiReclaimable: 1294496 kB
> BdiDirtyThresh: 204208088 kB
> DirtyThresh: 195259944 kB
> BackgroundThresh: 32503588 kB
> BdiDirtied: 48519296 kB
> BdiWritten: 47225696 kB
> BdiWriteBandwidth: 1173892 kBps
> b_dirty: 1
> b_io: 0
> b_more_io: 1
> b_dirty_time: 0
> bdi_list: 1
> state: 1
>
> /* 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: 4208
> WbWriteback: 59808 kB
> WbReclaimable: 676480 kB
> WbDirtyThresh: 6004624 kB
> WbDirtied: 23348192 kB
> WbWritten: 22614592 kB
> WbWriteBandwidth: 593204 kBps
> b_dirty: 1
> b_io: 1
> b_more_io: 0
> b_dirty_time: 0
> state: 7
>
> WbCgIno: 4249
> WbWriteback: 144256 kB
> WbReclaimable: 432096 kB
> WbDirtyThresh: 6004344 kB
> WbDirtied: 25727744 kB
> WbWritten: 25154752 kB
> WbWriteBandwidth: 577904 kBps
> b_dirty: 0
> b_io: 1
> b_more_io: 0
> b_dirty_time: 0
> state: 7
>
> The wb_monitor.py script output is as following:
> ./wb_monitor.py 252:16 -c
> writeback reclaimable dirtied written avg_bw
> 252:16_1 0 0 0 0 102400
> 252:16_4284 672 820064 9230368 8410304 685612
> 252:16_4325 896 819840 10491264 9671648 652348
> 252:16 1568 1639904 19721632 18081952 1440360
>
> writeback reclaimable dirtied written avg_bw
> 252:16_1 0 0 0 0 102400
> 252:16_4284 672 820064 9230368 8410304 685612
> 252:16_4325 896 819840 10491264 9671648 652348
> 252:16 1568 1639904 19721632 18081952 1440360
> ...
>
> Kemeng Shi (4):
> writeback: collect stats of all wb of bdi in bdi_debug_stats_show
> writeback: support retrieving per group debug writeback stats of bdi
> writeback: add wb_monitor.py script to monitor writeback info on bdi
> writeback: rename nr_reclaimable to nr_dirty in balance_dirty_pages
>
> include/linux/writeback.h | 1 +
> mm/backing-dev.c | 174 +++++++++++++++++++++++++++++-----
> mm/page-writeback.c | 27 +++++-
> tools/writeback/wb_monitor.py | 172 +++++++++++++++++++++++++++++++++
> 4 files changed, 345 insertions(+), 29 deletions(-)
> create mode 100644 tools/writeback/wb_monitor.py
>