diff mbox series

[v20,15/21] tests/avocado: s390x cpu topology polarisation

Message ID 20230425161456.21031-16-pmorel@linux.ibm.com
State New
Headers show
Series s390x: CPU Topology | expand

Commit Message

Pierre Morel April 25, 2023, 4:14 p.m. UTC
Polarization is changed on a request from the guest.
Let's verify the polarization is accordingly set by QEMU.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
---
 tests/avocado/s390_topology.py | 38 ++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

Comments

Nina Schoetterl-Glausch May 22, 2023, 7:45 p.m. UTC | #1
Try to be consistent in the spelling of polarization.
You use an s in the title and in the test name below.

On Tue, 2023-04-25 at 18:14 +0200, Pierre Morel wrote:
> Polarization is changed on a request from the guest.
> Let's verify the polarization is accordingly set by QEMU.
> 
> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> ---
>  tests/avocado/s390_topology.py | 38 ++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py
> index ce119a095e..30d3c0d0cb 100644
> --- a/tests/avocado/s390_topology.py
> +++ b/tests/avocado/s390_topology.py
> @@ -104,6 +104,15 @@ def kernel_init(self):
>                           '-initrd', initrd_path,
>                           '-append', kernel_command_line)
>  
> +    def system_init(self):
> +        self.log.info("System init")
> +        exec_command(self, 'mount proc -t proc /proc')
> +        time.sleep(0.2)
> +        exec_command(self, 'mount sys -t sysfs /sys')
> +        time.sleep(0.2)
> +        exec_command_and_wait_for_pattern(self,
> +                '/bin/cat /sys/devices/system/cpu/dispatching', '0')
> +
>      def test_single(self):
>          self.kernel_init()
>          self.vm.launch()
> @@ -206,3 +215,32 @@ def test_hotplug_full(self):
>          self.check_topology(3, 1, 1, 1, 'high', False)
>          self.check_topology(4, 1, 1, 1, 'medium', False)
>          self.check_topology(5, 2, 1, 1, 'high', True)
> +
> +    def test_polarisation(self):

I would unite this test with test_query_polarization, they are very similar.

> +        """
> +        This test verifies that QEMU modifies the entitlement change after
> +        several guest polarization change requests.
> +
> +        :avocado: tags=arch:s390x
> +        :avocado: tags=machine:s390-ccw-virtio
> +        """
> +        self.kernel_init()
> +        self.vm.launch()
> +        self.wait_for_console_pattern('no job control')
> +
> +        self.system_init()
> +        self.check_topology(0, 0, 0, 0, 'medium', False)
> +
> +        exec_command(self, 'echo 1 > /sys/devices/system/cpu/dispatching')
> +        time.sleep(0.2)

Can you find a way to wait for the event here?

> +        exec_command_and_wait_for_pattern(self,
> +                '/bin/cat /sys/devices/system/cpu/dispatching', '1')

I think it would be good to refactor this snippet into a function.

def guest_set_dispatching(self, dispatching):
        exec_command(self, f'echo {dispatching} > /sys/devices/system/cpu/dispatching')
        #TODO wait
        exec_command_and_wait_for_pattern(self,
                '/bin/cat /sys/devices/system/cpu/dispatching', dispatching)

or similar, you could also put the path into a variable.

> +
> +        self.check_topology(0, 0, 0, 0, 'medium', False)
> +
> +        exec_command(self, 'echo 0 > /sys/devices/system/cpu/dispatching')
> +        time.sleep(0.2)
> +        exec_command_and_wait_for_pattern(self,
> +                '/bin/cat /sys/devices/system/cpu/dispatching', '0')
> +
> +        self.check_topology(0, 0, 0, 0, 'medium', False)
Pierre Morel June 27, 2023, 1:01 p.m. UTC | #2
On 5/22/23 21:45, Nina Schoetterl-Glausch wrote:
> Try to be consistent in the spelling of polarization.
> You use an s in the title and in the test name below.
>
> On Tue, 2023-04-25 at 18:14 +0200, Pierre Morel wrote:
>> Polarization is changed on a request from the guest.
>> Let's verify the polarization is accordingly set by QEMU.
>>
>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>> ---
>>   tests/avocado/s390_topology.py | 38 ++++++++++++++++++++++++++++++++++
>>   1 file changed, 38 insertions(+)
>>
>> diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py
>> index ce119a095e..30d3c0d0cb 100644
>> --- a/tests/avocado/s390_topology.py
>> +++ b/tests/avocado/s390_topology.py
>> @@ -104,6 +104,15 @@ def kernel_init(self):
>>                            '-initrd', initrd_path,
>>                            '-append', kernel_command_line)
>>   
>> +    def system_init(self):
>> +        self.log.info("System init")
>> +        exec_command(self, 'mount proc -t proc /proc')
>> +        time.sleep(0.2)
>> +        exec_command(self, 'mount sys -t sysfs /sys')
>> +        time.sleep(0.2)
>> +        exec_command_and_wait_for_pattern(self,
>> +                '/bin/cat /sys/devices/system/cpu/dispatching', '0')
>> +
>>       def test_single(self):
>>           self.kernel_init()
>>           self.vm.launch()
>> @@ -206,3 +215,32 @@ def test_hotplug_full(self):
>>           self.check_topology(3, 1, 1, 1, 'high', False)
>>           self.check_topology(4, 1, 1, 1, 'medium', False)
>>           self.check_topology(5, 2, 1, 1, 'high', True)
>> +
>> +    def test_polarisation(self):
> I would unite this test with test_query_polarization, they are very similar.


