Added boot Linux test cases that launch QEMU with kvm
enabled. Likewise it was added tests for tcg.
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
---
tests/acceptance/boot_linux_console.py | 88 ++++++++++++++++++++------
1 file changed, 68 insertions(+), 20 deletions(-)
diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index e40b84651b..a36eae630c 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -51,11 +51,7 @@ class BootLinuxConsole(Test):
os.chdir(cwd)
return self.workdir + path
- def test_x86_64_pc(self):
- """
- :avocado: tags=arch:x86_64
- :avocado: tags=machine:pc
- """
+ def do_test_x86_64_pc(self):
kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
'/linux/releases/29/Everything/x86_64/os/images/pxeboot'
'/vmlinuz')
@@ -70,6 +66,22 @@ class BootLinuxConsole(Test):
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.wait_for_console_pattern(console_pattern)
+ def test_x86_64_pc_kvm(self):
+ """
+ :avocado: tags=arch:x86_64
+ :avocado: tags=machine:pc
+ :avocado: tags=accel:kvm
+ """
+ self.do_test_x86_64_pc()
+
+ def test_x86_64_pc_tcg(self):
+ """
+ :avocado: tags=arch:x86_64
+ :avocado: tags=machine:pc
+ :avocado: tags=accel:tcg
+ """
+ self.do_test_x86_64_pc()
+
def test_mips_malta(self):
"""
:avocado: tags=arch:mips
@@ -258,11 +270,7 @@ class BootLinuxConsole(Test):
kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180'
self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash)
- def test_aarch64_virt(self):
- """
- :avocado: tags=arch:aarch64
- :avocado: tags=machine:virt
- """
+ def do_test_aarch64_virt(self):
kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
'/linux/releases/29/Everything/aarch64/os/images/pxeboot'
'/vmlinuz')
@@ -279,6 +287,22 @@ class BootLinuxConsole(Test):
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.wait_for_console_pattern(console_pattern)
+ def test_aarch64_virt_kvm(self):
+ """
+ :avocado: tags=arch:aarch64
+ :avocado: tags=machine:virt
+ :avocado: tags=accel:kvm
+ """
+ self.do_test_aarch64_virt()
+
+ def test_aarch64_virt_tcg(self):
+ """
+ :avocado: tags=arch:aarch64
+ :avocado: tags=machine:virt
+ :avocado: tags=accel:tcg
+ """
+ self.do_test_aarch64_virt()
+
def test_arm_virt(self):
"""
:avocado: tags=arch:arm
@@ -485,11 +509,7 @@ class BootLinuxConsole(Test):
exec_command_and_wait_for_pattern(self, 'reboot',
'reboot: Restarting system')
- def test_s390x_s390_ccw_virtio(self):
- """
- :avocado: tags=arch:s390x
- :avocado: tags=machine:s390-ccw-virtio
- """
+ def do_test_s390x_s390_ccw_virtio(self):
kernel_url = ('https://archives.fedoraproject.org/pub/archive'
'/fedora-secondary/releases/29/Everything/s390x/os/images'
'/kernel.img')
@@ -505,6 +525,22 @@ class BootLinuxConsole(Test):
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.wait_for_console_pattern(console_pattern)
+ def test_s390x_s390_ccw_virtio_kvm(self):
+ """
+ :avocado: tags=arch:s390x
+ :avocado: tags=machine:s390-ccw-virtio
+ :avocado: tags=accel:kvm
+ """
+ self.do_test_s390x_s390_ccw_virtio()
+
+ def test_s390x_s390_ccw_virtio_tcg(self):
+ """
+ :avocado: tags=arch:s390x
+ :avocado: tags=machine:s390-ccw-virtio
+ :avocado: tags=accel:tcg
+ """
+ self.do_test_s390x_s390_ccw_virtio()
+
def test_alpha_clipper(self):
"""
:avocado: tags=arch:alpha
@@ -526,11 +562,7 @@ class BootLinuxConsole(Test):
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.wait_for_console_pattern(console_pattern)
- def test_ppc64_pseries(self):
- """
- :avocado: tags=arch:ppc64
- :avocado: tags=machine:pseries
- """
+ def do_test_ppc64_pseries(self):
kernel_url = ('https://archives.fedoraproject.org/pub/archive'
'/fedora-secondary/releases/29/Everything/ppc64le/os'
'/ppc/ppc64/vmlinuz')
@@ -545,6 +577,22 @@ class BootLinuxConsole(Test):
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.wait_for_console_pattern(console_pattern)
+ def test_ppc64le_pseries_kvm(self):
+ """
+ :avocado: tags=arch:ppc64
+ :avocado: tags=machine:pseries
+ :avocado: tags=accel:kvm
+ """
+ self.do_test_ppc64_pseries()
+
+ def test_ppc64le_pseries_tcg(self):
+ """
+ :avocado: tags=arch:ppc64
+ :avocado: tags=machine:pseries
+ :avocado: tags=accel:tcg
+ """
+ self.do_test_ppc64_pseries()
+
def test_m68k_q800(self):
"""
:avocado: tags=arch:m68k
--
2.23.0
On 1/22/20 2:27 AM, Wainer dos Santos Moschetta wrote:
> Added boot Linux test cases that launch QEMU with kvm
> enabled. Likewise it was added tests for tcg.
>
> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> ---
> tests/acceptance/boot_linux_console.py | 88 ++++++++++++++++++++------
> 1 file changed, 68 insertions(+), 20 deletions(-)
>
> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
> index e40b84651b..a36eae630c 100644
> --- a/tests/acceptance/boot_linux_console.py
> +++ b/tests/acceptance/boot_linux_console.py
> @@ -51,11 +51,7 @@ class BootLinuxConsole(Test):
> os.chdir(cwd)
> return self.workdir + path
>
> - def test_x86_64_pc(self):
> - """
> - :avocado: tags=arch:x86_64
> - :avocado: tags=machine:pc
> - """
> + def do_test_x86_64_pc(self):
> kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
> '/linux/releases/29/Everything/x86_64/os/images/pxeboot'
> '/vmlinuz')
> @@ -70,6 +66,22 @@ class BootLinuxConsole(Test):
> console_pattern = 'Kernel command line: %s' % kernel_command_line
> self.wait_for_console_pattern(console_pattern)
>
> + def test_x86_64_pc_kvm(self):
> + """
> + :avocado: tags=arch:x86_64
> + :avocado: tags=machine:pc
> + :avocado: tags=accel:kvm
> + """
> + self.do_test_x86_64_pc()
> +
> + def test_x86_64_pc_tcg(self):
> + """
> + :avocado: tags=arch:x86_64
> + :avocado: tags=machine:pc
> + :avocado: tags=accel:tcg
> + """
> + self.do_test_x86_64_pc()
[...]
So you want to test a binary linked with multiple accelerators.
Isn't it possible to have something clever/simpler?
def test_x86_64_pc(self):
"""
:avocado: tags=arch:x86_64
:avocado: tags=machine:pc
:avocado: tags=accel:kvm
:avocado: tags=accel:tcg
"""
self.do_test_x86_64_pc()
And use a mux config?
Because else we are duplicating a lot of code, and there are various
accelerators available:
$ git grep ACCEL_CLASS_NAME
accel/qtest.c:41:#define TYPE_QTEST_ACCEL ACCEL_CLASS_NAME("qtest")
accel/tcg/tcg-all.c:46:#define TYPE_TCG_ACCEL ACCEL_CLASS_NAME("tcg")
hw/xen/xen-common.c:200:#define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen")
include/sysemu/hvf.h:100:#define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf")
include/sysemu/kvm_int.h:36:#define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm")
target/i386/hax-all.c:1127: .name = ACCEL_CLASS_NAME("hax"),
target/i386/whpx-all.c:1533: .name = ACCEL_CLASS_NAME("whpx"),
And also pending:
target/i386/nvmm-all.c: .name = ACCEL_CLASS_NAME("nvmm"),
https://www.mail-archive.com/qemu-devel@nongnu.org/msg668697.html
On 1/24/20 1:45 PM, Philippe Mathieu-Daudé wrote:
> On 1/22/20 2:27 AM, Wainer dos Santos Moschetta wrote:
>> Added boot Linux test cases that launch QEMU with kvm
>> enabled. Likewise it was added tests for tcg.
>>
>> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
>> ---
>> tests/acceptance/boot_linux_console.py | 88 ++++++++++++++++++++------
>> 1 file changed, 68 insertions(+), 20 deletions(-)
>>
>> diff --git a/tests/acceptance/boot_linux_console.py
>> b/tests/acceptance/boot_linux_console.py
>> index e40b84651b..a36eae630c 100644
>> --- a/tests/acceptance/boot_linux_console.py
>> +++ b/tests/acceptance/boot_linux_console.py
>> @@ -51,11 +51,7 @@ class BootLinuxConsole(Test):
>> os.chdir(cwd)
>> return self.workdir + path
>> - def test_x86_64_pc(self):
>> - """
>> - :avocado: tags=arch:x86_64
>> - :avocado: tags=machine:pc
>> - """
>> + def do_test_x86_64_pc(self):
>> kernel_url =
>> ('https://archives.fedoraproject.org/pub/archive/fedora'
>> '/linux/releases/29/Everything/x86_64/os/images/pxeboot'
>> '/vmlinuz')
>> @@ -70,6 +66,22 @@ class BootLinuxConsole(Test):
>> console_pattern = 'Kernel command line: %s' %
>> kernel_command_line
>> self.wait_for_console_pattern(console_pattern)
>> + def test_x86_64_pc_kvm(self):
>> + """
>> + :avocado: tags=arch:x86_64
>> + :avocado: tags=machine:pc
>> + :avocado: tags=accel:kvm
>> + """
>> + self.do_test_x86_64_pc()
>> +
>> + def test_x86_64_pc_tcg(self):
>> + """
>> + :avocado: tags=arch:x86_64
>> + :avocado: tags=machine:pc
>> + :avocado: tags=accel:tcg
>> + """
>> + self.do_test_x86_64_pc()
> [...]
> So you want to test a binary linked with multiple accelerators.
>
> Isn't it possible to have something clever/simpler?
It is feasible using Avocado's CIT [1] or PICT [2] plug-ins. This work
is suggested by Cleber in [3] and I've it on my radar for future work.
But, for the moment, I would like to have those simple boot with KVM
tests merged so that they are executed in our Travis CI.
[1]
https://avocado-framework.readthedocs.io/en/75.1/plugins/optional/varianter_cit.html
[2]
https://avocado-framework.readthedocs.io/en/75.1/plugins/optional/varianter_pict.html
[3]
https://trello.com/c/1wvzcxHY/105-create-cit-parameter-for-acceptance-tests
>
>
> def test_x86_64_pc(self):
> """
> :avocado: tags=arch:x86_64
> :avocado: tags=machine:pc
> :avocado: tags=accel:kvm
> :avocado: tags=accel:tcg
> """
> self.do_test_x86_64_pc()
>
> And use a mux config?
>
> Because else we are duplicating a lot of code, and there are various
> accelerators available:
>
> $ git grep ACCEL_CLASS_NAME
> accel/qtest.c:41:#define TYPE_QTEST_ACCEL ACCEL_CLASS_NAME("qtest")
> accel/tcg/tcg-all.c:46:#define TYPE_TCG_ACCEL ACCEL_CLASS_NAME("tcg")
> hw/xen/xen-common.c:200:#define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen")
> include/sysemu/hvf.h:100:#define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf")
> include/sysemu/kvm_int.h:36:#define TYPE_KVM_ACCEL
> ACCEL_CLASS_NAME("kvm")
> target/i386/hax-all.c:1127: .name = ACCEL_CLASS_NAME("hax"),
> target/i386/whpx-all.c:1533: .name = ACCEL_CLASS_NAME("whpx"),
Unfortunately I don't have enough time, resources and knowledge to work
on accelerators other than kvm and tcg. I appreciate if others could
contribute here, and I'm happy to review the patches.
Another point is how those tests could be ran on our CI.
Thanks for bringing those points!
- Wainer
>
>
> And also pending:
> target/i386/nvmm-all.c: .name = ACCEL_CLASS_NAME("nvmm"),
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg668697.html
>
On 24/01/2020 16.45, Philippe Mathieu-Daudé wrote:
> On 1/22/20 2:27 AM, Wainer dos Santos Moschetta wrote:
>> Added boot Linux test cases that launch QEMU with kvm
>> enabled. Likewise it was added tests for tcg.
>>
>> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
>> ---
>> tests/acceptance/boot_linux_console.py | 88 ++++++++++++++++++++------
>> 1 file changed, 68 insertions(+), 20 deletions(-)
>>
>> diff --git a/tests/acceptance/boot_linux_console.py
>> b/tests/acceptance/boot_linux_console.py
>> index e40b84651b..a36eae630c 100644
>> --- a/tests/acceptance/boot_linux_console.py
>> +++ b/tests/acceptance/boot_linux_console.py
>> @@ -51,11 +51,7 @@ class BootLinuxConsole(Test):
>> os.chdir(cwd)
>> return self.workdir + path
>> - def test_x86_64_pc(self):
>> - """
>> - :avocado: tags=arch:x86_64
>> - :avocado: tags=machine:pc
>> - """
>> + def do_test_x86_64_pc(self):
>> kernel_url =
>> ('https://archives.fedoraproject.org/pub/archive/fedora'
>>
>> '/linux/releases/29/Everything/x86_64/os/images/pxeboot'
>> '/vmlinuz')
>> @@ -70,6 +66,22 @@ class BootLinuxConsole(Test):
>> console_pattern = 'Kernel command line: %s' %
>> kernel_command_line
>> self.wait_for_console_pattern(console_pattern)
>> + def test_x86_64_pc_kvm(self):
>> + """
>> + :avocado: tags=arch:x86_64
>> + :avocado: tags=machine:pc
>> + :avocado: tags=accel:kvm
>> + """
>> + self.do_test_x86_64_pc()
>> +
>> + def test_x86_64_pc_tcg(self):
>> + """
>> + :avocado: tags=arch:x86_64
>> + :avocado: tags=machine:pc
>> + :avocado: tags=accel:tcg
>> + """
>> + self.do_test_x86_64_pc()
> [...]
> So you want to test a binary linked with multiple accelerators.
>
> Isn't it possible to have something clever/simpler?
>
> def test_x86_64_pc(self):
> """
> :avocado: tags=arch:x86_64
> :avocado: tags=machine:pc
> :avocado: tags=accel:kvm
> :avocado: tags=accel:tcg
> """
> self.do_test_x86_64_pc()
>
> And use a mux config?
>
> Because else we are duplicating a lot of code, and there are various
> accelerators available:
>
> $ git grep ACCEL_CLASS_NAME
> accel/qtest.c:41:#define TYPE_QTEST_ACCEL ACCEL_CLASS_NAME("qtest")
> accel/tcg/tcg-all.c:46:#define TYPE_TCG_ACCEL ACCEL_CLASS_NAME("tcg")
> hw/xen/xen-common.c:200:#define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen")
> include/sysemu/hvf.h:100:#define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf")
> include/sysemu/kvm_int.h:36:#define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm")
> target/i386/hax-all.c:1127: .name = ACCEL_CLASS_NAME("hax"),
> target/i386/whpx-all.c:1533: .name = ACCEL_CLASS_NAME("whpx"),
>
> And also pending:
> target/i386/nvmm-all.c: .name = ACCEL_CLASS_NAME("nvmm"),
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg668697.html
Is anybody running any of these in a CI environment?
Thomas
On Tue, Jan 21, 2020 at 10:27:51PM -0300, Wainer dos Santos Moschetta wrote: > + def test_aarch64_virt_kvm(self): > + """ > + :avocado: tags=arch:aarch64 > + :avocado: tags=machine:virt > + :avocado: tags=accel:kvm > + """ > + self.do_test_aarch64_virt() > + > + def test_aarch64_virt_tcg(self): > + """ > + :avocado: tags=arch:aarch64 > + :avocado: tags=machine:virt > + :avocado: tags=accel:tcg > + """ > + self.do_test_aarch64_virt() > + Does do_test_aarch64_virt() add more machine parameters? Also, which cpu type does it choose? The reason I ask is because aarch64 virt will fail to run with KVM unless the appropriate gic version is specified (the gic-version machine parameter). Also the cpu type must be 'host' or 'max'. 'max' is the better choice as it also works for tcg. gic-version also takes 'max' allowing it to auto-select the appropriate version. So if it's not already there somewhere, then please ensure aarch64 has these additional parameters: machine:gic-version=max cpu:max Thanks, drew
On 1/22/20 7:02 AM, Andrew Jones wrote: > On Tue, Jan 21, 2020 at 10:27:51PM -0300, Wainer dos Santos Moschetta wrote: >> + def test_aarch64_virt_kvm(self): >> + """ >> + :avocado: tags=arch:aarch64 >> + :avocado: tags=machine:virt >> + :avocado: tags=accel:kvm >> + """ >> + self.do_test_aarch64_virt() >> + >> + def test_aarch64_virt_tcg(self): >> + """ >> + :avocado: tags=arch:aarch64 >> + :avocado: tags=machine:virt >> + :avocado: tags=accel:tcg >> + """ >> + self.do_test_aarch64_virt() >> + > Does do_test_aarch64_virt() add more machine parameters? Also, which cpu > type does it choose? The reason I ask is because aarch64 virt will fail to > run with KVM unless the appropriate gic version is specified (the > gic-version machine parameter). Also the cpu type must be 'host' or 'max'. > 'max' is the better choice as it also works for tcg. gic-version also > takes 'max' allowing it to auto-select the appropriate version. So if it's > not already there somewhere, then please ensure aarch64 has these > additional parameters: > > machine:gic-version=max > cpu:max The test was passing '-cpu cortex-a56', I replaced with '-cpu max'. Also, now, it passes the gic version as you pointed out. I will send those changes on a v4. Other than that, I tried '-cpu max -machine virt' (without gic-version) and QEMU crashed: [root@virtlab-arm03 build]# ./aarch64-softmmu/qemu-system-aarch64 -accel kvm -cpu max -machine virt -display none -vga none qemu-system-aarch64: PMU: KVM_SET_DEVICE_ATTR: Invalid argument qemu-system-aarch64: failed to set irq for PMU Aborted (core dumped) ---- Should I expect it to crash or rather nicely fail? Thanks ! - Wainer > > Thanks, > drew
On Thu, Jan 23, 2020 at 07:47:19PM -0200, Wainer dos Santos Moschetta wrote: > > On 1/22/20 7:02 AM, Andrew Jones wrote: > > On Tue, Jan 21, 2020 at 10:27:51PM -0300, Wainer dos Santos Moschetta wrote: > > > + def test_aarch64_virt_kvm(self): > > > + """ > > > + :avocado: tags=arch:aarch64 > > > + :avocado: tags=machine:virt > > > + :avocado: tags=accel:kvm > > > + """ > > > + self.do_test_aarch64_virt() > > > + > > > + def test_aarch64_virt_tcg(self): > > > + """ > > > + :avocado: tags=arch:aarch64 > > > + :avocado: tags=machine:virt > > > + :avocado: tags=accel:tcg > > > + """ > > > + self.do_test_aarch64_virt() > > > + > > Does do_test_aarch64_virt() add more machine parameters? Also, which cpu > > type does it choose? The reason I ask is because aarch64 virt will fail to > > run with KVM unless the appropriate gic version is specified (the > > gic-version machine parameter). Also the cpu type must be 'host' or 'max'. > > 'max' is the better choice as it also works for tcg. gic-version also > > takes 'max' allowing it to auto-select the appropriate version. So if it's > > not already there somewhere, then please ensure aarch64 has these > > additional parameters: > > > > machine:gic-version=max > > cpu:max > > > The test was passing '-cpu cortex-a56', I replaced with '-cpu max'. Also, > now, it passes the gic version as you pointed out. I will send those changes > on a v4. > > Other than that, I tried '-cpu max -machine virt' (without gic-version) and > QEMU crashed: > > [root@virtlab-arm03 build]# ./aarch64-softmmu/qemu-system-aarch64 -accel kvm > -cpu max -machine virt -display none -vga none > qemu-system-aarch64: PMU: KVM_SET_DEVICE_ATTR: Invalid argument > qemu-system-aarch64: failed to set irq for PMU > Aborted (core dumped) > > ---- > > Should I expect it to crash or rather nicely fail? crash, unfortunately. I recall we once had a plan to send patches to fail nicer, and to output a hint on how to resolve the issue, but I guess that never happened... Thanks, drew
© 2016 - 2026 Red Hat, Inc.