StarlingX: Enablement On Arm Platform¶
Storyboard: #2010739
The objective of this spec is to port and enable StarlingX to support Arm architecture platform.
Problem description¶
The Arm platform has been widely used more and more, cloud providers and independent vendors now can provide various Arm platforms, e.g., AWS, Google and Ampere. Arm platform is widely used in edge/cloud servers, IoT and embedded systems. For now StarlingX only works on x86 platform, it assumes x86 is the only cpu architecture in many places, including build system(Debian based), pre-built packages, container images, package meta data, bootstrap scripts, etc. It can’t work on Arm platform without porting work.
Use Cases¶
After the enablement on Arm platform, the user will be able to install and deploy StarlingX on validated Arm architecture servers, Telecommunication operators have more choices in hardware servers.
Proposed change¶
The proposed change here is to extend the support to Arm64 architecture, which will modify the StarlingX Debian build system to add support native builds on Arm64 servers, modify the package lists, container images, package meta data, bootstrap scripts and so on to also handle for Arm architecture, and the produced runtime will be validated using Ampere Altra Processor based servers.
The change will also include adding documentations of the support for Arm64 architecture.
Alternatives¶
Cross-compile for Arm on x86 platform, which would be more difficult and need more effort. On the other hand, we have Arm servers for native builds provided by Arm company, so support for native builds is the preferred method.
Data model impact¶
None
REST API impact¶
None
Security impact¶
Secure boot support will be disabled on Arm and need extra work to investigate and re-implement for Arm platform.
Other end user impact¶
For x86_64 end user: None
For Arm64 end user: there will be docs for Arm64 for these new users.
Performance Impact¶
For x86_64: None
For Arm64: the performance is not likely to be the same as on x86_64.
Other deployer impact¶
The documentation will be changed to add Arm64 support, and the deployer needs choose between one of the two supported architectures before deployment.
Developer impact¶
The documentation for developers (developer guide) will be updated with detail items of the impact, e.g.
Avoid hardcoded arch names like ‘x86-64’ or ‘amd64’ in the source codes.
Consider if there are any different patches or behavior for x86 and Arm.
Different package lists for x86 and Arm.
Different container image for x86 and Arm.
Upgrade impact¶
None
Implementation¶
Assignee(s)¶
Primary assignee:
Jackie Huang (jackie-huang)
Other contributors:
Tianyu Li (tianyuli)
Repos Impacted¶
starlingx/ansible-playbooks
starlingx/config
starlingx/containers
starlingx/fault
starlingx/ha
starlingx/integ
starlingx/kernel
starlingx/metal
starlingx/stx-puppet
starlingx/tools
starlingx/utilities
starlingx/virt
starlintx/root
starlingx/jenkins-pipelines
starlingx/app-harbor
starlingx/app-istio
starlingx/app-kubernetes-power-manager
starlingx/app-kubevirt
starlingx/app-node-feature-discovery
starlingx/app-oran-o2
starlingx/app-security-profiles-operator
starlingx/app-sriov-fec-operator
starlingx/app-sts-silicom
starlingx/audit-armada-app
starlingx/cert-manager-armada-app
starlingx/metrics-server-armada-app
starlingx/monitor-armada-app
starlingx/nginx-ingress-controller-armada-app
starlingx/oidc-auth-armada-app
starlingx/openstack-armada-app
starlingx/platform-armada-app
starlingx/portieris-armada-app
starlingx/ptp-notification-armada-app
starlingx/snmp-armada-app
starlingx/vault-armada-app
Work Items¶
StarlingX Debian Build Environment: Setup on Native Arm64 Server¶
Arm company provides the HPE ProLiant RL300 Gen11 servers with Amper Altra Processor.
Extend LAT-SDK to support Arm64.
Build LAT-SDK from wrlinux with BSP qemuarm64 on Arm64 server.
Configure the build environment on Arm64 server.
Rebuild all the container images on Arm64 server, for stx-lat-tool, change the dockerfile to use the LAT-SDK built from qemuarm64.
StarlingX Debian Build System: Extend to support Arm64 architecture¶
Build-tools¶
The packages lists and image yaml files may differ for different arch, the build-tools should support arch specific lists and files, which will be named with suffix like _arm64, then the build-tools will check the host arch, and the files named with arch suffix will be used instead of the non-arch-specific files.
So the supported package lists and files will include:
base-bullseye.lst
base-bullseye.yaml
base-bullseye_arm64.lst
base-bullseye_arm64.yaml
base-initramfs-bullseye.yaml
base-initramfs-bullseye_arm64.yaml
debian-image.inc
debian-image_arm64.inc
debian_iso_image.inc
debian_iso_image_arm64.inc
debian_pkg_dirs
debian_pkg_dirs_arm64
debian_pkg_dirs_installer
debian_pkg_dirs_installer_arm64
debian_pkg_dirs_rt
debian_pkg_dirs_rt_arm64
os-std.lst
os-std_arm64.lst
Package meta data¶
The items in dl_path/dl_files in meta_data.yaml may have different values and the patches in the patches or deb_patches directory may be different for arm64 arch, the extend change will allow multiple dl_path/dl_files items exist in meta_data.yaml, and multiple series files in patches or deb_patches directories exist, and the ones with arch suffix will be used instead of the non-arch-specific ones.
As an example, the supported meta data will look like:
e.g. in meta_data.yaml
dl_files:
pkg-file-amd64.tar.gz:
topdir: pkg-amd64
url: https://path/to/pkg-file-amd64.tar.gz
sha256sum: <sha256sum value>
dl_files_arm64:
pkg-file-arm64.tar.gz:
topdir: pkg-arm64
url: https://path/to/pkg-file-arm64.tar.gz
sha256sum: <sha256sum value>
dl_path:
name: pkg-name-amd64.tar.gz
url: https://path/to/pkg-name-amd64.tar.gz
sha256sum: <sha256sum value>
dl_path_arm64:
name: pkg-name-arm64.tar.gz
url: https://path/to/pkg-name-arm64.tar.gz
sha256sum: <sha256sum value>
e.g. for patches/deb_patches
deb_patches
├── 0001-deb-patch1.patch
├── 0002-deb-patch2.patch
├── 0003-arm64-deb-patch1.patch
├── series
└── series_arm64
patches
├── 0001-patch1.patch
├── 0002-patch2.patch
├── 0002-arm64-patch1.patch
├── series
└── series_arm64
Package deb files¶
control: extend some of the packages to support Arm64 architecture.
rules: use arch variable to replace hardcoded arch names.
Container images¶
Some OpenSource container images don’t have arm64 on the original registry, need to use ones on different registry url or rebuild them for Arm64 and push to different registry.
In ansible playbook, a new task will be added to check the arch and reset the images url.
Existing docker files may not support Arm64 and will need to be ported.
Docker image and python wheel build scripts in starlingx/root will need to be extended to support multiple architectures.
Secure boot support¶
The secure boot support will be disabled in this implementation on Arm64.
Extra work is needed to investigate and re-implement the support for secure boot on Arm64 architecture (in another Story/Spec).
Dependencies¶
Arm company provides the HPE ProLiant RL300 Gen11 servers with Amper Altra Processor.
Extend LAT-SDK to support Arm64.
Build LAT-SDK in wrlinux with BSP qemuarm64 on Arm64 server.
Testing¶
Build¶
Build packages and image on x86 platform to ensure there is no impact after the changes for Arm64.
Build packages and image on Arm64 platform.
Build docker images on Arm64 platform
System configuration¶
The system deployment configurations that we are assuming for testing are:
AIO-SX on x86-64 platform
AIO-SX on Arm64 platform
AIO-SX with Low Latency(LL) on Arm64 platform
AIO-DX on Arm64 platforms
AIO-DX(LL) on Arm64 platforms
Standard (2+2) on Arm64 platform
Standard (2+2) on Arm64 platform
DC (AIO-DX for Central + 2 sub-cloud with AIO-SX)
DC (AIO-DX-LL for Central + 2 sub-cloud with AIO-SX-LL)
Documentation Impact¶
The documentation will need to be changed to add notes about Arm support, validated Arm servers, difference between x86 and Arm platform, known issues, limitations and etc.
References¶
History¶
Release Name |
Description |
---|---|
stx-9.0 |
Introduced |