Yes I find now that this test is of little interest.

I will merge it with test_query_polarization as you propose.

it is much better as man can see that the

>
>> +        """
>> +        This test verifies that QEMU modifies the entitlement change after
>> +        several guest polarization change requests.
>> +
>> +        :avocado: tags=arch:s390x
>> +        :avocado: tags=machine:s390-ccw-virtio
>> +        """
>> +        self.kernel_init()
>> +        self.vm.launch()
>> +        self.wait_for_console_pattern('no job control')
>> +
>> +        self.system_init()
>> +        self.check_topology(0, 0, 0, 0, 'medium', False)
>> +
>> +        exec_command(self, 'echo 1 > /sys/devices/system/cpu/dispatching')
>> +        time.sleep(0.2)
> Can you find a way to wait for the event here?


Right, I can wait for CPU_POLARIZATION_CHANGE


>
>> +        exec_command_and_wait_for_pattern(self,
>> +                '/bin/cat /sys/devices/system/cpu/dispatching', '1')
> I think it would be good to refactor this snippet into a function.
>
> def guest_set_dispatching(self, dispatching):
>          exec_command(self, f'echo {dispatching} > /sys/devices/system/cpu/dispatching')
>          #TODO wait
>          exec_command_and_wait_for_pattern(self,
>                  '/bin/cat /sys/devices/system/cpu/dispatching', dispatching)
>
> or similar, you could also put the path into a variable.


Yes good, I do this

Thanks Nina.

Regards,

Pierre
diff mbox series

Patch

diff --git a/tests/avocado/s390_topology.py b/tests/avocado/s390_topology.py
index ce119a095e..30d3c0d0cb 100644
--- a/tests/avocado/s390_topology.py
+++ b/tests/avocado/s390_topology.py
@@ -104,6 +104,15 @@  def kernel_init(self):
                          '-initrd', initrd_path,
                          '-append', kernel_command_line)
 
+    def system_init(self):
+        self.log.info("System init")
+        exec_command(self, 'mount proc -t proc /proc')
+        time.sleep(0.2)
+        exec_command(self, 'mount sys -t sysfs /sys')
+        time.sleep(0.2)
+        exec_command_and_wait_for_pattern(self,
+                '/bin/cat /sys/devices/system/cpu/dispatching', '0')
+
     def test_single(self):
         self.kernel_init()
         self.vm.launch()
@@ -206,3 +215,32 @@  def test_hotplug_full(self):
         self.check_topology(3, 1, 1, 1, 'high', False)
         self.check_topology(4, 1, 1, 1, 'medium', False)
         self.check_topology(5, 2, 1, 1, 'high', True)
+
+    def test_polarisation(self):
+        """
+        This test verifies that QEMU modifies the entitlement change after
+        several guest polarization change requests.
+
+        :avocado: tags=arch:s390x
+        :avocado: tags=machine:s390-ccw-virtio
+        """
+        self.kernel_init()
+        self.vm.launch()
+        self.wait_for_console_pattern('no job control')
+
+        self.system_init()
+        self.check_topology(0, 0, 0, 0, 'medium', False)
+
+        exec_command(self, 'echo 1 > /sys/devices/system/cpu/dispatching')
+        time.sleep(0.2)
+        exec_command_and_wait_for_pattern(self,
+                '/bin/cat /sys/devices/system/cpu/dispatching', '1')
+
+        self.check_topology(0, 0, 0, 0, 'medium', False)
+
+        exec_command(self, 'echo 0 > /sys/devices/system/cpu/dispatching')
+        time.sleep(0.2)
+        exec_command_and_wait_for_pattern(self,
+                '/bin/cat /sys/devices/system/cpu/dispatching', '0')
+
+        self.check_topology(0, 0, 0, 0, 'medium', False)