|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [for-4.17 3/3] automation: Add a new job for testing boot time cpupools on arm64
On Fri, 2 Sep 2022, Michal Orzel wrote:
> Add a new test job qemu-smoke-arm64-gcc-boot-cpupools that will execute
> script qemu-smoke-arm64.sh to test boot time cpupools feature.
> Enable CONFIG_BOOT_TIME_CPUPOOLS for the arm64 build and add a new test
> case in qemu-smoke-arm64.sh that if selected will:
> - create a device tree cpupool node with cpu@1
> - assign created cpupool to domU0
> - add a check in dom0 xen.start to see if domU is assigned a Pool-1
>
> Take the opportunity to refactor the qemu-smoke-arm64.sh script as
> follows:
> - use domU_check to store the test's commands to be run from domU
> - use dom0_check to store the test's commands to be run from dom0
> - use fdtput instead of sed to perform dtb modifications
> - use more meaningful messages for "passed" variable. This way we can
> grep for messages reported either by domU or dom0 and get rid of
> assumption that tests can only be run from domU
>
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
> ---
> automation/gitlab-ci/test.yaml | 19 +++++++++++++++
> automation/scripts/build | 3 ++-
> automation/scripts/qemu-smoke-arm64.sh | 33 +++++++++++++++++++-------
> 3 files changed, 45 insertions(+), 10 deletions(-)
>
> diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
> index 07209820b474..d899b3bdbf7a 100644
> --- a/automation/gitlab-ci/test.yaml
> +++ b/automation/gitlab-ci/test.yaml
> @@ -100,6 +100,25 @@ qemu-smoke-arm64-gcc-staticmem:
> tags:
> - arm64
>
> +qemu-smoke-arm64-gcc-boot-cpupools:
> + extends: .test-jobs-common
> + variables:
> + CONTAINER: debian:unstable-arm64v8
> + script:
> + - ./automation/scripts/qemu-smoke-arm64.sh boot-cpupools 2>&1 | tee
> qemu-smoke-arm64.log
> + needs:
> + - alpine-3.12-gcc-arm64
> + - alpine-3.12-arm64-rootfs-export
> + - kernel-5.19-arm64-export
> + - qemu-system-aarch64-6.0.0-arm64-export
> + artifacts:
> + paths:
> + - smoke.serial
> + - '*.log'
> + when: always
> + tags:
> + - arm64
> +
> qemu-smoke-arm32-gcc:
> extends: .test-jobs-common
> variables:
> diff --git a/automation/scripts/build b/automation/scripts/build
> index 2b9f2d2b541a..2f15ab3198e6 100755
> --- a/automation/scripts/build
> +++ b/automation/scripts/build
> @@ -19,7 +19,8 @@ else
> echo "
> CONFIG_EXPERT=y
> CONFIG_UNSUPPORTED=y
> -CONFIG_STATIC_MEMORY=y" > xen/.config
> +CONFIG_STATIC_MEMORY=y
> +CONFIG_BOOT_TIME_CPUPOOLS=y" > xen/.config
> make -j$(nproc) -C xen olddefconfig
> else
> make -j$(nproc) -C xen defconfig
> diff --git a/automation/scripts/qemu-smoke-arm64.sh
> b/automation/scripts/qemu-smoke-arm64.sh
> index 7ac96027760d..c2184850293c 100755
> --- a/automation/scripts/qemu-smoke-arm64.sh
> +++ b/automation/scripts/qemu-smoke-arm64.sh
> @@ -4,20 +4,22 @@ set -ex
>
> test_variant=$1
>
> -passed="passed"
> -check="
> +if [ -z "${test_variant}" ]; then
> + passed="ping test passed"
> + domU_check="
> until ifconfig eth0 192.168.0.2 &> /dev/null && ping -c 10 192.168.0.1; do
> sleep 30
> done
> echo \"${passed}\"
> "
> +fi
>
> if [[ "${test_variant}" == "static-mem" ]]; then
> # Memory range that is statically allocated to DOM1
> domu_base="50000000"
> domu_size="10000000"
> passed="${test_variant} test passed"
> - check="
> + domU_check="
> current=\$(hexdump -e '16/1 \"%02x\"'
> /proc/device-tree/memory@${domu_base}/reg 2>/dev/null)
> expected=$(printf \"%016x%016x\" 0x${domu_base} 0x${domu_size})
> if [[ \"\${expected}\" == \"\${current}\" ]]; then
> @@ -42,11 +44,23 @@ curl -fsSLO
> https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom
> -cpu cortex-a57 -machine type=virt \
> -m 1024 -smp 2 -display none \
> -machine dumpdtb=binaries/virt-gicv2.dtb
> -# XXX disable pl061 to avoid Linux crash
> -dtc -I dtb -O dts binaries/virt-gicv2.dtb > binaries/virt-gicv2.dts
> -sed 's/compatible = "arm,pl061.*/status = "disabled";/g'
> binaries/virt-gicv2.dts > binaries/virt-gicv2-edited.dts
> -dtc -I dts -O dtb binaries/virt-gicv2-edited.dts > binaries/virt-gicv2.dtb
>
> +# XXX disable pl061 to avoid Linux crash
> +fdtput binaries/virt-gicv2.dtb -p -t s /pl061@9030000 status disabled
Currently this test fails with:
+ fdtput binaries/virt-gicv2.dtb -p -t s /pl061@9030000 status disabled
+ [[ boot-cpupools == \b\o\o\t\-\c\p\u\p\o\o\l\s ]]
++ fdtget binaries/virt-gicv2.dtb -t x /cpus/cpu@1 phandle
Error at 'phandle': FDT_ERR_NOTFOUND
Given my other comment below, I would leave this code as is.
> +if [[ "${test_variant}" == "boot-cpupools" ]]; then
> + # Create cpupool node and assign it to domU0
> + cpu_phandle="$(fdtget binaries/virt-gicv2.dtb -t x /cpus/cpu@1 phandle)"
> + cpupool_phandle="0xffffff"
> + fdtput binaries/virt-gicv2.dtb -p -t s /chosen/cpupool compatible
> xen,cpupool
> + fdtput binaries/virt-gicv2.dtb -p -t x /chosen/cpupool cpupool-cpus
> $cpu_phandle
> + fdtput binaries/virt-gicv2.dtb -p -t x /chosen/cpupool phandle
> $cpupool_phandle
> + fdtput binaries/virt-gicv2.dtb -p -t x /chosen/domU0 domain-cpupool
> $cpupool_phandle
> +
> + # Check if domU0 (id=1) is assigned to Pool-1
> + passed="${test_variant} test passed"
> + dom0_check="if xl list -c 1 | grep -q Pool-1; then echo ${passed}; fi"
> +fi
I would prefer to keep the device tree editing here to a minimum and
instead add boot-cpupool support in ImageBuilder and add CPUPOOL* config
options to the existing config file for ImageBuilder created in this
file below. This way, we keep this test cleaner and we help more the
user by proving a way to set boot-cpupools more easily in general, also
useful outside gitlab-ci.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |