Message ID | 20230901155812.2696560-17-nsg@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x: CPU Topology | expand |
On Fri, 2023-09-01 at 17:58 +0200, Nina Schoetterl-Glausch wrote: > From: Pierre Morel <pmorel@linux.ibm.com> > > Test changes in the entitlement from both a guest and a host point of > view, depending on the polarization. > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> > Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> > Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> > --- > tests/avocado/s390_topology.py | 55 ++++++++++++++++++++++++++++++++++ > 1 file changed, 55 insertions(+) > > diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py > index d7ee36cb89..733093723a 100644 > --- a/tests/avocado/s390_topology.py > +++ b/tests/avocado/s390_topology.py > @@ -243,3 +243,58 @@ def test_polarization(self): > res = self.vm.qmp('query-s390x-cpu-polarization') > self.assertEqual(res['return']['polarization'], 'horizontal') > self.check_topology(0, 0, 0, 0, 'medium', False) > + > + > + def check_polarization(self, polarization): > + """ > + We need the polarization change to get stabilized in kernel > + before we check it through the sysfs. > + """ IMO this should be a comment, not a function doc. #We need to wait for the change to have been propagated to the kernel > + exec_command_and_wait_for_pattern(self, > + """ sleep 1 ; > + /bin/cat /sys/devices/system/cpu/cpu0/polarization """, > + polarization) [...]
On 01/09/2023 17.58, Nina Schoetterl-Glausch wrote: > From: Pierre Morel <pmorel@linux.ibm.com> > > Test changes in the entitlement from both a guest and a host point of > view, depending on the polarization. > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> > Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> > Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> > --- > tests/avocado/s390_topology.py | 55 ++++++++++++++++++++++++++++++++++ > 1 file changed, 55 insertions(+) > > diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py > index d7ee36cb89..733093723a 100644 > --- a/tests/avocado/s390_topology.py > +++ b/tests/avocado/s390_topology.py > @@ -243,3 +243,58 @@ def test_polarization(self): > res = self.vm.qmp('query-s390x-cpu-polarization') > self.assertEqual(res['return']['polarization'], 'horizontal') > self.check_topology(0, 0, 0, 0, 'medium', False) > + > + > + def check_polarization(self, polarization): > + """ > + We need the polarization change to get stabilized in kernel > + before we check it through the sysfs. > + """ > + exec_command_and_wait_for_pattern(self, > + """ sleep 1 ; > + /bin/cat /sys/devices/system/cpu/cpu0/polarization """, > + polarization) Using "sleep" in a function that is called multiple times will blow up the testing time quite a bit ... could this be done in a different way instead, e.g. by polling the sysfs file for the right value, or maybe there is something in the "dmesg" output that could be used as a reference? Thomas
On Thu, 2023-09-07 at 11:05 +0200, Thomas Huth wrote: > On 01/09/2023 17.58, Nina Schoetterl-Glausch wrote: > > From: Pierre Morel <pmorel@linux.ibm.com> > > > > Test changes in the entitlement from both a guest and a host point of > > view, depending on the polarization. > > > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> > > Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> > > Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com> > > --- > > tests/avocado/s390_topology.py | 55 ++++++++++++++++++++++++++++++++++ > > 1 file changed, 55 insertions(+) > > > > diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py > > index d7ee36cb89..733093723a 100644 > > --- a/tests/avocado/s390_topology.py > > +++ b/tests/avocado/s390_topology.py > > @@ -243,3 +243,58 @@ def test_polarization(self): > > res = self.vm.qmp('query-s390x-cpu-polarization') > > self.assertEqual(res['return']['polarization'], 'horizontal') > > self.check_topology(0, 0, 0, 0, 'medium', False) > > + > > + > > + def check_polarization(self, polarization): > > + """ > > + We need the polarization change to get stabilized in kernel > > + before we check it through the sysfs. > > + """ > > + exec_command_and_wait_for_pattern(self, > > + """ sleep 1 ; > > + /bin/cat /sys/devices/system/cpu/cpu0/polarization """, > > + polarization) > > Using "sleep" in a function that is called multiple times will blow up the > testing time quite a bit ... could this be done in a different way instead, > e.g. by polling the sysfs file for the right value, or maybe there is > something in the "dmesg" output that could be used as a reference? Nothing in dmesg. This works: def check_polarization(self, polarization): #We need to wait for the change to have been propagated to the kernel exec_command_and_wait_for_pattern(self, "\n".join([ "timeout 1 sh -c 'while true", 'do', ' syspath="/sys/devices/system/cpu/cpu0/polarization"', ' polarization="$(cat "$syspath")" || exit', f' if [ "$polarization" = "{polarization}" ]; then', ' exit 0', ' fi', ' sleep 0.01', #searched for strings mustn't show up in command, '' to obfuscate "done' && echo succ''ess || echo fail''ure", ]), "success", "failure") > > Thomas > >
diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py index d7ee36cb89..733093723a 100644 --- a/tests/avocado/s390_topology.py +++ b/tests/avocado/s390_topology.py @@ -243,3 +243,58 @@ def test_polarization(self): res = self.vm.qmp('query-s390x-cpu-polarization') self.assertEqual(res['return']['polarization'], 'horizontal') self.check_topology(0, 0, 0, 0, 'medium', False) + + + def check_polarization(self, polarization): + """ + We need the polarization change to get stabilized in kernel + before we check it through the sysfs. + """ + exec_command_and_wait_for_pattern(self, + """ sleep 1 ; + /bin/cat /sys/devices/system/cpu/cpu0/polarization """, + polarization) + + + def test_entitlement(self): + """ + This test verifies that QEMU modifies the entitlement + after a guest request and that the guest sees the change. + + :avocado: tags=arch:s390x + :avocado: tags=machine:s390-ccw-virtio + """ + self.kernel_init() + self.vm.launch() + self.wait_until_booted() + + self.system_init() + + self.check_polarization('horizontal') + self.check_topology(0, 0, 0, 0, 'medium', False) + + self.guest_set_dispatching('1') + self.check_polarization('vertical:medium') + self.check_topology(0, 0, 0, 0, 'medium', False) + + res = self.vm.qmp('set-cpu-topology', + {'core-id': 0, 'entitlement': 'low'}) + self.assertEqual(res['return'], {}) + self.check_polarization('vertical:low') + self.check_topology(0, 0, 0, 0, 'low', False) + + res = self.vm.qmp('set-cpu-topology', + {'core-id': 0, 'entitlement': 'medium'}) + self.assertEqual(res['return'], {}) + self.check_polarization('vertical:medium') + self.check_topology(0, 0, 0, 0, 'medium', False) + + res = self.vm.qmp('set-cpu-topology', + {'core-id': 0, 'entitlement': 'high'}) + self.assertEqual(res['return'], {}) + self.check_polarization('vertical:high') + self.check_topology(0, 0, 0, 0, 'high', False) + + self.guest_set_dispatching('0'); + self.check_polarization("horizontal") + self.check_topology(0, 0, 0, 0, 'high', False)