diff mbox series

[kvm-unit-tests] arm64: Default to 4K translation granule

Message ID 20240502074156.1346049-1-oliver.upton@linux.dev (mailing list archive)
State New, archived
Headers show
Series [kvm-unit-tests] arm64: Default to 4K translation granule | expand

Commit Message

Oliver Upton May 2, 2024, 7:41 a.m. UTC
Some arm64 implementations in the wild, like the Apple parts, do not
support the 64K translation granule. This can be a bit annoying when
running with the defaults on such hardware, as every test fails
before getting the MMU turned on.

Switch the default page size to 4K with the intention of having the
default setting be the most widely applicable one.

Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
---
 configure | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

Comments

Thomas Huth May 2, 2024, 7:58 a.m. UTC | #1
On 02/05/2024 09.41, Oliver Upton wrote:
> Some arm64 implementations in the wild, like the Apple parts, do not
> support the 64K translation granule. This can be a bit annoying when
> running with the defaults on such hardware, as every test fails
> before getting the MMU turned on.
> 
> Switch the default page size to 4K with the intention of having the
> default setting be the most widely applicable one.

What about using "getconf PAGESIZE" to get the page size of the host 
environment? Would that work, too?

  Thomas
Alexandru Elisei May 2, 2024, 8:53 a.m. UTC | #2
Hi,

On Thu, May 02, 2024 at 09:58:39AM +0200, Thomas Huth wrote:
> On 02/05/2024 09.41, Oliver Upton wrote:
> > Some arm64 implementations in the wild, like the Apple parts, do not
> > support the 64K translation granule. This can be a bit annoying when
> > running with the defaults on such hardware, as every test fails
> > before getting the MMU turned on.
> > 
> > Switch the default page size to 4K with the intention of having the
> > default setting be the most widely applicable one.
> 
> What about using "getconf PAGESIZE" to get the page size of the host
> environment? Would that work, too?

That would definitely make the tests run,  but I'm worried about
reproducibility. If you want to re-run a failed test on a different
machine, this introduces a new variable, the host's page size, which might
be different between the machines. Or, if you want to look it another way,
another configuration knob that the user has to be aware of and control.

Unless there's a system out there that doesn't support 4K pages, I'm in
favour of having 4K the default.

Thanks,
Alex

> 
>  Thomas
> 
>
Andrew Jones May 2, 2024, 9:05 a.m. UTC | #3
On Thu, May 02, 2024 at 07:41:56AM GMT, Oliver Upton wrote:
> Some arm64 implementations in the wild, like the Apple parts, do not
> support the 64K translation granule. This can be a bit annoying when
> running with the defaults on such hardware, as every test fails
> before getting the MMU turned on.
> 
> Switch the default page size to 4K with the intention of having the
> default setting be the most widely applicable one.

Yeah, this makes sense. The original 64k default didn't have any real
justification. I only selected it since I had been drinking the "64k
pages will rule the world" Kool-Aid for too long. The effects of that
Kool-Aid have already long worn off though, so I'll get this merged.

Thanks,
drew

