• Yafang Shao's avatar
    sched: Make struct sched_statistics independent of fair sched class · ceeadb83
    Yafang Shao authored
    If we want to use the schedstats facility to trace other sched classes, we
    should make it independent of fair sched class. The struct sched_statistics
    is the schedular statistics of a task_struct or a task_group. So we can
    move it into struct task_struct and struct task_group to achieve the goal.
    
    After the patch, schestats are orgnized as follows,
    
        struct task_struct {
           ...
           struct sched_entity se;
           struct sched_rt_entity rt;
           struct sched_dl_entity dl;
           ...
           struct sched_statistics stats;
           ...
       };
    
    Regarding the task group, schedstats is only supported for fair group
    sched, and a new struct sched_entity_stats is introduced, suggested by
    Peter -
    
        struct sched_entity_stats {
            struct sched_entity     se;
            struct sched_statistics stats;
        } __no_randomize_layout;
    
    Then with the se in a task_group, we can easily get the stats.
    
    The sched_statistics members may be frequently modified when schedstats is
    enabled, in order to avoid impacting on random data which may in the same
    cacheline with them, the struct sched_statistics is defined as cacheline
    aligned.
    
    As this patch changes the core struct of scheduler, so I verified the
    performance it may impact on the scheduler with 'perf bench sched
    pipe', suggested by Mel. Below is the result, in which all the values
    are in usecs/op.
                                      Before               After
          kernel.sched_schedstats=0  5.2~5.4               5.2~5.4
          kernel.sched_schedstats=1  5.3~5.5               5.3~5.5
    [These data is a little difference with the earlier version, that is
     because my old test machine is destroyed so I have to use a new
     different test machine.]
    
    Almost no impact on the sched performance.
    
    No functional change.
    
    [lkp@intel.com: reported build failure in earlier version]
    Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Link: https://lore.kernel.org/r/20210905143547.4668-3-laoar.shao@gmail.com
    ceeadb83
core.c 271 KB