mbox series

[0/6] An alternative series for asymmetric AArch32 systems

Message ID 20201027215118.27003-1-will@kernel.org (mailing list archive)
Headers show
Series An alternative series for asymmetric AArch32 systems | expand

Message

Will Deacon Oct. 27, 2020, 9:51 p.m. UTC
Hi all,

I was playing around with the asymmetric AArch32 RFCv2 from Qais:

https://lore.kernel.org/r/20201021104611.2744565-1-qais.yousef@arm.com

and ended up writing my own implementation this afternoon. I think it's
smaller, simpler and easier to work with. In particular:

  * I got rid of the sysctl in favour of a plain cmdline parameter
  * I don't have a new CPU capability
  * I don't have a new thread flag
  * I expose a cpumask to userspace via sysfs to identify the 32-bit CPUs

Anyway, I don't think we should merge this stuff (other than the first patch)
until we've figured out what's going on in Android, but I wanted to get
this out as something which we might be able to build on.

Cheers,

Will

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Morten Rasmussen <morten.rasmussen@arm.com>
Cc: Qais Yousef <qais.yousef@arm.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: kernel-team@android.com

--->8

Qais Yousef (1):
  KVM: arm64: Handle Asymmetric AArch32 systems

Will Deacon (5):
  arm64: Allow mismatched 32-bit EL0 support
  KVM: arm64: Kill 32-bit vCPUs on systems with mismatched EL0 support
  arm64: Kill 32-bit applications scheduled on 64-bit-only CPUs
  arm64: Advertise CPUs capable of running 32-bit applcations in sysfs
  arm64: Hook up cmdline parameter to allow mismatched 32-bit EL0

 .../ABI/testing/sysfs-devices-system-cpu      |  8 ++
 .../admin-guide/kernel-parameters.txt         |  7 ++
 arch/arm64/include/asm/cpufeature.h           |  3 +
 arch/arm64/kernel/cpufeature.c                | 80 ++++++++++++++++++-
 arch/arm64/kernel/process.c                   | 21 ++++-
 arch/arm64/kernel/signal.c                    | 26 ++++++
 arch/arm64/kvm/arm.c                          | 27 +++++++
 7 files changed, 168 insertions(+), 4 deletions(-)

Comments

Suren Baghdasaryan Oct. 29, 2020, 6:42 p.m. UTC | #1
On Tue, Oct 27, 2020 at 2:51 PM Will Deacon <will@kernel.org> wrote:
>
> Hi all,
>
> I was playing around with the asymmetric AArch32 RFCv2 from Qais:
>
> https://lore.kernel.org/r/20201021104611.2744565-1-qais.yousef@arm.com
>
> and ended up writing my own implementation this afternoon. I think it's
> smaller, simpler and easier to work with. In particular:
>
>   * I got rid of the sysctl in favour of a plain cmdline parameter
>   * I don't have a new CPU capability
>   * I don't have a new thread flag
>   * I expose a cpumask to userspace via sysfs to identify the 32-bit CPUs
>
> Anyway, I don't think we should merge this stuff (other than the first patch)
> until we've figured out what's going on in Android, but I wanted to get
> this out as something which we might be able to build on.

Hi Will,
Thanks for posting this series. Just to provide some more background,
on Android, 64-bit apps are forked from zygote64 process and 32-bit
ones from zygote. So normally we could handle the issues with such
asymmetric architectures using cpuset cgroup and placing zygote
process (and consequently all its children) in a separate cgroup with
affinity mask that includes only 32-bit capable cores. We would have
to take care of the affinity mask for such tasks during task
migrations, but it's still doable from userspace. However there are
64-bit apps which fork 32-bit processes and that is the case which is
unclear how to handle without help from the kernel. Still discussing
possible solutions. CC'ing more people from Android to be in the loop.
Thanks,
Suren.



>
> Cheers,
>
> Will
>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Marc Zyngier <maz@kernel.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Morten Rasmussen <morten.rasmussen@arm.com>
> Cc: Qais Yousef <qais.yousef@arm.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: kernel-team@android.com
>
> --->8
>
> Qais Yousef (1):
>   KVM: arm64: Handle Asymmetric AArch32 systems
>
> Will Deacon (5):
>   arm64: Allow mismatched 32-bit EL0 support
>   KVM: arm64: Kill 32-bit vCPUs on systems with mismatched EL0 support
>   arm64: Kill 32-bit applications scheduled on 64-bit-only CPUs
>   arm64: Advertise CPUs capable of running 32-bit applcations in sysfs
>   arm64: Hook up cmdline parameter to allow mismatched 32-bit EL0
>
>  .../ABI/testing/sysfs-devices-system-cpu      |  8 ++
>  .../admin-guide/kernel-parameters.txt         |  7 ++
>  arch/arm64/include/asm/cpufeature.h           |  3 +
>  arch/arm64/kernel/cpufeature.c                | 80 ++++++++++++++++++-
>  arch/arm64/kernel/process.c                   | 21 ++++-
>  arch/arm64/kernel/signal.c                    | 26 ++++++
>  arch/arm64/kvm/arm.c                          | 27 +++++++
>  7 files changed, 168 insertions(+), 4 deletions(-)
>
> --
> 2.29.0.rc2.309.g374f81d7ae-goog
>
Will Deacon Oct. 29, 2020, 10:17 p.m. UTC | #2
Hi Suren,

