• Tejun Heo's avatar
    cgroup, rstat: Don't flush subtree root unless necessary · a74ebf04
    Tejun Heo authored
    [ Upstream commit b4ff1b44 ]
    
    cgroup_rstat_cpu_pop_updated() is used to traverse the updated cgroups
    on flush.  While it was only visiting updated ones in the subtree, it
    was visiting @root unconditionally.  We can easily check whether @root
    is updated or not by looking at its ->updated_next just as with the
    cgroups in the subtree.
    
    * Remove the unnecessary cgroup_parent() test.  The system root cgroup
      is never updated and thus its ->updated_next is always NULL.  No
      need to test whether cgroup_parent() exists in addition to
      ->updated_next.
    
    * Terminate traverse if ->updated_next is NULL.  This can only happen
      for subtree @root and there's no reason to visit it if it's not
      marked updated.
    
    This reduces cpu consumption when reading a lot of rstat backed files.
    In a micro benchmark reading stat from ~1600 cgroups, the sys time was
    lowered by >40%.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    a74ebf04
rstat.c 10.8 KB