> 
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
> ---
>  configure | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/configure b/configure
> index 49f047cb2d7d..4ac2ff3e6106 100755
> --- a/configure
> +++ b/configure
> @@ -75,7 +75,7 @@ usage() {
>  	                           (s390x only)
>  	    --page-size=PAGE_SIZE
>  	                           Specify the page size (translation granule) (4k, 16k or
> -	                           64k, default is 64k, arm64 only)
> +	                           64k, default is 4k, arm64 only)
>  	    --earlycon=EARLYCON
>  	                           Specify the UART name, type and address (optional, arm and
>  	                           arm64 only). The specified address will overwrite the UART
> @@ -243,11 +243,7 @@ if [ "$efi" ] && [ "$arch" = "riscv64" ] && [ -z "$efi_direct" ]; then
>  fi
>  
>  if [ -z "$page_size" ]; then
> -    if [ "$efi" = 'y' ] && [ "$arch" = "arm64" ]; then
> -        page_size="4096"
> -    elif [ "$arch" = "arm64" ]; then
> -        page_size="65536"
> -    elif [ "$arch" = "arm" ]; then
> +    if [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then
>          page_size="4096"
>      fi
>  else
> -- 
> 2.45.0.rc1.225.g2a3ae87e7f-goog
>
Zenghui Yu May 2, 2024, 10:10 a.m. UTC | #4
On 2024/5/2 15:41, Oliver Upton wrote:
> Some arm64 implementations in the wild, like the Apple parts, do not
> support the 64K translation granule. This can be a bit annoying when
> running with the defaults on such hardware, as every test fails
> before getting the MMU turned on.

Yup, I had to manually specify the translation granule before building
(and running) these tests on M1.

./configure --arch=aarch64 --page-size={4k,16k} --cross-prefix=aarch64-elf-

> Switch the default page size to 4K with the intention of having the
> default setting be the most widely applicable one.
> 
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>

Acked-by: Zenghui Yu <zenghui.yu@linux.dev>
Andrew Jones May 2, 2024, 3:29 p.m. UTC | #5
On Thu, May 02, 2024 at 07:41:56AM GMT, Oliver Upton wrote:
> Some arm64 implementations in the wild, like the Apple parts, do not
> support the 64K translation granule. This can be a bit annoying when
> running with the defaults on such hardware, as every test fails
> before getting the MMU turned on.
> 
> Switch the default page size to 4K with the intention of having the
> default setting be the most widely applicable one.
> 
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
> ---
>  configure | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/configure b/configure
> index 49f047cb2d7d..4ac2ff3e6106 100755
> --- a/configure
> +++ b/configure
> @@ -75,7 +75,7 @@ usage() {
>  	                           (s390x only)
>  	    --page-size=PAGE_SIZE
>  	                           Specify the page size (translation granule) (4k, 16k or
> -	                           64k, default is 64k, arm64 only)
> +	                           64k, default is 4k, arm64 only)
>  	    --earlycon=EARLYCON
>  	                           Specify the UART name, type and address (optional, arm and
>  	                           arm64 only). The specified address will overwrite the UART
> @@ -243,11 +243,7 @@ if [ "$efi" ] && [ "$arch" = "riscv64" ] && [ -z "$efi_direct" ]; then
>  fi
>  
>  if [ -z "$page_size" ]; then
> -    if [ "$efi" = 'y' ] && [ "$arch" = "arm64" ]; then
> -        page_size="4096"
> -    elif [ "$arch" = "arm64" ]; then
> -        page_size="65536"
> -    elif [ "$arch" = "arm" ]; then
> +    if [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then
>          page_size="4096"
>      fi
>  else
> -- 
> 2.45.0.rc1.225.g2a3ae87e7f-goog
>

Merged.

Thanks,
drew
Oliver Upton May 2, 2024, 4:08 p.m. UTC | #6
On Thu, May 02, 2024 at 11:05:51AM +0200, Andrew Jones wrote:
> On Thu, May 02, 2024 at 07:41:56AM GMT, Oliver Upton wrote:
> > Some arm64 implementations in the wild, like the Apple parts, do not
> > support the 64K translation granule. This can be a bit annoying when
> > running with the defaults on such hardware, as every test fails
> > before getting the MMU turned on.
> > 
> > Switch the default page size to 4K with the intention of having the
> > default setting be the most widely applicable one.
> 
> I had been drinking the "64k pages will rule the world" Kool-Aid for
> too long.

Hey, your words not mine! :-)

> Kool-Aid have already long worn off though, so I'll get this merged.

Thanks drew.
diff mbox series

Patch

diff --git a/configure b/configure
index 49f047cb2d7d..4ac2ff3e6106 100755
--- a/configure
+++ b/configure
@@ -75,7 +75,7 @@  usage() {
 	                           (s390x only)
 	    --page-size=PAGE_SIZE
 	                           Specify the page size (translation granule) (4k, 16k or
-	                           64k, default is 64k, arm64 only)
+	                           64k, default is 4k, arm64 only)
 	    --earlycon=EARLYCON
 	                           Specify the UART name, type and address (optional, arm and
 	                           arm64 only). The specified address will overwrite the UART
@@ -243,11 +243,7 @@  if [ "$efi" ] && [ "$arch" = "riscv64" ] && [ -z "$efi_direct" ]; then
 fi
 
 if [ -z "$page_size" ]; then
-    if [ "$efi" = 'y' ] && [ "$arch" = "arm64" ]; then
-        page_size="4096"
-    elif [ "$arch" = "arm64" ]; then
-        page_size="65536"
-    elif [ "$arch" = "arm" ]; then
+    if [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then
         page_size="4096"
     fi
 else