[PATCH 0/1] Reduce cost of accessing tg->load_avg

Aaron Lu posted 1 patch 2 years, 3 months ago
There is a newer version of this series
kernel/sched/fair.c  | 13 ++++++++++++-
kernel/sched/sched.h |  1 +
2 files changed, 13 insertions(+), 1 deletion(-)
[PATCH 0/1] Reduce cost of accessing tg->load_avg
Posted by Aaron Lu 2 years, 3 months ago
RFC v2 -> v1:
- drop RFC;
- move cfs_rq->last_update_tg_load_avg before cfs_rq->tg_load_avg_contrib;
- add Vincent's reviewed-by tag.

RFC v2:
Nitin Tekchandani noticed some scheduler functions have high cost                                                      
according to perf/cycles while running postgres_sysbench workload.                                                     
I perf/annotated the high cost functions: update_cfs_group() and                                                       
update_load_avg() and found the costs were ~90% due to accessing to                                                    
tg->load_avg. This series is an attempt to reduce the overhead of                                                      
the two functions.                                                                                                     
                                                                                                                       
Thanks to Vincent's suggestion from v1, this revision used a simpler way                                               
to solve the overhead problem by limiting updates to tg->load_avg to at                                                
most once per ms. Benchmark shows that it has good results and with the                                                
rate limit in place, other optimizations in v1 don't improve performance                                               
further so they are dropped from this revision.

Aaron Lu (1):
  sched/fair: ratelimit update to tg->load_avg

 kernel/sched/fair.c  | 13 ++++++++++++-
 kernel/sched/sched.h |  1 +
 2 files changed, 13 insertions(+), 1 deletion(-)

-- 
2.41.0
Re: [PATCH 0/1] Reduce cost of accessing tg->load_avg
Posted by Swapnil Sapkal 2 years, 3 months ago
Hello Aaron,

On 8/23/2023 11:38 AM, Aaron Lu wrote:
> RFC v2 -> v1:
> - drop RFC;
> - move cfs_rq->last_update_tg_load_avg before cfs_rq->tg_load_avg_contrib;
> - add Vincent's reviewed-by tag.
> 
> RFC v2:
> Nitin Tekchandani noticed some scheduler functions have high cost
> according to perf/cycles while running postgres_sysbench workload.
> I perf/annotated the high cost functions: update_cfs_group() and
> update_load_avg() and found the costs were ~90% due to accessing to
> tg->load_avg. This series is an attempt to reduce the overhead of
> the two functions.
>                                                                                                                         
> Thanks to Vincent's suggestion from v1, this revision used a simpler way
> to solve the overhead problem by limiting updates to tg->load_avg to at
> most once per ms. Benchmark shows that it has good results and with the
> rate limit in place, other optimizations in v1 don't improve performance
> further so they are dropped from this revision.
> 

I have tested this series alongside Mathieu's changes. You can find the
report here: https://lore.kernel.org/all/f6dc1652-bc39-0b12-4b6b-29a2f9cd8484@amd.com/

Tested-by: Swapnil Sapkal <Swapnil.Sapkal@amd.com>

> Aaron Lu (1):
>    sched/fair: ratelimit update to tg->load_avg
> 
>   kernel/sched/fair.c  | 13 ++++++++++++-
>   kernel/sched/sched.h |  1 +
>   2 files changed, 13 insertions(+), 1 deletion(-)
> 
--
Thanks and Regards,
Swapnil
Re: [PATCH 0/1] Reduce cost of accessing tg->load_avg
Posted by Aaron Lu 2 years, 3 months ago
Hi Swapnil,

On Fri, Aug 25, 2023 at 04:03:20PM +0530, Swapnil Sapkal wrote:
> Hello Aaron,
> 
> On 8/23/2023 11:38 AM, Aaron Lu wrote:
> > RFC v2 -> v1:
> > - drop RFC;
> > - move cfs_rq->last_update_tg_load_avg before cfs_rq->tg_load_avg_contrib;
> > - add Vincent's reviewed-by tag.
> > 
> > RFC v2:
> > Nitin Tekchandani noticed some scheduler functions have high cost
> > according to perf/cycles while running postgres_sysbench workload.
> > I perf/annotated the high cost functions: update_cfs_group() and
> > update_load_avg() and found the costs were ~90% due to accessing to
> > tg->load_avg. This series is an attempt to reduce the overhead of
> > the two functions.
> > Thanks to Vincent's suggestion from v1, this revision used a simpler way
> > to solve the overhead problem by limiting updates to tg->load_avg to at
> > most once per ms. Benchmark shows that it has good results and with the
> > rate limit in place, other optimizations in v1 don't improve performance
> > further so they are dropped from this revision.
> > 
> 
> I have tested this series alongside Mathieu's changes. You can find the
> report here: https://lore.kernel.org/all/f6dc1652-bc39-0b12-4b6b-29a2f9cd8484@amd.com/
> 
> Tested-by: Swapnil Sapkal <Swapnil.Sapkal@amd.com>

Thanks a lot for running these workloads and share the results, will
include your tag when sending the next version.

Regards,
Aaron

> > Aaron Lu (1):
> >    sched/fair: ratelimit update to tg->load_avg
> > 
> >   kernel/sched/fair.c  | 13 ++++++++++++-
> >   kernel/sched/sched.h |  1 +
> >   2 files changed, 13 insertions(+), 1 deletion(-)
> > 
> --
> Thanks and Regards,
> Swapnil