* [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 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
* 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
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).