diff mbox series

[G/master] UBUNTU: packaging: arm64: introduce a 64KB mem pages flavour called 'generic-64k'

Message ID 20200918140711.60144-1-paolo.pisati@canonical.com
State New
Headers show
Series [G/master] UBUNTU: packaging: arm64: introduce a 64KB mem pages flavour called 'generic-64k' | expand

Commit Message

Paolo Pisati Sept. 18, 2020, 2:07 p.m. UTC
This patch introduces an arm64 64KB pages enabled flavour of the generic kernel,
called 'generic-64k'.

Earlier benchmark with this config have shown an obvious trade-off:


* Performance
- comparing geometic mean of over 35 stress throughput tests we see
    a bogo op throughput increase of 22.0-24.5% with 64K pages compared
    to 4K pages.

* Memory usage:
  - a simple check of memory used after boot shows that 64K pages uses
    around 3.2-3.6x more memory. The amount of memory being shared also
    increases by 15x more.
  - a 32GB machine is seeing about 480MB more memory consumption, or
    ~ 1.5% less free memory.


In short, loss of memory because pages are larger but a large performance win
because of less page table entry references and TLB misses: for machines with
large memory, this flavour could make sense.

Since we are introducing an independent flavour, generic is not affected by this
change.

Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
---
 debian.master/config/annotations              | 34 +++++++++----------
 .../config/arm64/config.common.arm64          |  5 ---
 .../config/arm64/config.flavour.generic       |  9 +++++
 .../config/arm64/config.flavour.generic-64k   | 12 +++++++
 debian.master/config/config.common.ubuntu     |  7 ++--
 debian.master/control.d/vars.generic-64k      |  6 ++++
 debian.master/d-i/kernel-versions             |  1 +
 debian.master/etc/getabis                     |  2 +-
 debian.master/rules.d/arm64.mk                |  4 ++-
 9 files changed, 52 insertions(+), 28 deletions(-)
 create mode 100644 debian.master/config/arm64/config.flavour.generic-64k
 create mode 100644 debian.master/control.d/vars.generic-64k

Comments

