2024-02-23 16:08:58

by Qais Yousef

[permalink] [raw]
Subject: [PATCH v2 0/2] sched: blk: Handle HMP systems when completing IO

Due to recent changes in how topology is represented on asymmetric multi
processing systems like big.LITTLE where all cpus share the last LLC, there is
a performance regression as cpus with different compute capacities appear under
the same LLC and we no longer send an IPI when the requester is running on
a different cluster with different compute capacity.

Restore the old behavior by adding a new cpus_equal_capacity() function to help
check for the new condition for these systems.

Changes since v1:

* Split the patch per subsystem.
* Convert cpus_gte_capacity() to cpus_equal_capacity()
* Make cpus_equal_capacity() return immediately for SMP systems.

Qais Yousef (2):
sched: Add a new function to compare if two cpus have the same
capacity
block/blk-mq: Don't complete locally if capacities are different

block/blk-mq.c | 5 +++--
include/linux/sched/topology.h | 6 ++++++
kernel/sched/core.c | 11 +++++++++++
3 files changed, 20 insertions(+), 2 deletions(-)

--
2.34.1



2024-02-24 13:44:05

by Shrikanth Hegde

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] sched: blk: Handle HMP systems when completing IO



On 2/23/24 9:27 PM, Qais Yousef wrote:
> Due to recent changes in how topology is represented on asymmetric multi
> processing systems like big.LITTLE where all cpus share the last LLC, there is
> a performance regression as cpus with different compute capacities appear under
> the same LLC and we no longer send an IPI when the requester is running on
> a different cluster with different compute capacity.
>
> Restore the old behavior by adding a new cpus_equal_capacity() function to help
> check for the new condition for these systems.
>
> Changes since v1:
>
> * Split the patch per subsystem.
> * Convert cpus_gte_capacity() to cpus_equal_capacity()
> * Make cpus_equal_capacity() return immediately for SMP systems.
>

nit: Did you mean !SMP systems here?
Because in changes i see its returning true directly if its in !CONFIG_SMP path.

> Qais Yousef (2):
> sched: Add a new function to compare if two cpus have the same
> capacity
> block/blk-mq: Don't complete locally if capacities are different
>
> block/blk-mq.c | 5 +++--
> include/linux/sched/topology.h | 6 ++++++
> kernel/sched/core.c | 11 +++++++++++
> 3 files changed, 20 insertions(+), 2 deletions(-)
>

2024-02-24 19:49:23

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] sched: blk: Handle HMP systems when completing IO


On Fri, 23 Feb 2024 15:57:47 +0000, Qais Yousef wrote:
> Due to recent changes in how topology is represented on asymmetric multi
> processing systems like big.LITTLE where all cpus share the last LLC, there is
> a performance regression as cpus with different compute capacities appear under
> the same LLC and we no longer send an IPI when the requester is running on
> a different cluster with different compute capacity.
>
> Restore the old behavior by adding a new cpus_equal_capacity() function to help
> check for the new condition for these systems.
>
> [...]

Applied, thanks!

[1/2] sched: Add a new function to compare if two cpus have the same capacity
commit: b361c9027b4e4159e7bcca4eb64fd26507c19994
[2/2] block/blk-mq: Don't complete locally if capacities are different
commit: af550e4c968294398fc76b075f12d51c76caf753

Best regards,
--
Jens Axboe




2024-02-24 23:12:28

by Qais Yousef

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] sched: blk: Handle HMP systems when completing IO

On 02/24/24 19:13, Shrikanth Hegde wrote:
>
>
> On 2/23/24 9:27 PM, Qais Yousef wrote:
> > Due to recent changes in how topology is represented on asymmetric multi
> > processing systems like big.LITTLE where all cpus share the last LLC, there is
> > a performance regression as cpus with different compute capacities appear under
> > the same LLC and we no longer send an IPI when the requester is running on
> > a different cluster with different compute capacity.
> >
> > Restore the old behavior by adding a new cpus_equal_capacity() function to help
> > check for the new condition for these systems.
> >
> > Changes since v1:
> >
> > * Split the patch per subsystem.
> > * Convert cpus_gte_capacity() to cpus_equal_capacity()
> > * Make cpus_equal_capacity() return immediately for SMP systems.
> >
>
> nit: Did you mean !SMP systems here?
> Because in changes i see its returning true directly if its in !CONFIG_SMP path.

I was referring to this hunk

+ if (!sched_asym_cpucap_active())
+ return true;

in cpus_equal_capacity(). In SMP system the condition is always true and
there's a static key that tells us if the system is asymmetric.

>
> > Qais Yousef (2):
> > sched: Add a new function to compare if two cpus have the same
> > capacity
> > block/blk-mq: Don't complete locally if capacities are different
> >
> > block/blk-mq.c | 5 +++--
> > include/linux/sched/topology.h | 6 ++++++
> > kernel/sched/core.c | 11 +++++++++++
> > 3 files changed, 20 insertions(+), 2 deletions(-)
> >