test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: optimize script
@ 2020-02-26  7:55 yufengmx
  2020-02-26  7:55 ` [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: " yufengmx
  2020-02-26  7:58 ` [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: " Mo, YufengX
  0 siblings, 2 replies; 4+ messages in thread
From: yufengmx @ 2020-02-26  7:55 UTC (permalink / raw)
  To: dts, lei.a.yao; +Cc: yufengmx

*. use hwclock command to take the place of clock command for os compatibility. 
*. set longer clock command timeout. 
*. use pktgen new callback function to take the place of shell script query. 
*. fix vcpu/pcpu mapping. 
*. python3 support. 

yufengmx (1):
  tests/vm_pw_mgmt_policy: optimize script

 tests/TestSuite_vm_pw_mgmt_policy.py | 84 ++++++++--------------------
 1 file changed, 23 insertions(+), 61 deletions(-)

-- 
2.21.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: optimize script
  2020-02-26  7:55 [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: optimize script yufengmx
@ 2020-02-26  7:55 ` yufengmx
  2020-03-03  5:41   ` Tu, Lijuan
  2020-02-26  7:58 ` [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: " Mo, YufengX
  1 sibling, 1 reply; 4+ messages in thread
From: yufengmx @ 2020-02-26  7:55 UTC (permalink / raw)
  To: dts, lei.a.yao; +Cc: yufengmx


*. use hwclock command to take the place of clock command for os compatibility.
*. set longer clock command timeout.
*. use pktgen new callback function to take the place of shell script query.
*. fix vcpu/pcpu mapping.
*. python3 support.

Signed-off-by: yufengmx <yufengx.mo@intel.com>
---
 tests/TestSuite_vm_pw_mgmt_policy.py | 84 ++++++++--------------------
 1 file changed, 23 insertions(+), 61 deletions(-)

diff --git a/tests/TestSuite_vm_pw_mgmt_policy.py b/tests/TestSuite_vm_pw_mgmt_policy.py
index 076046b..8da21b6 100644
--- a/tests/TestSuite_vm_pw_mgmt_policy.py
+++ b/tests/TestSuite_vm_pw_mgmt_policy.py
@@ -1,6 +1,6 @@
 # BSD LICENSE
 #
-# Copyright(c) 2010-2019 Intel Corporation. All rights reserved.
+# Copyright(c) 2010-2020 Intel Corporation. All rights reserved.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -173,6 +173,7 @@ class TestVmPwMgmtPolicy(TestCase):
             for layer in list(pkt_layers.keys()):
                 pkt.config_layer(layer, pkt_layers[layer])
             streams.append(pkt.pktgen.pkt)
+            self.logger.debug(pkt.pktgen.pkt.command())
 
         return streams
 
@@ -230,6 +231,8 @@ class TestVmPwMgmtPolicy(TestCase):
             'rate_percent': rate,
             'traffic_opt': {
                 'method': 'throughput',
+                'callback': self.query_cpu_freq,
+                'interval': duration - 2,
                 'duration': duration,
             }}
         # begin traffic checking
@@ -320,7 +323,8 @@ class TestVmPwMgmtPolicy(TestCase):
         self.verify(self.vm_dut, "create vm_dut fail !")
         self.add_console(self.vm_dut.session)
         # get virtual machine cpu cores
-        self.vcpu_map = self.vm.get_vm_cpu()
+        _vcpu_map = self.vm.get_vm_cpu()
+        self.vcpu_map = [int(item) for item  in _vcpu_map]
 
     def close_vm(self):
         # close vm
@@ -403,7 +407,7 @@ class TestVmPwMgmtPolicy(TestCase):
         time.sleep(2)
 
     def guest_set_vm_turbo_status(self, vcpu, status):
-        vcpu_index = self.vcpu_map.index(str(self.check_core))
+        vcpu_index = self.vcpu_map.index(self.check_core)
         cmd = ["set_cpu_freq %d %s" % (vcpu_index, status),
                "vmpower\(guest\)>", 5]
         output = self.vm_g_con(cmd)
@@ -447,46 +451,12 @@ class TestVmPwMgmtPolicy(TestCase):
         self.vm_testpmd.quit()
         self.is_pmd_on = False
 
-    def init_query_script(self):
-        self.query_cur_freq = os.path.join(
-            self.output_path, 'cpu_cur_freq.log')
-        script_content = textwrap.dedent("""
-            # $1: core number
-            sleep 8
-            echo "begin get core "$1" current frequency " > {0}
-            while :
-            do
-                sleep 1
-                cat /sys/devices/system/cpu/cpu$1/cpufreq/cpuinfo_cur_freq >> {0}
-            done
-        """).format(self.query_cur_freq)
-        fileName = 'vm_power_core.sh'
-        query_script = os.path.join(self.output_path, fileName)
-        with open(query_script, 'wb') as fp:
-            fp.write('#!/bin/bash' + os.linesep + script_content)
-        self.dut.session.copy_file_to(query_script, self.target_dir)
-        self.query_tool = ';'.join([
-            'cd {}'.format(self.target_dir),
-            'chmod 777 {}'.format(fileName),
-            './' + fileName])
-
-    def start_query(self, core):
-        cmd = self.query_tool + ' {0} > /dev/null 2>&1 &'.format(core)
-        self.d_a_con(cmd)
-        self.is_query_on = True
-
-    def stop_query(self):
-        if not self.is_query_on:
-            return
-        ps_name = os.path.basename(self.query_tool)
-        cmd = "ps aux | grep -i '%s' | grep -v grep | awk {'print $2'}" % (
-            ps_name)
-        out = self.d_a_con(cmd)
-        if out != "":
-            cmd = 'pkill -f {}'.format(ps_name)
-            self.d_a_con(cmd)
-        self.is_query_on = False
-        self.dut.session.copy_file_from(self.query_cur_freq, self.output_path)
+    def query_cpu_freq(self):
+        cmd = ("cat "
+            "/sys/devices/system/cpu/cpu{}/cpufreq/cpuinfo_cur_freq").format(
+            self.check_core)
+        output = self.d_a_con(cmd)
+        self.cur_cpu_freq = 0 if not output else int(output.splitlines()[0])
 
     def set_desired_time(self, time_stage):
         if not time_stage:
@@ -504,8 +474,8 @@ class TestVmPwMgmtPolicy(TestCase):
         cmd = ';'.join([
             "{0}",
             "{0} -s '{1}'",
-            "clock -w"]).format(date_tool, timestamp)
-        self.d_a_con(cmd)
+            "hwclock -w"]).format(date_tool, timestamp)
+        self.d_a_con([cmd, '# ', 20])
         cmd = "{0} '+%H:00'".format(date_tool)
         output = self.d_a_con(cmd)
         msg = "desired time fails to set" \
@@ -529,9 +499,9 @@ class TestVmPwMgmtPolicy(TestCase):
         cmd = ';'.join([
             "{0}",
             "{0} -s '{1}'",
-            "clock -w",
+            "hwclock -w",
             "{0}", ]).format(date_tool, real_time)
-        self.d_a_con(cmd)
+        self.d_a_con([cmd, '# ', 20])
 
     def preset_core_freq(self):
         info = self.cpu_info.get(self.check_core, {})
@@ -663,12 +633,8 @@ class TestVmPwMgmtPolicy(TestCase):
         low workload: minimum cpu frequency
         '''
         check_item = content.get('check')
-        query_cur_freq = os.path.join(
-            self.output_path, os.path.basename(self.query_cur_freq))
-        with open(query_cur_freq, 'rb') as fp:
-            content = fp.read()
-        self.logger.debug(content)
-        real_freq = int(content.splitlines()[2].strip())
+        real_freq = self.cur_cpu_freq
+        self.logger.warning(real_freq)
         expected_freq = self.get_expected_freq(self.check_core, check_item)
         msg = (
             'core <{0}> freq <{1}> are not '
@@ -692,7 +658,6 @@ class TestVmPwMgmtPolicy(TestCase):
 
     def run_test_post(self):
         # close all binary processes
-        self.stop_query()
         self.close_vm_testpmd()
         self.close_guest_mgr()
         self.close_vm_power_mgr()
@@ -703,12 +668,9 @@ class TestVmPwMgmtPolicy(TestCase):
         self.start_guest_mgr(content.get('option', ''))
         # set binary process command
         self.guest_send_policy()
-        # start query
-        self.start_query(self.check_core)
 
     def run_guest_post(self):
         # close guest
-        self.stop_query()
         self.close_guest_mgr()
 
     def traffic_policy(self, name, content):
@@ -736,7 +698,7 @@ class TestVmPwMgmtPolicy(TestCase):
                 # run time policy, wait 10 second to make sure system ready
                 # and get enough query data
                 time.sleep(15)
-            self.stop_query()
+                self.query_cpu_freq()
             # check cpu core status
             self.check_core_freq(content)
         except Exception as e:
@@ -833,7 +795,7 @@ class TestVmPwMgmtPolicy(TestCase):
             keys = list(_common_config['option'].keys())
             opt_fmt = _common_config['opt_fmt']
             for item in product(*values):
-                _options = dict(zip(keys, item))
+                _options = dict(list(zip(keys, item)))
                 _options['policy'] = policy_name
                 _opt_fmt = " ".join(opt_fmt)
                 _config = deepcopy(config)
@@ -912,7 +874,7 @@ class TestVmPwMgmtPolicy(TestCase):
         self.verify(status, msg)
 
     def preset_test_environment(self):
-        self.is_mgr_on = self.is_pmd_on = self.is_query_on = None
+        self.is_mgr_on = self.is_pmd_on = None
         self.ext_con = {}
         # get cpu cores information
         self.dut.init_core_list_uncached_linux()
@@ -929,9 +891,9 @@ class TestVmPwMgmtPolicy(TestCase):
         self.init_vm_power_mgr()
         self.init_vm_testpmd()
         self.init_guest_mgr()
-        self.init_query_script()
         # set branch ratio test value
         self.check_core = int(self.vcpu_map[0])
+        self.cur_cpu_freq = None
         # used to control testing range. When run with full test, cover all
         # possible command line options combination, it will be long time.
         self.full_test = False
-- 
2.21.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: optimize script
  2020-02-26  7:55 [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: optimize script yufengmx
  2020-02-26  7:55 ` [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: " yufengmx
@ 2020-02-26  7:58 ` Mo, YufengX
  1 sibling, 0 replies; 4+ messages in thread
From: Mo, YufengX @ 2020-02-26  7:58 UTC (permalink / raw)
  To: dts, Yao, Lei A

[-- Attachment #1: Type: text/plain, Size: 777 bytes --]

tested-by:  yufengx.mo@intel.com

> -----Original Message-----
> From: Mo, YufengX
> Sent: Wednesday, February 26, 2020 3:56 PM
> To: dts@dpdk.org; Yao, Lei A <lei.a.yao@intel.com>
> Cc: Mo, YufengX <yufengx.mo@intel.com>
> Subject: [dts][PATCH V1 0/1] vm_pw_mgmt_policy: optimize script
> 
> *. use hwclock command to take the place of clock command for os compatibility.
> *. set longer clock command timeout.
> *. use pktgen new callback function to take the place of shell script query.
> *. fix vcpu/pcpu mapping.
> *. python3 support.
> 
> yufengmx (1):
>   tests/vm_pw_mgmt_policy: optimize script
> 
>  tests/TestSuite_vm_pw_mgmt_policy.py | 84 ++++++++--------------------
>  1 file changed, 23 insertions(+), 61 deletions(-)
> 
> --
> 2.21.0


[-- Attachment #2: TestVmPwMgmtPolicy.log --]
[-- Type: application/octet-stream, Size: 528984 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: optimize script
  2020-02-26  7:55 ` [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: " yufengmx
@ 2020-03-03  5:41   ` Tu, Lijuan
  0 siblings, 0 replies; 4+ messages in thread
From: Tu, Lijuan @ 2020-03-03  5:41 UTC (permalink / raw)
  To: Mo, YufengX, dts, Yao, Lei A; +Cc: Mo, YufengX

Applied, thanks

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of yufengmx
> Sent: Wednesday, February 26, 2020 3:56 PM
> To: dts@dpdk.org; Yao, Lei A <lei.a.yao@intel.com>
> Cc: Mo, YufengX <yufengx.mo@intel.com>
> Subject: [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: optimize script
> 
> 
> *. use hwclock command to take the place of clock command for os
> compatibility.
> *. set longer clock command timeout.
> *. use pktgen new callback function to take the place of shell script query.
> *. fix vcpu/pcpu mapping.
> *. python3 support.
> 
> Signed-off-by: yufengmx <yufengx.mo@intel.com>
> ---
>  tests/TestSuite_vm_pw_mgmt_policy.py | 84 ++++++++--------------------
>  1 file changed, 23 insertions(+), 61 deletions(-)
> 
> diff --git a/tests/TestSuite_vm_pw_mgmt_policy.py
> b/tests/TestSuite_vm_pw_mgmt_policy.py
> index 076046b..8da21b6 100644
> --- a/tests/TestSuite_vm_pw_mgmt_policy.py
> +++ b/tests/TestSuite_vm_pw_mgmt_policy.py
> @@ -1,6 +1,6 @@
>  # BSD LICENSE
>  #
> -# Copyright(c) 2010-2019 Intel Corporation. All rights reserved.
> +# Copyright(c) 2010-2020 Intel Corporation. All rights reserved.
>  # All rights reserved.
>  #
>  # Redistribution and use in source and binary forms, with or without @@ -
> 173,6 +173,7 @@ class TestVmPwMgmtPolicy(TestCase):
>              for layer in list(pkt_layers.keys()):
>                  pkt.config_layer(layer, pkt_layers[layer])
>              streams.append(pkt.pktgen.pkt)
> +            self.logger.debug(pkt.pktgen.pkt.command())
> 
>          return streams
> 
> @@ -230,6 +231,8 @@ class TestVmPwMgmtPolicy(TestCase):
>              'rate_percent': rate,
>              'traffic_opt': {
>                  'method': 'throughput',
> +                'callback': self.query_cpu_freq,
> +                'interval': duration - 2,
>                  'duration': duration,
>              }}
>          # begin traffic checking
> @@ -320,7 +323,8 @@ class TestVmPwMgmtPolicy(TestCase):
>          self.verify(self.vm_dut, "create vm_dut fail !")
>          self.add_console(self.vm_dut.session)
>          # get virtual machine cpu cores
> -        self.vcpu_map = self.vm.get_vm_cpu()
> +        _vcpu_map = self.vm.get_vm_cpu()
> +        self.vcpu_map = [int(item) for item  in _vcpu_map]
> 
>      def close_vm(self):
>          # close vm
> @@ -403,7 +407,7 @@ class TestVmPwMgmtPolicy(TestCase):
>          time.sleep(2)
> 
>      def guest_set_vm_turbo_status(self, vcpu, status):
> -        vcpu_index = self.vcpu_map.index(str(self.check_core))
> +        vcpu_index = self.vcpu_map.index(self.check_core)
>          cmd = ["set_cpu_freq %d %s" % (vcpu_index, status),
>                 "vmpower\(guest\)>", 5]
>          output = self.vm_g_con(cmd)
> @@ -447,46 +451,12 @@ class TestVmPwMgmtPolicy(TestCase):
>          self.vm_testpmd.quit()
>          self.is_pmd_on = False
> 
> -    def init_query_script(self):
> -        self.query_cur_freq = os.path.join(
> -            self.output_path, 'cpu_cur_freq.log')
> -        script_content = textwrap.dedent("""
> -            # $1: core number
> -            sleep 8
> -            echo "begin get core "$1" current frequency " > {0}
> -            while :
> -            do
> -                sleep 1
> -                cat /sys/devices/system/cpu/cpu$1/cpufreq/cpuinfo_cur_freq >>
> {0}
> -            done
> -        """).format(self.query_cur_freq)
> -        fileName = 'vm_power_core.sh'
> -        query_script = os.path.join(self.output_path, fileName)
> -        with open(query_script, 'wb') as fp:
> -            fp.write('#!/bin/bash' + os.linesep + script_content)
> -        self.dut.session.copy_file_to(query_script, self.target_dir)
> -        self.query_tool = ';'.join([
> -            'cd {}'.format(self.target_dir),
> -            'chmod 777 {}'.format(fileName),
> -            './' + fileName])
> -
> -    def start_query(self, core):
> -        cmd = self.query_tool + ' {0} > /dev/null 2>&1 &'.format(core)
> -        self.d_a_con(cmd)
> -        self.is_query_on = True
> -
> -    def stop_query(self):
> -        if not self.is_query_on:
> -            return
> -        ps_name = os.path.basename(self.query_tool)
> -        cmd = "ps aux | grep -i '%s' | grep -v grep | awk {'print $2'}" % (
> -            ps_name)
> -        out = self.d_a_con(cmd)
> -        if out != "":
> -            cmd = 'pkill -f {}'.format(ps_name)
> -            self.d_a_con(cmd)
> -        self.is_query_on = False
> -        self.dut.session.copy_file_from(self.query_cur_freq, self.output_path)
> +    def query_cpu_freq(self):
> +        cmd = ("cat "
> +            "/sys/devices/system/cpu/cpu{}/cpufreq/cpuinfo_cur_freq").format(
> +            self.check_core)
> +        output = self.d_a_con(cmd)
> +        self.cur_cpu_freq = 0 if not output else
> + int(output.splitlines()[0])
> 
>      def set_desired_time(self, time_stage):
>          if not time_stage:
> @@ -504,8 +474,8 @@ class TestVmPwMgmtPolicy(TestCase):
>          cmd = ';'.join([
>              "{0}",
>              "{0} -s '{1}'",
> -            "clock -w"]).format(date_tool, timestamp)
> -        self.d_a_con(cmd)
> +            "hwclock -w"]).format(date_tool, timestamp)
> +        self.d_a_con([cmd, '# ', 20])
>          cmd = "{0} '+%H:00'".format(date_tool)
>          output = self.d_a_con(cmd)
>          msg = "desired time fails to set" \ @@ -529,9 +499,9 @@ class
> TestVmPwMgmtPolicy(TestCase):
>          cmd = ';'.join([
>              "{0}",
>              "{0} -s '{1}'",
> -            "clock -w",
> +            "hwclock -w",
>              "{0}", ]).format(date_tool, real_time)
> -        self.d_a_con(cmd)
> +        self.d_a_con([cmd, '# ', 20])
> 
>      def preset_core_freq(self):
>          info = self.cpu_info.get(self.check_core, {}) @@ -663,12 +633,8 @@
> class TestVmPwMgmtPolicy(TestCase):
>          low workload: minimum cpu frequency
>          '''
>          check_item = content.get('check')
> -        query_cur_freq = os.path.join(
> -            self.output_path, os.path.basename(self.query_cur_freq))
> -        with open(query_cur_freq, 'rb') as fp:
> -            content = fp.read()
> -        self.logger.debug(content)
> -        real_freq = int(content.splitlines()[2].strip())
> +        real_freq = self.cur_cpu_freq
> +        self.logger.warning(real_freq)
>          expected_freq = self.get_expected_freq(self.check_core, check_item)
>          msg = (
>              'core <{0}> freq <{1}> are not '
> @@ -692,7 +658,6 @@ class TestVmPwMgmtPolicy(TestCase):
> 
>      def run_test_post(self):
>          # close all binary processes
> -        self.stop_query()
>          self.close_vm_testpmd()
>          self.close_guest_mgr()
>          self.close_vm_power_mgr()
> @@ -703,12 +668,9 @@ class TestVmPwMgmtPolicy(TestCase):
>          self.start_guest_mgr(content.get('option', ''))
>          # set binary process command
>          self.guest_send_policy()
> -        # start query
> -        self.start_query(self.check_core)
> 
>      def run_guest_post(self):
>          # close guest
> -        self.stop_query()
>          self.close_guest_mgr()
> 
>      def traffic_policy(self, name, content):
> @@ -736,7 +698,7 @@ class TestVmPwMgmtPolicy(TestCase):
>                  # run time policy, wait 10 second to make sure system ready
>                  # and get enough query data
>                  time.sleep(15)
> -            self.stop_query()
> +                self.query_cpu_freq()
>              # check cpu core status
>              self.check_core_freq(content)
>          except Exception as e:
> @@ -833,7 +795,7 @@ class TestVmPwMgmtPolicy(TestCase):
>              keys = list(_common_config['option'].keys())
>              opt_fmt = _common_config['opt_fmt']
>              for item in product(*values):
> -                _options = dict(zip(keys, item))
> +                _options = dict(list(zip(keys, item)))
>                  _options['policy'] = policy_name
>                  _opt_fmt = " ".join(opt_fmt)
>                  _config = deepcopy(config) @@ -912,7 +874,7 @@ class
> TestVmPwMgmtPolicy(TestCase):
>          self.verify(status, msg)
> 
>      def preset_test_environment(self):
> -        self.is_mgr_on = self.is_pmd_on = self.is_query_on = None
> +        self.is_mgr_on = self.is_pmd_on = None
>          self.ext_con = {}
>          # get cpu cores information
>          self.dut.init_core_list_uncached_linux()
> @@ -929,9 +891,9 @@ class TestVmPwMgmtPolicy(TestCase):
>          self.init_vm_power_mgr()
>          self.init_vm_testpmd()
>          self.init_guest_mgr()
> -        self.init_query_script()
>          # set branch ratio test value
>          self.check_core = int(self.vcpu_map[0])
> +        self.cur_cpu_freq = None
>          # used to control testing range. When run with full test, cover all
>          # possible command line options combination, it will be long time.
>          self.full_test = False
> --
> 2.21.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-03-03  5:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-26  7:55 [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: optimize script yufengmx
2020-02-26  7:55 ` [dts] [PATCH V1 1/1] tests/vm_pw_mgmt_policy: " yufengmx
2020-03-03  5:41   ` Tu, Lijuan
2020-02-26  7:58 ` [dts] [PATCH V1 0/1] vm_pw_mgmt_policy: " Mo, YufengX

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).