Re: [PATCH 5/8] cgroup: rstat: punt root-level optimization to individual controllers
From: Tejun Heo <hidden>
Date: 2021-02-08 21:39:19
Also in:
linux-mm, lkml
Hello, On Mon, Feb 08, 2021 at 03:29:21PM -0500, Johannes Weiner wrote:
quoted
quoted
@@ -789,6 +793,7 @@ static void blkcg_rstat_flush(struct cgroup_subsys_state *css, int cpu) u64_stats_update_end(&blkg->iostat.sync); /* propagate global delta to parent */ + /* XXX: could skip this if parent is root */ if (parent) { u64_stats_update_begin(&parent->iostat.sync); blkg_iostat_set(&delta, &blkg->iostat.cur);Might as well update this similar to cgroup_base_stat_flush()?I meant to revisit that, but I'm never 100% confident when it comes to the interaction and lifetime of css, blkcg and blkg_gq.
Yeah, it does get hairy.
IIUC, the blkg_gq->parent linkage always matches the css parent linkage; it just exists as an optimization for ancestor walks, which would otherwise have to do radix lookups when going through the css.
But yes, at least this part is straight-forward.
So with the cgroup_parent() check at the beginning of the function making sure we're looking at a non-root group, blkg_gq->parent should also never be NULL and I can do if (paren->parent) directly, right?
I think so.
quoted
quoted
static void cgroup_base_stat_flush(struct cgroup *cgrp, int cpu) { - struct cgroup *parent = cgroup_parent(cgrp); struct cgroup_rstat_cpu *rstatc = cgroup_rstat_cpu(cgrp, cpu); + struct cgroup *parent = cgroup_parent(cgrp);Is this chunk intentional?Yeah, it puts the local variable declarations into reverse christmas tree ordering to make them a bit easier to read. It's a while-at-it cleanup, mostly a force of habit. I can drop it if it bothers you.
I don't mind either way. Was just wondering whether it was accidental. Thanks. -- tejun