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 >