summary refs log tree commit diff
path: root/block/Makefile
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2019-11-07 11:18:03 -0800
committerJens Axboe <axboe@kernel.dk>2019-11-07 12:28:13 -0700
commitf73316482977ac401ac37245c9df48079d4e11f3 (patch)
tree1177e1189b87661f46900c6404047da82364dd93 /block/Makefile
parent8a80d5d6638b7d58480a83aef49d587de63d4cbb (diff)
downloadlinux-f73316482977ac401ac37245c9df48079d4e11f3.tar.gz
blk-cgroup: reimplement basic IO stats using cgroup rstat
blk-cgroup has been using blkg_rwstat to track basic IO stats.
Unfortunately, reading recursive stats scales badly as itinvolves
walking all descendants.  On systems with a huge number of cgroups
(dead or alive), this can lead to substantial CPU cost when reading IO
stats.

This patch reimplements basic IO stats using cgroup rstat which uses
more memory but makes recursive stat reading O(# descendants which
have been active since last reading) instead of O(# descendants).

* blk-cgroup core no longer uses sync/async stats.  Introduce new stat
  enums - BLKG_IOSTAT_{READ|WRITE|DISCARD}.

* Add blkg_iostat[_set] which encapsulates byte and io stats, last
  values for propagation delta calculation and u64_stats_sync for
  correctness on 32bit archs.

* Update the new percpu stat counters directly and implement
  blkcg_rstat_flush() to implement propagation.

* blkg_print_stat() can now bring the stats up to date by calling
  cgroup_rstat_flush() and print them instead of directly summing up
  all descendants.

* It now allocates 96 bytes per cpu.  It used to be 40 bytes.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Dan Schatzberg <dschatzberg@fb.com>
Cc: Daniel Xu <dlxu@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/Makefile')
0 files changed, 0 insertions, 0 deletions