[Devel] [PATCH RH8 v2 0/4] adopt cgroup-v2 writeback

Konstantin Khorenko khorenko at virtuozzo.com
Mon Jul 12 15:37:16 MSK 2021


Kirill, can you please review the patchset?

Thank you.

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 07/09/2021 02:23 AM, Andrey Zhadchenko wrote:
> In cgroup-v1 all writeback IO is accounted to root blkcg by design. With
> cgroup-v2 it became possible to link memcg and blkcg, so  writeback code
> was enhanced to
> 1) consider balancing dirty pages per memory cgroup
> 2) account writeback generated IO to blkcg
>
> In vz7 writeback were balancing beancounter cgroup. However we dropped
> it.
> In vz8 @aryabinin tried to enable cgroup-v2 wruteback with 5cc286c98ee20
> ("mm, cgroup, writeback: Enable per-cgroup writeback for v1 cgroup."),
> but cgroup_get_e_css(), which is used to find blkcg based on memcg,
> do not work well with cgroup-v1 and always returns root blkcg.
> However we can implement a new function to associate blkcg with memcg via
> ve css_set.
>
> Test results with 256M container without patch:
> # echo "253:22358 100000000" > /sys/fs/cgroup/blkio/machine.slice/1/blkio.throttle.write_bps_device
> # vzctl exec 1 dd if=/dev/zero of=/test bs=1M count=1000
> # 1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.35522 s, 774 MB/s
> Since dirty balancing is global, conainer can dirty more than it's RAM
> and blkio limits is not respected.
>
> With patch
> # echo "253:22765 100000000" > /sys/fs/cgroup/blkio/machine.slice/1/blkio.throttle.write_bps_device
> # vzctl exec 1 dd if=/dev/zero of=/test bs=1M count=1000
> # 1048576000 bytes (1.0 GB, 1000 MiB) copied, 10.2267 s, 103 MB/s
> Per-ve dirty balancing and throttling works as expected.
>
> v2:
> Since ve->ve_ns is pointing to task nsproxy, it can be changed during ve
> lifetime. We already have a helper ve_get_init_css() that handles this
> case, so I decided to reuse it's code in new cgroup_get_e_ve_css().
> Additionally I have added two patches that improves current code:
> 1) drop 'get' from css_get_local_root() name since get with css functions
> usually result in taking reference
> 2) drop duplicate code and reuse css_local_root() helper in
> ve_get_init_css()
>
> Andrey Zhadchenko (4):
>   kernel/cgroup: rename css_get_local_root
>   kernel/ve: simplify ve_get_init_css
>   kernel/cgroup: implement cgroup_get_e_ve_css
>   mm/backing-dev: associate writeback with correct blkcg
>
>  include/linux/cgroup.h   |  4 +++-
>  kernel/cgroup/cgroup.c   | 19 ++++++++++++++++++-
>  kernel/ve/ve.c           | 16 +++-------------
>  mm/backing-dev.c         | 19 +++++++++++++++++++
>  security/device_cgroup.c |  2 +-
>  5 files changed, 44 insertions(+), 16 deletions(-)
>


More information about the Devel mailing list