On Thu, Oct 29, 2020 at 11:42:04AM -0700, Suren Baghdasaryan wrote:
> On Tue, Oct 27, 2020 at 2:51 PM Will Deacon <will@kernel.org> wrote:
> > I was playing around with the asymmetric AArch32 RFCv2 from Qais:
> >
> > https://lore.kernel.org/r/20201021104611.2744565-1-qais.yousef@arm.com
> >
> > and ended up writing my own implementation this afternoon. I think it's
> > smaller, simpler and easier to work with. In particular:
> >
> >   * I got rid of the sysctl in favour of a plain cmdline parameter
> >   * I don't have a new CPU capability
> >   * I don't have a new thread flag
> >   * I expose a cpumask to userspace via sysfs to identify the 32-bit CPUs
> >
> > Anyway, I don't think we should merge this stuff (other than the first patch)
> > until we've figured out what's going on in Android, but I wanted to get
> > this out as something which we might be able to build on.
> 
> Thanks for posting this series. Just to provide some more background,
> on Android, 64-bit apps are forked from zygote64 process and 32-bit
> ones from zygote. So normally we could handle the issues with such
> asymmetric architectures using cpuset cgroup and placing zygote
> process (and consequently all its children) in a separate cgroup with
> affinity mask that includes only 32-bit capable cores. We would have
> to take care of the affinity mask for such tasks during task
> migrations, but it's still doable from userspace. However there are
> 64-bit apps which fork 32-bit processes and that is the case which is
> unclear how to handle without help from the kernel. Still discussing
> possible solutions. CC'ing more people from Android to be in the loop.

Thanks for joining in and adding others. Perhaps one thing we could do
on top of this series is to restrict the affinity mask when execve()ing
a 32-bit application. The major problem I have with that is that it
goes directly against the man page for sched_setaffinity(), which states:

  | A child created via fork(2) inherits its parent's CPU affinity mask.
  | The affinity mask is preserved across an execve(2)

so there's a risk of regression if applications rely on the mask being
preserved.

Will
Marc Zyngier Oct. 30, 2020, 4:16 p.m. UTC | #3
On Tue, 27 Oct 2020 21:51:12 +0000, Will Deacon wrote:
> I was playing around with the asymmetric AArch32 RFCv2 from Qais:
> 
> https://lore.kernel.org/r/20201021104611.2744565-1-qais.yousef@arm.com
> 
> and ended up writing my own implementation this afternoon. I think it's
> smaller, simpler and easier to work with. In particular:
> 
> [...]

Applied to next, thanks!

[1/1] KVM: arm64: Handle Asymmetric AArch32 systems
      commit: 22f553842b14a1289c088a79a67fb479d3fa2a4e

Cheers,

	M.
Will Deacon Oct. 30, 2020, 4:24 p.m. UTC | #4
On Fri, Oct 30, 2020 at 04:16:48PM +0000, Marc Zyngier wrote:
> On Tue, 27 Oct 2020 21:51:12 +0000, Will Deacon wrote:
> > I was playing around with the asymmetric AArch32 RFCv2 from Qais:
> > 
> > https://lore.kernel.org/r/20201021104611.2744565-1-qais.yousef@arm.com
> > 
> > and ended up writing my own implementation this afternoon. I think it's
> > smaller, simpler and easier to work with. In particular:
> > 
> > [...]
> 
> Applied to next, thanks!
> 
> [1/1] KVM: arm64: Handle Asymmetric AArch32 systems
>       commit: 22f553842b14a1289c088a79a67fb479d3fa2a4e

Got to be honest, this gave me a heart attack at first! First patch is
good though, just please don't apply the rest of this stuff :)

Will
Marc Zyngier Oct. 30, 2020, 5:04 p.m. UTC | #5
On 2020-10-30 16:24, Will Deacon wrote:
> On Fri, Oct 30, 2020 at 04:16:48PM +0000, Marc Zyngier wrote:
>> On Tue, 27 Oct 2020 21:51:12 +0000, Will Deacon wrote:
>> > I was playing around with the asymmetric AArch32 RFCv2 from Qais:
>> >
>> > https://lore.kernel.org/r/20201021104611.2744565-1-qais.yousef@arm.com
>> >
>> > and ended up writing my own implementation this afternoon. I think it's
>> > smaller, simpler and easier to work with. In particular:
>> >
>> > [...]
>> 
>> Applied to next, thanks!
>> 
>> [1/1] KVM: arm64: Handle Asymmetric AArch32 systems
>>       commit: 22f553842b14a1289c088a79a67fb479d3fa2a4e
> 
> Got to be honest, this gave me a heart attack at first! First patch is
> good though, just please don't apply the rest of this stuff :)

The only reason I took this patch is that it actually prevent these
silly configuration from being actively harmful. As for the rest,
I have no desire to touch them!

         M.