Colin King Sept. 18, 2020, 2:17 p.m. UTC | #1
On 18/09/2020 15:07, Paolo Pisati wrote:
> This patch introduces an arm64 64KB pages enabled flavour of the generic kernel,
> called 'generic-64k'.
> 
> Earlier benchmark with this config have shown an obvious trade-off:
> 
> 
> * Performance
> - comparing geometic mean of over 35 stress throughput tests we see
>     a bogo op throughput increase of 22.0-24.5% with 64K pages compared
>     to 4K pages.
> 
> * Memory usage:
>   - a simple check of memory used after boot shows that 64K pages uses
>     around 3.2-3.6x more memory. The amount of memory being shared also
>     increases by 15x more.
>   - a 32GB machine is seeing about 480MB more memory consumption, or
>     ~ 1.5% less free memory.
> 
> 
> In short, loss of memory because pages are larger but a large performance win
> because of less page table entry references and TLB misses: for machines with
> large memory, this flavour could make sense.
> 
> Since we are introducing an independent flavour, generic is not affected by this
> change.
> 
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
> ---
>  debian.master/config/annotations              | 34 +++++++++----------
>  .../config/arm64/config.common.arm64          |  5 ---
>  .../config/arm64/config.flavour.generic       |  9 +++++
>  .../config/arm64/config.flavour.generic-64k   | 12 +++++++
>  debian.master/config/config.common.ubuntu     |  7 ++--
>  debian.master/control.d/vars.generic-64k      |  6 ++++
>  debian.master/d-i/kernel-versions             |  1 +
>  debian.master/etc/getabis                     |  2 +-
>  debian.master/rules.d/arm64.mk                |  4 ++-
>  9 files changed, 52 insertions(+), 28 deletions(-)
>  create mode 100644 debian.master/config/arm64/config.flavour.generic-64k
>  create mode 100644 debian.master/control.d/vars.generic-64k
> 
> diff --git a/debian.master/config/annotations b/debian.master/config/annotations
> index 2f8232c33129..087f83ab378a 100644
> --- a/debian.master/config/annotations
> +++ b/debian.master/config/annotations
> @@ -2083,7 +2083,7 @@ CONFIG_DRM_GMA600                               policy<{'amd64': 'y'}>
>  CONFIG_DRM_GMA3600                              policy<{'amd64': 'y'}>
>  
>  # Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> MSM DRM
> -CONFIG_DRM_MSM                                  policy<{'arm64-generic': 'm', 'armhf': 'm'}>
> +CONFIG_DRM_MSM                                  policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
>  CONFIG_DRM_MSM_REGISTER_LOGGING                 policy<{'arm64': 'n', 'armhf': 'n'}>
>  CONFIG_DRM_MSM_GPU_SUDO                         policy<{'arm64': 'n', 'armhf': 'n'}>
>  CONFIG_DRM_MSM_HDMI_HDCP                        policy<{'arm64': 'y', 'armhf': 'y'}>
> @@ -2695,7 +2695,7 @@ CONFIG_I2C_DEBUG_BUS                            policy<{'amd64': 'n', 'arm64': '
>  CONFIG_I2C_CHARDEV                              note<LP:1417032>
>  
>  # Menu: Device Drivers >> I2C support >> I2C support >> I2C Algorithms
> -CONFIG_I2C_ALGOBIT                              policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
> +CONFIG_I2C_ALGOBIT                              policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
>  CONFIG_I2C_ALGOPCA                              policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  
>  # Menu: Device Drivers >> I2C support >> I2C support >> I2C Hardware Bus support
> @@ -3329,7 +3329,7 @@ CONFIG_INFINIBAND_I40IW                         policy<{'amd64': 'm', 'arm64': '
>  CONFIG_MLX4_INFINIBAND                          policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
>  CONFIG_MLX5_INFINIBAND                          policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
>  CONFIG_INFINIBAND_OCRDMA                        policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
> -CONFIG_INFINIBAND_VMWARE_PVRDMA                 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm'}>
> +CONFIG_INFINIBAND_VMWARE_PVRDMA                 policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm'}>
>  CONFIG_INFINIBAND_USNIC                         policy<{'amd64': 'm'}>
>  CONFIG_INFINIBAND_HNS                           policy<{'arm64': 'm'}>
>  CONFIG_INFINIBAND_HNS_HIP06                     policy<{'arm64': 'y'}>
> @@ -3894,7 +3894,7 @@ CONFIG_MMC_OMAP_HS                              note<boot essential on arm>
>  # Menu: Device Drivers >> MMC/SD/SDIO card support >> Samsung S3C SD/MMC transfer code
>  
>  # Menu: Device Drivers >> MMC/SD/SDIO card support >> Secure Digital Host Controller Interface support
> -CONFIG_MMC_SDHCI                                policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
> +CONFIG_MMC_SDHCI                                policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
>  CONFIG_MMC_SDHCI_PCI                            policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  CONFIG_MMC_RICOH_MMC                            policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}>
>  CONFIG_MMC_SDHCI_ACPI                           policy<{'amd64': 'm', 'arm64': 'm'}>
> @@ -5215,7 +5215,7 @@ CONFIG_NVMEM_BCM_OCOTP                          policy<{'arm64': 'm'}>
>  CONFIG_NVMEM_SUNXI_SID                          policy<{'arm64': 'm'}>
>  CONFIG_UNIPHIER_EFUSE                           policy<{'armhf': 'm'}>
>  CONFIG_NVMEM_VF610_OCOTP                        policy<{'armhf-generic': 'n'}>
> -CONFIG_MESON_EFUSE                              policy<{'arm64': 'm'}>
> +CONFIG_MESON_EFUSE                              policy<{'arm64-generic': 'm'}>
>  CONFIG_MESON_MX_EFUSE                           policy<{'arm64': 'm', 'armhf': 'm'}>
>  CONFIG_NVMEM_SNVS_LPGPR                         policy<{'arm64': 'm', 'armhf-generic': 'm'}>
>  CONFIG_RAVE_SP_EEPROM                           policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
> @@ -5234,7 +5234,7 @@ CONFIG_MICREL_KS8995MA                          policy<{'amd64': 'm', 'arm64': '
>  CONFIG_PLIP                                     policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  CONFIG_XEN_NETDEV_FRONTEND                      policy<{'amd64': 'y', 'arm64': 'y'}>
>  CONFIG_XEN_NETDEV_BACKEND                       policy<{'amd64': 'm', 'arm64': 'm'}>
> -CONFIG_VMXNET3                                  policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 's390x': 'n'}>
> +CONFIG_VMXNET3                                  policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm', 's390x': 'n'}>
>  CONFIG_FUJITSU_ES                               policy<{'amd64': 'm', 'arm64': 'm'}>
>  CONFIG_USB4_NET                                 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  CONFIG_HYPERV_NET                               policy<{'amd64': 'm'}>
> @@ -7328,7 +7328,7 @@ CONFIG_RPMSG_CHAR                               policy<{'amd64': 'm', 'arm64': '
>  CONFIG_RPMSG_MTK_SCP                            policy<{'arm64': 'm', 'armhf': 'm'}>
>  CONFIG_RPMSG_QCOM_GLINK_RPM                     policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  CONFIG_RPMSG_QCOM_GLINK_SMEM                    policy<{'arm64': 'm', 'armhf': 'm'}>
> -CONFIG_RPMSG_QCOM_SMD                           policy<{'arm64-generic': 'm', 'armhf': 'm'}>
> +CONFIG_RPMSG_QCOM_SMD                           policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
>  CONFIG_RPMSG_VIRTIO                             policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
>  
>  # Menu: Device Drivers >> SCSI device support
> @@ -7539,7 +7539,7 @@ CONFIG_MESON_CLK_MEASURE                        policy<{'arm64': 'y', 'armhf': '
>  CONFIG_MESON_GX_SOCINFO                         policy<{'arm64': 'y', 'armhf': 'y'}>
>  CONFIG_MESON_GX_PM_DOMAINS                      policy<{'arm64': 'y', 'armhf': 'y'}>
>  CONFIG_MESON_EE_PM_DOMAINS                      policy<{'arm64': 'y', 'armhf': 'y'}>
> -CONFIG_MESON_SECURE_PM_DOMAINS                  policy<{'arm64': 'y'}>
> +CONFIG_MESON_SECURE_PM_DOMAINS                  policy<{'arm64-generic': 'y'}>
>  CONFIG_MESON_MX_SOCINFO                         policy<{'arm64': 'y', 'armhf': 'y'}>
>  
>  # Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Aspeed SoC drivers
> @@ -7762,8 +7762,8 @@ CONFIG_SPI_DW_PCI                               policy<{'amd64': 'm', 'arm64': '
>  CONFIG_SPI_DW_MMIO                              policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  
>  # Menu: Device Drivers >> SPMI support
> -CONFIG_SPMI                                     policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
> -CONFIG_SPMI_MSM_PMIC_ARB                        policy<{'arm64-generic': 'm', 'armhf': 'm'}>
> +CONFIG_SPMI                                     policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
> +CONFIG_SPMI_MSM_PMIC_ARB                        policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
>  
>  # Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata)
>  CONFIG_ATA                                      policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y', 's390x': 'n'}>
> @@ -7887,14 +7887,14 @@ CONFIG_MEMSTICK_REALTEK_PCI                     policy<{'amd64': 'm', 'arm64': '
>  CONFIG_MEMSTICK_REALTEK_USB                     policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  
>  # Menu: Device Drivers >> Sound card support
> -CONFIG_SOUND                                    policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'y', 'ppc64el': 'm', 's390x': 'n'}>
> +CONFIG_SOUND                                    policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'y', 'ppc64el': 'm', 's390x': 'n'}>
>  CONFIG_SOUND_OSS_CORE_PRECLAIM                  policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}>
>  #
>  CONFIG_SOUND                                    note<not autoloadable on omap>
>  CONFIG_SOUND_OSS_CORE_PRECLAIM                  mark<ENFORCED> note<LP#1105230 LP#1385510>
>  
>  # Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture
> -CONFIG_SND                                      policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
> +CONFIG_SND                                      policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
>  CONFIG_SND_OSSEMUL                              policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}>
>  CONFIG_SND_MIXER_OSS                            policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
>  CONFIG_SND_PCM_OSS                              policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}>
> @@ -8983,7 +8983,7 @@ CONFIG_TEGRA_SOCTHERM                           policy<{'armhf-generic': 'n'}>
>  CONFIG_TEGRA_BPMP_THERMAL                       policy<{'armhf-generic': 'm'}>
>  
>  # Menu: Device Drivers >> Thermal drivers >> Qualcomm thermal drivers
> -CONFIG_QCOM_TSENS                               policy<{'arm64-generic': 'm', 'armhf': 'm'}>
> +CONFIG_QCOM_TSENS                               policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
>  CONFIG_QCOM_SPMI_TEMP_ALARM                     policy<{'arm64': 'm', 'armhf': 'm'}>
>  
>  # Menu: Device Drivers >> Thermal drivers >> STMicroelectronics thermal drivers
> @@ -12701,7 +12701,7 @@ CONFIG_HARDEN_BRANCH_PREDICTOR                  policy<{'arm64': 'y', 'armhf': '
>  CONFIG_HIGHPTE                                  policy<{'armhf': 'y'}>
>  CONFIG_CMDLINE_BOOL                             policy<{'amd64': 'n', 'ppc64el': 'n'}>
>  CONFIG_HIGHMEM                                  policy<{'armhf': 'y'}>
> -CONFIG_FORCE_MAX_ZONEORDER                      policy<{'arm64': '13', 'armhf-generic': '12', 'armhf-generic-lpae': '11', 'ppc64el': '9', 's390x': '9'}>
> +CONFIG_FORCE_MAX_ZONEORDER                      policy<{'arm64-generic': '13', 'arm64-generic-64k': '14', 'armhf-generic': '12', 'armhf-generic-lpae': '11', 'ppc64el': '9', 's390x': '9'}>
>  CONFIG_COMPAT_VDSO                              policy<{'amd64': 'n'}>
>  #
>  CONFIG_RELOCATABLE                              flag<REVIEW>
> @@ -12961,9 +12961,9 @@ CONFIG_VMSPLIT_1G                               policy<{'armhf': 'n'}>
>  # Menu: Processor type and features >> Memory split >> Architecture: x86
>  
>  # Menu: Processor type and features >> Page size >> Architecture: arm64
> -CONFIG_ARM64_4K_PAGES                           policy<{'arm64': 'y'}>
> +CONFIG_ARM64_4K_PAGES                           policy<{'arm64-generic': 'y', 'arm64-generic-64k': 'n'}>
>  CONFIG_ARM64_16K_PAGES                          policy<{'arm64': 'n'}>
> -CONFIG_ARM64_64K_PAGES                          policy<{'arm64': 'n'}>
> +CONFIG_ARM64_64K_PAGES                          policy<{'arm64-generic': 'n', 'arm64-generic-64k': 'y'}>
>  
>  # Menu: Processor type and features >> Page size >> Architecture: powerpc
>  CONFIG_PPC_4K_PAGES                             policy<{'ppc64el': 'n'}>
> @@ -13075,7 +13075,7 @@ CONFIG_TUNE_Z14                                 policy<{'s390x': 'n'}>
>  CONFIG_TUNE_Z15                                 policy<{'s390x': 'y'}>
>  
>  # Menu: Processor type and features >> Virtual address space size >> Architecture: arm64
> -CONFIG_ARM64_VA_BITS_39                         policy<{'arm64': 'n'}>
> +CONFIG_ARM64_VA_BITS_39                         policy<{'arm64-generic': 'n'}>
>  CONFIG_ARM64_VA_BITS_48                         policy<{'arm64': 'y'}>
>  #
>  CONFIG_ARM64_VA_BITS_48                         mark<ENFORCED> note<Cavium ThunderX 2-socket needs a minimum of 41 bits of VA>
> diff --git a/debian.master/config/arm64/config.common.arm64 b/debian.master/config/arm64/config.common.arm64
> index c3e0b9a7232f..ed82d7ae2ec1 100644
> --- a/debian.master/config/arm64/config.common.arm64
> +++ b/debian.master/config/arm64/config.common.arm64
> @@ -21,11 +21,8 @@ CONFIG_APPLICOM=m
>  # CONFIG_ARCH_ALPINE is not set
>  # CONFIG_ARCH_EXYNOS is not set
>  CONFIG_ARCH_MMAP_RND_BITS=18
> -CONFIG_ARCH_MMAP_RND_BITS_MAX=33
> -CONFIG_ARCH_MMAP_RND_BITS_MIN=18
>  CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11
>  CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
> -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
>  CONFIG_ARCH_MXC=y
>  CONFIG_ARCH_SUNXI=y
>  # CONFIG_ARCH_TEGRA is not set
> @@ -167,7 +164,6 @@ CONFIG_FEALNX=m
>  CONFIG_FIREWIRE=m
>  CONFIG_FIREWIRE_NOSY=m
>  CONFIG_FIXED_PHY=y
> -CONFIG_FORCE_MAX_ZONEORDER=13
>  CONFIG_FPGA_BRIDGE=m
>  CONFIG_FPGA_DFL=m
>  CONFIG_FRAME_WARN=1024
> @@ -472,7 +468,6 @@ CONFIG_PCI_PASID=y
>  CONFIG_PCI_PRI=y
>  CONFIG_PCI_QUIRKS=y
>  # CONFIG_PCMCIA is not set
> -CONFIG_PGTABLE_LEVELS=4
>  CONFIG_PHANTOM=m
>  CONFIG_PHONET=m
>  CONFIG_PHYLIB=y
> diff --git a/debian.master/config/arm64/config.flavour.generic b/debian.master/config/arm64/config.flavour.generic
> index bb7773a235d2..22fbe1b310ab 100644
> --- a/debian.master/config/arm64/config.flavour.generic
> +++ b/debian.master/config/arm64/config.flavour.generic
> @@ -1,3 +1,12 @@
>  #
>  # Config options for config.flavour.generic automatically generated by splitconfig.pl
>  #
> +CONFIG_ARCH_MMAP_RND_BITS_MAX=33
> +CONFIG_ARCH_MMAP_RND_BITS_MIN=18
> +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
> +CONFIG_ARM64_4K_PAGES=y
> +# CONFIG_ARM64_64K_PAGES is not set
> +CONFIG_ARM64_CONT_SHIFT=4
> +CONFIG_ARM64_PAGE_SHIFT=12
> +CONFIG_FORCE_MAX_ZONEORDER=13
> +CONFIG_PGTABLE_LEVELS=4
> diff --git a/debian.master/config/arm64/config.flavour.generic-64k b/debian.master/config/arm64/config.flavour.generic-64k
> new file mode 100644
> index 000000000000..689b0359a790
> --- /dev/null
> +++ b/debian.master/config/arm64/config.flavour.generic-64k
> @@ -0,0 +1,12 @@
> +#
> +# Config options for config.flavour.generic-64k automatically generated by splitconfig.pl
> +#
> +CONFIG_ARCH_MMAP_RND_BITS_MAX=29
> +CONFIG_ARCH_MMAP_RND_BITS_MIN=14
> +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=7
> +# CONFIG_ARM64_4K_PAGES is not set
> +CONFIG_ARM64_64K_PAGES=y
> +CONFIG_ARM64_CONT_SHIFT=5
> +CONFIG_ARM64_PAGE_SHIFT=16
> +CONFIG_FORCE_MAX_ZONEORDER=14
> +CONFIG_PGTABLE_LEVELS=3
> diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu
> index d2715906349a..a6f6e6cef775 100644
> --- a/debian.master/config/config.common.ubuntu
> +++ b/debian.master/config/config.common.ubuntu
> @@ -586,14 +586,11 @@ CONFIG_ARC_EMAC_CORE=m
>  CONFIG_ARM=y
>  CONFIG_ARM64=y
>  # CONFIG_ARM64_16K_PAGES is not set
> -CONFIG_ARM64_4K_PAGES=y
> -# CONFIG_ARM64_64K_PAGES is not set
>  CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y
>  CONFIG_ARM64_AMU_EXTN=y
>  CONFIG_ARM64_BTI=y
>  CONFIG_ARM64_BTI_KERNEL=y
>  CONFIG_ARM64_CNP=y
> -CONFIG_ARM64_CONT_SHIFT=4
>  CONFIG_ARM64_CRYPTO=y
>  # CONFIG_ARM64_DEBUG_PRIORITY_MASKING is not set
>  CONFIG_ARM64_E0PD=y
> @@ -617,10 +614,10 @@ CONFIG_ARM64_ERRATUM_858921=y
>  CONFIG_ARM64_HW_AFDBM=y
>  CONFIG_ARM64_LSE_ATOMICS=y
>  CONFIG_ARM64_MODULE_PLTS=y
> -CONFIG_ARM64_PAGE_SHIFT=12
>  CONFIG_ARM64_PAN=y
>  CONFIG_ARM64_PA_BITS=48
>  CONFIG_ARM64_PA_BITS_48=y
> +# CONFIG_ARM64_PA_BITS_52 is not set
>  CONFIG_ARM64_PMEM=y
>  CONFIG_ARM64_PSEUDO_NMI=y
>  CONFIG_ARM64_PTR_AUTH=y
> @@ -634,7 +631,9 @@ CONFIG_ARM64_UAO=y
>  CONFIG_ARM64_USE_LSE_ATOMICS=y
>  CONFIG_ARM64_VA_BITS=48
>  # CONFIG_ARM64_VA_BITS_39 is not set
> +# CONFIG_ARM64_VA_BITS_42 is not set
>  CONFIG_ARM64_VA_BITS_48=y
> +# CONFIG_ARM64_VA_BITS_52 is not set
>  CONFIG_ARM64_VHE=y
>  CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
>  CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
> diff --git a/debian.master/control.d/vars.generic-64k b/debian.master/control.d/vars.generic-64k
> new file mode 100644
> index 000000000000..91eb2863d942
> --- /dev/null
> +++ b/debian.master/control.d/vars.generic-64k
> @@ -0,0 +1,6 @@
> +arch="arm64"
> +supported="Generic 64K pages"
> +target="Geared toward desktop and server systems."
> +desc="=HUMAN= SMP"
> +bootloader="flash-kernel [arm64]"
> +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules"
> diff --git a/debian.master/d-i/kernel-versions b/debian.master/d-i/kernel-versions
> index 6cd90edd0258..d0a73152e03a 100644
> --- a/debian.master/d-i/kernel-versions
> +++ b/debian.master/d-i/kernel-versions
> @@ -7,6 +7,7 @@ armhf	-		generic		-				-	-
>  armhf	-		generic-lpae	-				-	-
>  
>  arm64	-		generic		-				-	-
> +arm64	-		generic-64k		-				-	-
>  
>  ppc64el	-		generic		-				-	-
>  
> diff --git a/debian.master/etc/getabis b/debian.master/etc/getabis
> index 3346da2bc0b1..19e1aa8da3a4 100644
> --- a/debian.master/etc/getabis
> +++ b/debian.master/etc/getabis
> @@ -13,6 +13,6 @@ package_prefixes linux-buildinfo
>  getall armhf generic
>  getall armhf generic-lpae
>  getall amd64 generic lowlatency
> -getall arm64 generic
> +getall arm64 generic generic-64k
>  getall ppc64el generic
>  getall s390x generic
> diff --git a/debian.master/rules.d/arm64.mk b/debian.master/rules.d/arm64.mk
> index 368c2a86e2bf..263a5901ed2c 100644
> --- a/debian.master/rules.d/arm64.mk
> +++ b/debian.master/rules.d/arm64.mk
> @@ -2,9 +2,11 @@ human_arch	= ARMv8
>  build_arch	= arm64
>  header_arch	= arm64
>  defconfig	= defconfig
> -flavours	= generic
> +flavours	= generic generic-64k
>  build_image_generic	= Image.gz
>  kernel_file_generic	= arch/$(build_arch)/boot/Image.gz
> +build_image_generic-64k	= Image.gz
> +kernel_file_generic-64k	= arch/$(build_arch)/boot/Image.gz
>  install_file	= vmlinuz
>  no_dumpfile = true
>  uefi_signed     = true
> 

I'm OK with with. No doubt the name will be quibbled about but lets go
with this.

Acked-by: Colin Ian King <colin.king@canonical.com>
Andrea Righi Sept. 18, 2020, 3:34 p.m. UTC | #2
On Fri, Sep 18, 2020 at 04:07:11PM +0200, Paolo Pisati wrote:
> This patch introduces an arm64 64KB pages enabled flavour of the generic kernel,
> called 'generic-64k'.
> 
> Earlier benchmark with this config have shown an obvious trade-off:
> 
> 
> * Performance
> - comparing geometic mean of over 35 stress throughput tests we see
>     a bogo op throughput increase of 22.0-24.5% with 64K pages compared
>     to 4K pages.
> 
> * Memory usage:
>   - a simple check of memory used after boot shows that 64K pages uses
>     around 3.2-3.6x more memory. The amount of memory being shared also
>     increases by 15x more.
>   - a 32GB machine is seeing about 480MB more memory consumption, or
>     ~ 1.5% less free memory.
> 
> 
> In short, loss of memory because pages are larger but a large performance win
> because of less page table entry references and TLB misses: for machines with
> large memory, this flavour could make sense.
> 
> Since we are introducing an independent flavour, generic is not affected by this
> change.
> 
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>

Looks good to me.

Acked-by: Andrea Righi <andrea.righi@canonical.com>
Paolo Pisati Sept. 22, 2020, 10:11 a.m. UTC | #3
On Fri, Sep 18, 2020 at 04:07:11PM +0200, Paolo Pisati wrote:
> This patch introduces an arm64 64KB pages enabled flavour of the generic kernel,
> called 'generic-64k'.
diff mbox series

Patch

diff --git a/debian.master/config/annotations b/debian.master/config/annotations
index 2f8232c33129..087f83ab378a 100644
--- a/debian.master/config/annotations
+++ b/debian.master/config/annotations
@@ -2083,7 +2083,7 @@  CONFIG_DRM_GMA600                               policy<{'amd64': 'y'}>
 CONFIG_DRM_GMA3600                              policy<{'amd64': 'y'}>
 
 # Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> MSM DRM
-CONFIG_DRM_MSM                                  policy<{'arm64-generic': 'm', 'armhf': 'm'}>
+CONFIG_DRM_MSM                                  policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
 CONFIG_DRM_MSM_REGISTER_LOGGING                 policy<{'arm64': 'n', 'armhf': 'n'}>
 CONFIG_DRM_MSM_GPU_SUDO                         policy<{'arm64': 'n', 'armhf': 'n'}>
 CONFIG_DRM_MSM_HDMI_HDCP                        policy<{'arm64': 'y', 'armhf': 'y'}>
@@ -2695,7 +2695,7 @@  CONFIG_I2C_DEBUG_BUS                            policy<{'amd64': 'n', 'arm64': '
 CONFIG_I2C_CHARDEV                              note<LP:1417032>
 
 # Menu: Device Drivers >> I2C support >> I2C support >> I2C Algorithms
-CONFIG_I2C_ALGOBIT                              policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
+CONFIG_I2C_ALGOBIT                              policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
 CONFIG_I2C_ALGOPCA                              policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 
 # Menu: Device Drivers >> I2C support >> I2C support >> I2C Hardware Bus support
@@ -3329,7 +3329,7 @@  CONFIG_INFINIBAND_I40IW                         policy<{'amd64': 'm', 'arm64': '
 CONFIG_MLX4_INFINIBAND                          policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
 CONFIG_MLX5_INFINIBAND                          policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'm'}>
 CONFIG_INFINIBAND_OCRDMA                        policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
-CONFIG_INFINIBAND_VMWARE_PVRDMA                 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm'}>
+CONFIG_INFINIBAND_VMWARE_PVRDMA                 policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm'}>
 CONFIG_INFINIBAND_USNIC                         policy<{'amd64': 'm'}>
 CONFIG_INFINIBAND_HNS                           policy<{'arm64': 'm'}>
 CONFIG_INFINIBAND_HNS_HIP06                     policy<{'arm64': 'y'}>
@@ -3894,7 +3894,7 @@  CONFIG_MMC_OMAP_HS                              note<boot essential on arm>
 # Menu: Device Drivers >> MMC/SD/SDIO card support >> Samsung S3C SD/MMC transfer code
 
 # Menu: Device Drivers >> MMC/SD/SDIO card support >> Secure Digital Host Controller Interface support
-CONFIG_MMC_SDHCI                                policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
+CONFIG_MMC_SDHCI                                policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
 CONFIG_MMC_SDHCI_PCI                            policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 CONFIG_MMC_RICOH_MMC                            policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}>
 CONFIG_MMC_SDHCI_ACPI                           policy<{'amd64': 'm', 'arm64': 'm'}>
@@ -5215,7 +5215,7 @@  CONFIG_NVMEM_BCM_OCOTP                          policy<{'arm64': 'm'}>
 CONFIG_NVMEM_SUNXI_SID                          policy<{'arm64': 'm'}>
 CONFIG_UNIPHIER_EFUSE                           policy<{'armhf': 'm'}>
 CONFIG_NVMEM_VF610_OCOTP                        policy<{'armhf-generic': 'n'}>
-CONFIG_MESON_EFUSE                              policy<{'arm64': 'm'}>
+CONFIG_MESON_EFUSE                              policy<{'arm64-generic': 'm'}>
 CONFIG_MESON_MX_EFUSE                           policy<{'arm64': 'm', 'armhf': 'm'}>
 CONFIG_NVMEM_SNVS_LPGPR                         policy<{'arm64': 'm', 'armhf-generic': 'm'}>
 CONFIG_RAVE_SP_EEPROM                           policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
@@ -5234,7 +5234,7 @@  CONFIG_MICREL_KS8995MA                          policy<{'amd64': 'm', 'arm64': '
 CONFIG_PLIP                                     policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 CONFIG_XEN_NETDEV_FRONTEND                      policy<{'amd64': 'y', 'arm64': 'y'}>
 CONFIG_XEN_NETDEV_BACKEND                       policy<{'amd64': 'm', 'arm64': 'm'}>
-CONFIG_VMXNET3                                  policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 's390x': 'n'}>
+CONFIG_VMXNET3                                  policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm', 's390x': 'n'}>
 CONFIG_FUJITSU_ES                               policy<{'amd64': 'm', 'arm64': 'm'}>
 CONFIG_USB4_NET                                 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 CONFIG_HYPERV_NET                               policy<{'amd64': 'm'}>
@@ -7328,7 +7328,7 @@  CONFIG_RPMSG_CHAR                               policy<{'amd64': 'm', 'arm64': '
 CONFIG_RPMSG_MTK_SCP                            policy<{'arm64': 'm', 'armhf': 'm'}>
 CONFIG_RPMSG_QCOM_GLINK_RPM                     policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 CONFIG_RPMSG_QCOM_GLINK_SMEM                    policy<{'arm64': 'm', 'armhf': 'm'}>
-CONFIG_RPMSG_QCOM_SMD                           policy<{'arm64-generic': 'm', 'armhf': 'm'}>
+CONFIG_RPMSG_QCOM_SMD                           policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
 CONFIG_RPMSG_VIRTIO                             policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
 
 # Menu: Device Drivers >> SCSI device support
@@ -7539,7 +7539,7 @@  CONFIG_MESON_CLK_MEASURE                        policy<{'arm64': 'y', 'armhf': '
 CONFIG_MESON_GX_SOCINFO                         policy<{'arm64': 'y', 'armhf': 'y'}>
 CONFIG_MESON_GX_PM_DOMAINS                      policy<{'arm64': 'y', 'armhf': 'y'}>
 CONFIG_MESON_EE_PM_DOMAINS                      policy<{'arm64': 'y', 'armhf': 'y'}>
-CONFIG_MESON_SECURE_PM_DOMAINS                  policy<{'arm64': 'y'}>
+CONFIG_MESON_SECURE_PM_DOMAINS                  policy<{'arm64-generic': 'y'}>
 CONFIG_MESON_MX_SOCINFO                         policy<{'arm64': 'y', 'armhf': 'y'}>
 
 # Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Aspeed SoC drivers
@@ -7762,8 +7762,8 @@  CONFIG_SPI_DW_PCI                               policy<{'amd64': 'm', 'arm64': '
 CONFIG_SPI_DW_MMIO                              policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 
 # Menu: Device Drivers >> SPMI support
-CONFIG_SPMI                                     policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
-CONFIG_SPMI_MSM_PMIC_ARB                        policy<{'arm64-generic': 'm', 'armhf': 'm'}>
+CONFIG_SPMI                                     policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm', 'ppc64el': 'm', 's390x': 'n'}>
+CONFIG_SPMI_MSM_PMIC_ARB                        policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
 
 # Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata)
 CONFIG_ATA                                      policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y', 's390x': 'n'}>
@@ -7887,14 +7887,14 @@  CONFIG_MEMSTICK_REALTEK_PCI                     policy<{'amd64': 'm', 'arm64': '
 CONFIG_MEMSTICK_REALTEK_USB                     policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 
 # Menu: Device Drivers >> Sound card support
-CONFIG_SOUND                                    policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'y', 'ppc64el': 'm', 's390x': 'n'}>
+CONFIG_SOUND                                    policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'y', 'ppc64el': 'm', 's390x': 'n'}>
 CONFIG_SOUND_OSS_CORE_PRECLAIM                  policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}>
 #
 CONFIG_SOUND                                    note<not autoloadable on omap>
 CONFIG_SOUND_OSS_CORE_PRECLAIM                  mark<ENFORCED> note<LP#1105230 LP#1385510>
 
 # Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture
-CONFIG_SND                                      policy<{'amd64': 'm', 'arm64-generic': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
+CONFIG_SND                                      policy<{'amd64': 'm', 'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'y', 'ppc64el': 'm'}>
 CONFIG_SND_OSSEMUL                              policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}>
 CONFIG_SND_MIXER_OSS                            policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}>
 CONFIG_SND_PCM_OSS                              policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}>
@@ -8983,7 +8983,7 @@  CONFIG_TEGRA_SOCTHERM                           policy<{'armhf-generic': 'n'}>
 CONFIG_TEGRA_BPMP_THERMAL                       policy<{'armhf-generic': 'm'}>
 
 # Menu: Device Drivers >> Thermal drivers >> Qualcomm thermal drivers
-CONFIG_QCOM_TSENS                               policy<{'arm64-generic': 'm', 'armhf': 'm'}>
+CONFIG_QCOM_TSENS                               policy<{'arm64-generic': 'm', 'arm64-generic-64k': 'm', 'armhf': 'm'}>
 CONFIG_QCOM_SPMI_TEMP_ALARM                     policy<{'arm64': 'm', 'armhf': 'm'}>
 
 # Menu: Device Drivers >> Thermal drivers >> STMicroelectronics thermal drivers
@@ -12701,7 +12701,7 @@  CONFIG_HARDEN_BRANCH_PREDICTOR                  policy<{'arm64': 'y', 'armhf': '
 CONFIG_HIGHPTE                                  policy<{'armhf': 'y'}>
 CONFIG_CMDLINE_BOOL                             policy<{'amd64': 'n', 'ppc64el': 'n'}>
 CONFIG_HIGHMEM                                  policy<{'armhf': 'y'}>
-CONFIG_FORCE_MAX_ZONEORDER                      policy<{'arm64': '13', 'armhf-generic': '12', 'armhf-generic-lpae': '11', 'ppc64el': '9', 's390x': '9'}>
+CONFIG_FORCE_MAX_ZONEORDER                      policy<{'arm64-generic': '13', 'arm64-generic-64k': '14', 'armhf-generic': '12', 'armhf-generic-lpae': '11', 'ppc64el': '9', 's390x': '9'}>
 CONFIG_COMPAT_VDSO                              policy<{'amd64': 'n'}>
 #
 CONFIG_RELOCATABLE                              flag<REVIEW>
@@ -12961,9 +12961,9 @@  CONFIG_VMSPLIT_1G                               policy<{'armhf': 'n'}>
 # Menu: Processor type and features >> Memory split >> Architecture: x86
 
 # Menu: Processor type and features >> Page size >> Architecture: arm64
-CONFIG_ARM64_4K_PAGES                           policy<{'arm64': 'y'}>
+CONFIG_ARM64_4K_PAGES                           policy<{'arm64-generic': 'y', 'arm64-generic-64k': 'n'}>
 CONFIG_ARM64_16K_PAGES                          policy<{'arm64': 'n'}>
-CONFIG_ARM64_64K_PAGES                          policy<{'arm64': 'n'}>
+CONFIG_ARM64_64K_PAGES                          policy<{'arm64-generic': 'n', 'arm64-generic-64k': 'y'}>
 
 # Menu: Processor type and features >> Page size >> Architecture: powerpc
 CONFIG_PPC_4K_PAGES                             policy<{'ppc64el': 'n'}>
@@ -13075,7 +13075,7 @@  CONFIG_TUNE_Z14                                 policy<{'s390x': 'n'}>
 CONFIG_TUNE_Z15                                 policy<{'s390x': 'y'}>
 
 # Menu: Processor type and features >> Virtual address space size >> Architecture: arm64
-CONFIG_ARM64_VA_BITS_39                         policy<{'arm64': 'n'}>
+CONFIG_ARM64_VA_BITS_39                         policy<{'arm64-generic': 'n'}>
 CONFIG_ARM64_VA_BITS_48                         policy<{'arm64': 'y'}>
 #
 CONFIG_ARM64_VA_BITS_48                         mark<ENFORCED> note<Cavium ThunderX 2-socket needs a minimum of 41 bits of VA>
diff --git a/debian.master/config/arm64/config.common.arm64 b/debian.master/config/arm64/config.common.arm64
index c3e0b9a7232f..ed82d7ae2ec1 100644
--- a/debian.master/config/arm64/config.common.arm64
+++ b/debian.master/config/arm64/config.common.arm64
@@ -21,11 +21,8 @@  CONFIG_APPLICOM=m
 # CONFIG_ARCH_ALPINE is not set
 # CONFIG_ARCH_EXYNOS is not set
 CONFIG_ARCH_MMAP_RND_BITS=18
-CONFIG_ARCH_MMAP_RND_BITS_MAX=33
-CONFIG_ARCH_MMAP_RND_BITS_MIN=18
 CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11
 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
 CONFIG_ARCH_MXC=y
 CONFIG_ARCH_SUNXI=y
 # CONFIG_ARCH_TEGRA is not set
@@ -167,7 +164,6 @@  CONFIG_FEALNX=m
 CONFIG_FIREWIRE=m
 CONFIG_FIREWIRE_NOSY=m
 CONFIG_FIXED_PHY=y
-CONFIG_FORCE_MAX_ZONEORDER=13
 CONFIG_FPGA_BRIDGE=m
 CONFIG_FPGA_DFL=m
 CONFIG_FRAME_WARN=1024
@@ -472,7 +468,6 @@  CONFIG_PCI_PASID=y
 CONFIG_PCI_PRI=y
 CONFIG_PCI_QUIRKS=y
 # CONFIG_PCMCIA is not set
-CONFIG_PGTABLE_LEVELS=4
 CONFIG_PHANTOM=m
 CONFIG_PHONET=m
 CONFIG_PHYLIB=y
diff --git a/debian.master/config/arm64/config.flavour.generic b/debian.master/config/arm64/config.flavour.generic
index bb7773a235d2..22fbe1b310ab 100644
--- a/debian.master/config/arm64/config.flavour.generic
+++ b/debian.master/config/arm64/config.flavour.generic
@@ -1,3 +1,12 @@ 
 #
 # Config options for config.flavour.generic automatically generated by splitconfig.pl
 #
+CONFIG_ARCH_MMAP_RND_BITS_MAX=33
+CONFIG_ARCH_MMAP_RND_BITS_MIN=18
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
+CONFIG_ARM64_4K_PAGES=y
+# CONFIG_ARM64_64K_PAGES is not set
+CONFIG_ARM64_CONT_SHIFT=4
+CONFIG_ARM64_PAGE_SHIFT=12
+CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_PGTABLE_LEVELS=4
diff --git a/debian.master/config/arm64/config.flavour.generic-64k b/debian.master/config/arm64/config.flavour.generic-64k
new file mode 100644
index 000000000000..689b0359a790
--- /dev/null
+++ b/debian.master/config/arm64/config.flavour.generic-64k
@@ -0,0 +1,12 @@ 
+#
+# Config options for config.flavour.generic-64k automatically generated by splitconfig.pl
+#
+CONFIG_ARCH_MMAP_RND_BITS_MAX=29
+CONFIG_ARCH_MMAP_RND_BITS_MIN=14
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=7
+# CONFIG_ARM64_4K_PAGES is not set
+CONFIG_ARM64_64K_PAGES=y
+CONFIG_ARM64_CONT_SHIFT=5
+CONFIG_ARM64_PAGE_SHIFT=16
+CONFIG_FORCE_MAX_ZONEORDER=14
+CONFIG_PGTABLE_LEVELS=3
diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu
index d2715906349a..a6f6e6cef775 100644
--- a/debian.master/config/config.common.ubuntu
+++ b/debian.master/config/config.common.ubuntu
@@ -586,14 +586,11 @@  CONFIG_ARC_EMAC_CORE=m
 CONFIG_ARM=y
 CONFIG_ARM64=y
 # CONFIG_ARM64_16K_PAGES is not set
-CONFIG_ARM64_4K_PAGES=y
-# CONFIG_ARM64_64K_PAGES is not set
 CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y
 CONFIG_ARM64_AMU_EXTN=y
 CONFIG_ARM64_BTI=y
 CONFIG_ARM64_BTI_KERNEL=y
 CONFIG_ARM64_CNP=y
-CONFIG_ARM64_CONT_SHIFT=4
 CONFIG_ARM64_CRYPTO=y
 # CONFIG_ARM64_DEBUG_PRIORITY_MASKING is not set
 CONFIG_ARM64_E0PD=y
@@ -617,10 +614,10 @@  CONFIG_ARM64_ERRATUM_858921=y
 CONFIG_ARM64_HW_AFDBM=y
 CONFIG_ARM64_LSE_ATOMICS=y
 CONFIG_ARM64_MODULE_PLTS=y
-CONFIG_ARM64_PAGE_SHIFT=12
 CONFIG_ARM64_PAN=y
 CONFIG_ARM64_PA_BITS=48
 CONFIG_ARM64_PA_BITS_48=y
+# CONFIG_ARM64_PA_BITS_52 is not set
 CONFIG_ARM64_PMEM=y
 CONFIG_ARM64_PSEUDO_NMI=y
 CONFIG_ARM64_PTR_AUTH=y
@@ -634,7 +631,9 @@  CONFIG_ARM64_UAO=y
 CONFIG_ARM64_USE_LSE_ATOMICS=y
 CONFIG_ARM64_VA_BITS=48
 # CONFIG_ARM64_VA_BITS_39 is not set
+# CONFIG_ARM64_VA_BITS_42 is not set
 CONFIG_ARM64_VA_BITS_48=y
+# CONFIG_ARM64_VA_BITS_52 is not set
 CONFIG_ARM64_VHE=y
 CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
 CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
diff --git a/debian.master/control.d/vars.generic-64k b/debian.master/control.d/vars.generic-64k
new file mode 100644
index 000000000000..91eb2863d942
--- /dev/null
+++ b/debian.master/control.d/vars.generic-64k
@@ -0,0 +1,6 @@ 
+arch="arm64"
+supported="Generic 64K pages"
+target="Geared toward desktop and server systems."
+desc="=HUMAN= SMP"
+bootloader="flash-kernel [arm64]"
+provides="kvm-api-4, redhat-cluster-modules, ivtv-modules"
diff --git a/debian.master/d-i/kernel-versions b/debian.master/d-i/kernel-versions
index 6cd90edd0258..d0a73152e03a 100644
--- a/debian.master/d-i/kernel-versions
+++ b/debian.master/d-i/kernel-versions
@@ -7,6 +7,7 @@  armhf	-		generic		-				-	-
 armhf	-		generic-lpae	-				-	-
 
 arm64	-		generic		-				-	-
+arm64	-		generic-64k		-				-	-
 
 ppc64el	-		generic		-				-	-
 
diff --git a/debian.master/etc/getabis b/debian.master/etc/getabis
index 3346da2bc0b1..19e1aa8da3a4 100644
--- a/debian.master/etc/getabis
+++ b/debian.master/etc/getabis
@@ -13,6 +13,6 @@  package_prefixes linux-buildinfo
 getall armhf generic
 getall armhf generic-lpae
 getall amd64 generic lowlatency
-getall arm64 generic
+getall arm64 generic generic-64k
 getall ppc64el generic
 getall s390x generic
diff --git a/debian.master/rules.d/arm64.mk b/debian.master/rules.d/arm64.mk
index 368c2a86e2bf..263a5901ed2c 100644
--- a/debian.master/rules.d/arm64.mk
+++ b/debian.master/rules.d/arm64.mk
@@ -2,9 +2,11 @@  human_arch	= ARMv8
 build_arch	= arm64
 header_arch	= arm64
 defconfig	= defconfig
-flavours	= generic
+flavours	= generic generic-64k
 build_image_generic	= Image.gz
 kernel_file_generic	= arch/$(build_arch)/boot/Image.gz
+build_image_generic-64k	= Image.gz
+kernel_file_generic-64k	= arch/$(build_arch)/boot/Image.gz
 install_file	= vmlinuz
 no_dumpfile = true
 uefi_signed     = true