* [dts] [PATCH V1 0/1] tests/power_pbf: python3 support and script optimize
@ 2020-03-23 2:10 yufengmx
2020-03-23 2:10 ` [dts] [PATCH V1 1/1] " yufengmx
2020-03-23 2:20 ` [dts] [PATCH V1 0/1] " Mo, YufengX
0 siblings, 2 replies; 5+ messages in thread
From: yufengmx @ 2020-03-23 2:10 UTC (permalink / raw)
To: dts, lei.a.yao; +Cc: yufengmx
. python3 support.
. use ^C to take the place of killall.
. unify session method name.
. unify exception catch process.
yufengmx (1):
tests/power_pbf: python3 support and script optimize
tests/TestSuite_power_pbf.py | 119 ++++++++++++++++++++++-------------
1 file changed, 77 insertions(+), 42 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [dts] [PATCH V1 1/1] tests/power_pbf: python3 support and script optimize
2020-03-23 2:10 [dts] [PATCH V1 0/1] tests/power_pbf: python3 support and script optimize yufengmx
@ 2020-03-23 2:10 ` yufengmx
2020-03-24 6:51 ` Tu, Lijuan
2020-03-23 2:20 ` [dts] [PATCH V1 0/1] " Mo, YufengX
1 sibling, 1 reply; 5+ messages in thread
From: yufengmx @ 2020-03-23 2:10 UTC (permalink / raw)
To: dts, lei.a.yao; +Cc: yufengmx
#. python3 support.
#. use ^C to take the place of killall.
#. unify session method name.
#. unify exception catch process.
Signed-off-by: yufengmx <yufengx.mo@intel.com>
---
tests/TestSuite_power_pbf.py | 119 ++++++++++++++++++++++-------------
1 file changed, 77 insertions(+), 42 deletions(-)
diff --git a/tests/TestSuite_power_pbf.py b/tests/TestSuite_power_pbf.py
index 3c281bc..0f312f5 100644
--- a/tests/TestSuite_power_pbf.py
+++ b/tests/TestSuite_power_pbf.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
@@ -35,11 +35,13 @@ import random
import json
import re
import shutil
+import traceback
from collections import Counter
from pprint import pformat
# import dts libs
from test_case import TestCase
+from exception import VerifyFailure
from utils import create_mask
@@ -61,7 +63,7 @@ class TestPowerPbf(TestCase):
@property
def output_path(self):
- suiteName = self.__class__.__name__[4:].lower()
+ suiteName = self.suite_name
if self.logger.log_path.startswith(os.sep):
output_path = os.path.join(self.logger.log_path, suiteName)
else:
@@ -95,10 +97,8 @@ class TestPowerPbf(TestCase):
for item in cmds:
expected_items = item[1]
if expected_items and isinstance(expected_items, (list, tuple)):
- check_output = True
expected_str = expected_items[0] or '# '
else:
- check_output = False
expected_str = expected_items or '# '
try:
@@ -120,10 +120,10 @@ class TestPowerPbf(TestCase):
time.sleep(2)
return outputs
- def d_console(self, cmds):
+ def d_con(self, cmds):
return self.execute_cmds(cmds, con_name='dut')
- def d_a_console(self, cmds):
+ def d_a_con(self, cmds):
return self.execute_cmds(cmds, con_name='dut_alt')
def get_cores_mask(self, config='all'):
@@ -140,13 +140,13 @@ class TestPowerPbf(TestCase):
self.verify("No such" not in out, "Compilation error")
binary_dir = os.path.join(self.target_dir, example_dir, 'build')
cmd = ["ls -F {0} | grep '*'".format(binary_dir), '# ', 5]
- exec_file = self.d_a_console(cmd)
+ exec_file = self.d_a_con(cmd)
binary_file = os.path.join(binary_dir, exec_file[:-1])
return binary_file
def create_powermonitor_folder(self):
cmd = 'mkdir -p {0}; chmod 777 {0}'.format('/tmp/powermonitor')
- self.d_console(cmd)
+ self.d_con(cmd)
def init_test_binary_file(self):
self.create_powermonitor_folder()
@@ -155,43 +155,56 @@ class TestPowerPbf(TestCase):
"CONFIG_RTE_LIBRTE_POWER_DEBUG=n$/"
"CONFIG_RTE_LIBRTE_POWER_DEBUG=y/"
"' {0}/config/common_base").format(self.target_dir)
- self.d_a_console(cmd)
+ self.d_a_con(cmd)
self.dut.skip_setup = False
self.dut.build_install_dpdk(self.target)
# set up vm power management binary process setting
self.vm_power_mgr = self.prepare_binary('vm_power_manager')
# set up distributor binary process setting
self.distributor = self.prepare_binary('distributor')
+ self.is_mgr_on = self.is_distributor_on = None
def start_vm_power_mgr(self):
+ if self.is_mgr_on:
+ return
bin_file = os.sep.join([self.target_dir, ''])
config = "1S/4C/1T"
- eal_option = '-c {0} -n {1} --file-prefix=vmpower --no-pci'.format(
+ option = '-v -c {0} -n {1} --file-prefix=vmpower --no-pci'.format(
self.get_cores_mask(config),
self.memory_channels)
prompt = 'vmpower>'
- cmd = [' '.join([self.vm_power_mgr, eal_option]), prompt, 30]
- output = self.d_console(cmd)
+ cmd = [' '.join([self.vm_power_mgr, option]), prompt, 30]
+ output = self.d_con(cmd)
+ self.is_mgr_on = True
+
return output
def close_vm_power_mgr(self):
- output = self.d_console('quit')
+ if not self.is_mgr_on:
+ return
+ output = self.d_con('quit')
+ self.is_mgr_on = False
return output
def start_distributor(self, high_core_num=1):
+ if self.is_distributor_on:
+ return
cores_mask, high_freq_cores = self.get_high_freq_core_mask(
high_core_num)
- eal_option = ' -c {0} -n {1} -- -p 0x1'.format(
+ option = '-v -c {0} -n {1} -- -p 0x1'.format(
cores_mask, self.memory_channels)
prompt = 'Distributor thread'
- cmd = [' '.join([self.distributor, eal_option]), prompt, 30]
- output = self.d_console(cmd)
+ cmd = [' '.join([self.distributor, option]), prompt, 30]
+ output = self.d_con(cmd)
+ self.is_distributor_on = True
return high_freq_cores, output
def close_distributor(self):
- cmds = ['killall distributor_app', '# ', 10]
- output = self.d_a_console(cmds)
- return output
+ if not self.is_distributor_on:
+ return
+ cmd = "^C"
+ self.d_con(cmd)
+ self.is_distributor_on = False
def __preset_single_core_json_cmd(self, core_index, unit, name):
command = {
@@ -205,7 +218,7 @@ class TestPowerPbf(TestCase):
json_file = os.sep.join([self.output_path, json_name])
with open(json_file, 'w') as fp:
json.dump(command, fp, indent=4, separators=(',', ': '),
- encoding="utf-8", sort_keys=True)
+ sort_keys=True)
fp.write(os.linesep)
self.dut.session.copy_file_to(json_file, self.target_dir)
# save a backup json file to retrace test command
@@ -230,30 +243,30 @@ class TestPowerPbf(TestCase):
for core_index in _cores:
cmds.append(
self.__preset_single_core_json_cmd(core_index, unit, name))
- self.d_a_console(';'.join(cmds))
+ self.d_a_con(';'.join(cmds))
def get_core_cur_freq(self, core_index):
cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/scaling_cur_freq'
cmd = 'cat ' + cpu_attr.format(core_index)
- output = self.d_a_console(cmd)
+ output = self.d_a_con(cmd)
return int(output)
def get_core_scaling_max_freq(self, core_index):
cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/scaling_max_freq'
cmd = 'cat ' + cpu_attr.format(core_index)
- output = self.d_a_console(cmd)
+ output = self.d_a_con(cmd)
return int(output)
def get_core_scaling_min_freq(self, core_index):
cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/scaling_min_freq'
cmd = 'cat ' + cpu_attr.format(core_index)
- output = self.d_a_console(cmd)
+ output = self.d_a_con(cmd)
return int(output)
def get_core_scaling_base_freq(self, core_index):
cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/base_frequency'
cmd = 'cat ' + cpu_attr.format(core_index)
- output = self.d_a_console(cmd)
+ output = self.d_a_con(cmd)
return int(output)
@property
@@ -261,15 +274,15 @@ class TestPowerPbf(TestCase):
# check if cpu support bpf feature
cpu_attr = r'/sys/devices/system/cpu/cpu0/cpufreq/base_frequency'
cmd = "ls {0}".format(cpu_attr)
- self.d_a_console(cmd)
+ self.d_a_con(cmd)
cmd = "echo $?"
- output = self.d_a_console(cmd)
+ output = self.d_a_con(cmd)
ret = True if output == "0" else False
return ret
def get_sys_power_driver(self):
drv_file = r"/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver"
- output = self.d_a_console('cat ' + drv_file)
+ output = self.d_a_con('cat ' + drv_file)
if not output:
msg = 'unknown power driver'
self.verify(False, msg)
@@ -295,7 +308,7 @@ class TestPowerPbf(TestCase):
cmds = []
for cpu_id in sorted(cpu_info.keys()):
cmds.append('cat {0}'.format(freq(cpu_id, key_value)))
- output = self.d_a_console(';'.join(cmds))
+ output = self.d_a_con(';'.join(cmds))
freqs = [int(item) for item in output.splitlines()]
for index, cpu_id in enumerate(sorted(cpu_info.keys())):
cpu_info[cpu_id][key_value] = freqs[index]
@@ -334,9 +347,9 @@ class TestPowerPbf(TestCase):
def get_high_freq_core_mask(self, number=1, min_cores=5):
index_list = []
# get high frequency core first
- cores_index = self.get_high_freq_cores_index(number)
+ cores_index = self.get_high_freq_cores_index(number + 1)
[index_list.append(core_index) for core_index in cores_index]
- high_freq_cores = index_list[:]
+ high_freq_cores = index_list[1:]
# get normal cores to make sure minimum cores are enough
cores_index = self.get_normal_cores_index()
for core_index in cores_index:
@@ -428,6 +441,7 @@ class TestPowerPbf(TestCase):
SCALE_MIN
Check the CPU frequency is changed accordingly in this list
'''
+ except_content = None
try:
self.start_vm_power_mgr()
# random select one high priority core to run testing
@@ -446,10 +460,14 @@ class TestPowerPbf(TestCase):
# test cpu core frequency change with unit command
for test_item in test_items:
self.check_core_freq_for_unit(*test_item)
- self.close_vm_power_mgr()
except Exception as e:
+ self.logger.error(traceback.format_exc())
+ except_content = e
+ finally:
self.close_vm_power_mgr()
- raise Exception(e)
+
+ if except_content:
+ raise VerifyFailure(except_content)
def verify_high_priority_core_turbo_status(self):
'''
@@ -460,6 +478,7 @@ class TestPowerPbf(TestCase):
ENABLE_TURBO
Check the CPU frequency is changed accordingly in this list
'''
+ except_content = None
try:
self.start_vm_power_mgr()
# random select one high priority core to run testing
@@ -473,15 +492,20 @@ class TestPowerPbf(TestCase):
# test cpu core frequency change with unit command
for test_item in test_items:
self.check_core_freq_for_unit(*test_item)
- self.close_vm_power_mgr()
except Exception as e:
+ self.logger.error(traceback.format_exc())
+ except_content = e
+ finally:
self.close_vm_power_mgr()
- raise Exception(e)
+
+ if except_content:
+ raise VerifyFailure(except_content)
def verify_distributor_high_priority_core(self):
'''
check distributor example use high priority core as distribute core
'''
+ except_content = None
try:
high_freq_cores, output = self.start_distributor()
self.close_distributor()
@@ -490,19 +514,25 @@ class TestPowerPbf(TestCase):
self.verify(expected_str in output,
"'{}' not display".format(expected_str))
except Exception as e:
+ self.logger.error(traceback.format_exc())
+ except_content = e
+ finally:
self.close_distributor()
- raise Exception(e)
+
+ if except_content:
+ raise VerifyFailure(except_content)
def verify_distributor_high_priority_core_txrx(self):
'''
check distributor sample will use high priority core for
distribute core and rx/tx core
'''
+ except_content = None
try:
high_freq_cores, output = self.start_distributor(3)
self.close_distributor()
# check the high priority core are assigned as rx core in log
- pat = 'Core (\\d+) doing packet RX.'
+ pat = 'Core (\d+) doing packet RX.'
result = re.findall(pat, output, re.M)
if len(result) == 1:
core_index = int(result[0])
@@ -512,7 +542,7 @@ class TestPowerPbf(TestCase):
msg = "No high frequency core doing packet RX"
self.verify(core_index in high_freq_cores, msg)
# Check the high priority core are assigned as tx core in log
- pat = 'Core (\\d+) doing packet TX.'
+ pat = 'Core (\d+) doing packet TX.'
result = re.findall(pat, output, re.M)
if len(result) == 1:
core_index = int(result[0])
@@ -523,7 +553,7 @@ class TestPowerPbf(TestCase):
self.verify(core_index in high_freq_cores, msg)
# check the high priority core is assigned as distributor core in
# log
- pat = r'Core (\\d+) acting as distributor core.'
+ pat = r'Core (\d+) acting as distributor core.'
result = re.findall(pat, output, re.M)
if len(result) == 1:
core_index = int(result[0])
@@ -533,8 +563,13 @@ class TestPowerPbf(TestCase):
msg = "No high frequency core acting as distributor core"
self.verify(core_index in high_freq_cores, msg)
except Exception as e:
+ self.logger.error(traceback.format_exc())
+ except_content = e
+ finally:
self.close_distributor()
- raise Exception(e)
+
+ if except_content:
+ raise VerifyFailure(except_content)
def verify_pbf_supported(self):
if self.is_support_pbf:
@@ -543,7 +578,7 @@ class TestPowerPbf(TestCase):
raise Exception(msg)
def verify_power_driver(self):
- expected_drv = 'acpi-cpufreq'
+ expected_drv = 'intel_pstate'
power_drv = self.get_sys_power_driver()
msg = "power pbf should work with {} driver".format(expected_drv)
self.verify(power_drv == expected_drv, msg)
@@ -560,7 +595,7 @@ class TestPowerPbf(TestCase):
self.dut_ports = self.dut.get_ports()
self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
# get dut node cores information
- self.d_a_console('modprobe msr')
+ self.d_a_con('modprobe msr')
self.dut.init_core_list_uncached_linux()
# check if cpu support bpf feature
self.verify_pbf_supported()
--
2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dts] [PATCH V1 0/1] tests/power_pbf: python3 support and script optimize
2020-03-23 2:10 [dts] [PATCH V1 0/1] tests/power_pbf: python3 support and script optimize yufengmx
2020-03-23 2:10 ` [dts] [PATCH V1 1/1] " yufengmx
@ 2020-03-23 2:20 ` Mo, YufengX
2020-03-25 1:46 ` Yao, Lei A
1 sibling, 1 reply; 5+ messages in thread
From: Mo, YufengX @ 2020-03-23 2:20 UTC (permalink / raw)
To: dts, Yao, Lei A
Tested by: Mo, YufengX <yufengx.mo@intel.com>
> -----Original Message-----
> From: Mo, YufengX
> Sent: Monday, March 23, 2020 10:10 AM
> 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] tests/power_pbf: python3 support and script optimize
>
>
> . python3 support.
>
> . use ^C to take the place of killall.
>
> . unify session method name.
>
> . unify exception catch process.
>
> yufengmx (1):
> tests/power_pbf: python3 support and script optimize
>
> tests/TestSuite_power_pbf.py | 119 ++++++++++++++++++++++-------------
> 1 file changed, 77 insertions(+), 42 deletions(-)
>
> --
> 2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dts] [PATCH V1 1/1] tests/power_pbf: python3 support and script optimize
2020-03-23 2:10 ` [dts] [PATCH V1 1/1] " yufengmx
@ 2020-03-24 6:51 ` Tu, Lijuan
0 siblings, 0 replies; 5+ messages in thread
From: Tu, Lijuan @ 2020-03-24 6:51 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: Monday, March 23, 2020 10:10 AM
> 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/power_pbf: python3 support and script
> optimize
>
>
> #. python3 support.
> #. use ^C to take the place of killall.
> #. unify session method name.
> #. unify exception catch process.
>
> Signed-off-by: yufengmx <yufengx.mo@intel.com>
> ---
> tests/TestSuite_power_pbf.py | 119 ++++++++++++++++++++++-------------
> 1 file changed, 77 insertions(+), 42 deletions(-)
>
> diff --git a/tests/TestSuite_power_pbf.py b/tests/TestSuite_power_pbf.py
> index 3c281bc..0f312f5 100644
> --- a/tests/TestSuite_power_pbf.py
> +++ b/tests/TestSuite_power_pbf.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 @@ -
> 35,11 +35,13 @@ import random import json import re import shutil
> +import traceback
> from collections import Counter
> from pprint import pformat
>
> # import dts libs
> from test_case import TestCase
> +from exception import VerifyFailure
> from utils import create_mask
>
>
> @@ -61,7 +63,7 @@ class TestPowerPbf(TestCase):
>
> @property
> def output_path(self):
> - suiteName = self.__class__.__name__[4:].lower()
> + suiteName = self.suite_name
> if self.logger.log_path.startswith(os.sep):
> output_path = os.path.join(self.logger.log_path, suiteName)
> else:
> @@ -95,10 +97,8 @@ class TestPowerPbf(TestCase):
> for item in cmds:
> expected_items = item[1]
> if expected_items and isinstance(expected_items, (list, tuple)):
> - check_output = True
> expected_str = expected_items[0] or '# '
> else:
> - check_output = False
> expected_str = expected_items or '# '
>
> try:
> @@ -120,10 +120,10 @@ class TestPowerPbf(TestCase):
> time.sleep(2)
> return outputs
>
> - def d_console(self, cmds):
> + def d_con(self, cmds):
> return self.execute_cmds(cmds, con_name='dut')
>
> - def d_a_console(self, cmds):
> + def d_a_con(self, cmds):
> return self.execute_cmds(cmds, con_name='dut_alt')
>
> def get_cores_mask(self, config='all'):
> @@ -140,13 +140,13 @@ class TestPowerPbf(TestCase):
> self.verify("No such" not in out, "Compilation error")
> binary_dir = os.path.join(self.target_dir, example_dir, 'build')
> cmd = ["ls -F {0} | grep '*'".format(binary_dir), '# ', 5]
> - exec_file = self.d_a_console(cmd)
> + exec_file = self.d_a_con(cmd)
> binary_file = os.path.join(binary_dir, exec_file[:-1])
> return binary_file
>
> def create_powermonitor_folder(self):
> cmd = 'mkdir -p {0}; chmod 777 {0}'.format('/tmp/powermonitor')
> - self.d_console(cmd)
> + self.d_con(cmd)
>
> def init_test_binary_file(self):
> self.create_powermonitor_folder() @@ -155,43 +155,56 @@ class
> TestPowerPbf(TestCase):
> "CONFIG_RTE_LIBRTE_POWER_DEBUG=n$/"
> "CONFIG_RTE_LIBRTE_POWER_DEBUG=y/"
> "' {0}/config/common_base").format(self.target_dir)
> - self.d_a_console(cmd)
> + self.d_a_con(cmd)
> self.dut.skip_setup = False
> self.dut.build_install_dpdk(self.target)
> # set up vm power management binary process setting
> self.vm_power_mgr = self.prepare_binary('vm_power_manager')
> # set up distributor binary process setting
> self.distributor = self.prepare_binary('distributor')
> + self.is_mgr_on = self.is_distributor_on = None
>
> def start_vm_power_mgr(self):
> + if self.is_mgr_on:
> + return
> bin_file = os.sep.join([self.target_dir, ''])
> config = "1S/4C/1T"
> - eal_option = '-c {0} -n {1} --file-prefix=vmpower --no-pci'.format(
> + option = '-v -c {0} -n {1} --file-prefix=vmpower
> + --no-pci'.format(
> self.get_cores_mask(config),
> self.memory_channels)
> prompt = 'vmpower>'
> - cmd = [' '.join([self.vm_power_mgr, eal_option]), prompt, 30]
> - output = self.d_console(cmd)
> + cmd = [' '.join([self.vm_power_mgr, option]), prompt, 30]
> + output = self.d_con(cmd)
> + self.is_mgr_on = True
> +
> return output
>
> def close_vm_power_mgr(self):
> - output = self.d_console('quit')
> + if not self.is_mgr_on:
> + return
> + output = self.d_con('quit')
> + self.is_mgr_on = False
> return output
>
> def start_distributor(self, high_core_num=1):
> + if self.is_distributor_on:
> + return
> cores_mask, high_freq_cores = self.get_high_freq_core_mask(
> high_core_num)
> - eal_option = ' -c {0} -n {1} -- -p 0x1'.format(
> + option = '-v -c {0} -n {1} -- -p 0x1'.format(
> cores_mask, self.memory_channels)
> prompt = 'Distributor thread'
> - cmd = [' '.join([self.distributor, eal_option]), prompt, 30]
> - output = self.d_console(cmd)
> + cmd = [' '.join([self.distributor, option]), prompt, 30]
> + output = self.d_con(cmd)
> + self.is_distributor_on = True
> return high_freq_cores, output
>
> def close_distributor(self):
> - cmds = ['killall distributor_app', '# ', 10]
> - output = self.d_a_console(cmds)
> - return output
> + if not self.is_distributor_on:
> + return
> + cmd = "^C"
> + self.d_con(cmd)
> + self.is_distributor_on = False
>
> def __preset_single_core_json_cmd(self, core_index, unit, name):
> command = {
> @@ -205,7 +218,7 @@ class TestPowerPbf(TestCase):
> json_file = os.sep.join([self.output_path, json_name])
> with open(json_file, 'w') as fp:
> json.dump(command, fp, indent=4, separators=(',', ': '),
> - encoding="utf-8", sort_keys=True)
> + sort_keys=True)
> fp.write(os.linesep)
> self.dut.session.copy_file_to(json_file, self.target_dir)
> # save a backup json file to retrace test command @@ -230,30 +243,30
> @@ class TestPowerPbf(TestCase):
> for core_index in _cores:
> cmds.append(
> self.__preset_single_core_json_cmd(core_index, unit, name))
> - self.d_a_console(';'.join(cmds))
> + self.d_a_con(';'.join(cmds))
>
> def get_core_cur_freq(self, core_index):
> cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/scaling_cur_freq'
> cmd = 'cat ' + cpu_attr.format(core_index)
> - output = self.d_a_console(cmd)
> + output = self.d_a_con(cmd)
> return int(output)
>
> def get_core_scaling_max_freq(self, core_index):
> cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/scaling_max_freq'
> cmd = 'cat ' + cpu_attr.format(core_index)
> - output = self.d_a_console(cmd)
> + output = self.d_a_con(cmd)
> return int(output)
>
> def get_core_scaling_min_freq(self, core_index):
> cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/scaling_min_freq'
> cmd = 'cat ' + cpu_attr.format(core_index)
> - output = self.d_a_console(cmd)
> + output = self.d_a_con(cmd)
> return int(output)
>
> def get_core_scaling_base_freq(self, core_index):
> cpu_attr = r'/sys/devices/system/cpu/cpu{0}/cpufreq/base_frequency'
> cmd = 'cat ' + cpu_attr.format(core_index)
> - output = self.d_a_console(cmd)
> + output = self.d_a_con(cmd)
> return int(output)
>
> @property
> @@ -261,15 +274,15 @@ class TestPowerPbf(TestCase):
> # check if cpu support bpf feature
> cpu_attr = r'/sys/devices/system/cpu/cpu0/cpufreq/base_frequency'
> cmd = "ls {0}".format(cpu_attr)
> - self.d_a_console(cmd)
> + self.d_a_con(cmd)
> cmd = "echo $?"
> - output = self.d_a_console(cmd)
> + output = self.d_a_con(cmd)
> ret = True if output == "0" else False
> return ret
>
> def get_sys_power_driver(self):
> drv_file = r"/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver"
> - output = self.d_a_console('cat ' + drv_file)
> + output = self.d_a_con('cat ' + drv_file)
> if not output:
> msg = 'unknown power driver'
> self.verify(False, msg)
> @@ -295,7 +308,7 @@ class TestPowerPbf(TestCase):
> cmds = []
> for cpu_id in sorted(cpu_info.keys()):
> cmds.append('cat {0}'.format(freq(cpu_id, key_value)))
> - output = self.d_a_console(';'.join(cmds))
> + output = self.d_a_con(';'.join(cmds))
> freqs = [int(item) for item in output.splitlines()]
> for index, cpu_id in enumerate(sorted(cpu_info.keys())):
> cpu_info[cpu_id][key_value] = freqs[index] @@ -334,9 +347,9 @@
> class TestPowerPbf(TestCase):
> def get_high_freq_core_mask(self, number=1, min_cores=5):
> index_list = []
> # get high frequency core first
> - cores_index = self.get_high_freq_cores_index(number)
> + cores_index = self.get_high_freq_cores_index(number + 1)
> [index_list.append(core_index) for core_index in cores_index]
> - high_freq_cores = index_list[:]
> + high_freq_cores = index_list[1:]
> # get normal cores to make sure minimum cores are enough
> cores_index = self.get_normal_cores_index()
> for core_index in cores_index:
> @@ -428,6 +441,7 @@ class TestPowerPbf(TestCase):
> SCALE_MIN
> Check the CPU frequency is changed accordingly in this list
> '''
> + except_content = None
> try:
> self.start_vm_power_mgr()
> # random select one high priority core to run testing @@ -446,10
> +460,14 @@ class TestPowerPbf(TestCase):
> # test cpu core frequency change with unit command
> for test_item in test_items:
> self.check_core_freq_for_unit(*test_item)
> - self.close_vm_power_mgr()
> except Exception as e:
> + self.logger.error(traceback.format_exc())
> + except_content = e
> + finally:
> self.close_vm_power_mgr()
> - raise Exception(e)
> +
> + if except_content:
> + raise VerifyFailure(except_content)
>
> def verify_high_priority_core_turbo_status(self):
> '''
> @@ -460,6 +478,7 @@ class TestPowerPbf(TestCase):
> ENABLE_TURBO
> Check the CPU frequency is changed accordingly in this list
> '''
> + except_content = None
> try:
> self.start_vm_power_mgr()
> # random select one high priority core to run testing @@ -473,15
> +492,20 @@ class TestPowerPbf(TestCase):
> # test cpu core frequency change with unit command
> for test_item in test_items:
> self.check_core_freq_for_unit(*test_item)
> - self.close_vm_power_mgr()
> except Exception as e:
> + self.logger.error(traceback.format_exc())
> + except_content = e
> + finally:
> self.close_vm_power_mgr()
> - raise Exception(e)
> +
> + if except_content:
> + raise VerifyFailure(except_content)
>
> def verify_distributor_high_priority_core(self):
> '''
> check distributor example use high priority core as distribute core
> '''
> + except_content = None
> try:
> high_freq_cores, output = self.start_distributor()
> self.close_distributor()
> @@ -490,19 +514,25 @@ class TestPowerPbf(TestCase):
> self.verify(expected_str in output,
> "'{}' not display".format(expected_str))
> except Exception as e:
> + self.logger.error(traceback.format_exc())
> + except_content = e
> + finally:
> self.close_distributor()
> - raise Exception(e)
> +
> + if except_content:
> + raise VerifyFailure(except_content)
>
> def verify_distributor_high_priority_core_txrx(self):
> '''
> check distributor sample will use high priority core for
> distribute core and rx/tx core
> '''
> + except_content = None
> try:
> high_freq_cores, output = self.start_distributor(3)
> self.close_distributor()
> # check the high priority core are assigned as rx core in log
> - pat = 'Core (\\d+) doing packet RX.'
> + pat = 'Core (\d+) doing packet RX.'
> result = re.findall(pat, output, re.M)
> if len(result) == 1:
> core_index = int(result[0]) @@ -512,7 +542,7 @@ class
> TestPowerPbf(TestCase):
> msg = "No high frequency core doing packet RX"
> self.verify(core_index in high_freq_cores, msg)
> # Check the high priority core are assigned as tx core in log
> - pat = 'Core (\\d+) doing packet TX.'
> + pat = 'Core (\d+) doing packet TX.'
> result = re.findall(pat, output, re.M)
> if len(result) == 1:
> core_index = int(result[0]) @@ -523,7 +553,7 @@ class
> TestPowerPbf(TestCase):
> self.verify(core_index in high_freq_cores, msg)
> # check the high priority core is assigned as distributor core in
> # log
> - pat = r'Core (\\d+) acting as distributor core.'
> + pat = r'Core (\d+) acting as distributor core.'
> result = re.findall(pat, output, re.M)
> if len(result) == 1:
> core_index = int(result[0]) @@ -533,8 +563,13 @@ class
> TestPowerPbf(TestCase):
> msg = "No high frequency core acting as distributor core"
> self.verify(core_index in high_freq_cores, msg)
> except Exception as e:
> + self.logger.error(traceback.format_exc())
> + except_content = e
> + finally:
> self.close_distributor()
> - raise Exception(e)
> +
> + if except_content:
> + raise VerifyFailure(except_content)
>
> def verify_pbf_supported(self):
> if self.is_support_pbf:
> @@ -543,7 +578,7 @@ class TestPowerPbf(TestCase):
> raise Exception(msg)
>
> def verify_power_driver(self):
> - expected_drv = 'acpi-cpufreq'
> + expected_drv = 'intel_pstate'
> power_drv = self.get_sys_power_driver()
> msg = "power pbf should work with {} driver".format(expected_drv)
> self.verify(power_drv == expected_drv, msg) @@ -560,7 +595,7 @@
> class TestPowerPbf(TestCase):
> self.dut_ports = self.dut.get_ports()
> self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
> # get dut node cores information
> - self.d_a_console('modprobe msr')
> + self.d_a_con('modprobe msr')
> self.dut.init_core_list_uncached_linux()
> # check if cpu support bpf feature
> self.verify_pbf_supported()
> --
> 2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dts] [PATCH V1 0/1] tests/power_pbf: python3 support and script optimize
2020-03-23 2:20 ` [dts] [PATCH V1 0/1] " Mo, YufengX
@ 2020-03-25 1:46 ` Yao, Lei A
0 siblings, 0 replies; 5+ messages in thread
From: Yao, Lei A @ 2020-03-25 1:46 UTC (permalink / raw)
To: Mo, YufengX, dts
> -----Original Message-----
> From: Mo, YufengX <yufengx.mo@intel.com>
> Sent: Monday, March 23, 2020 10:20 AM
> To: dts@dpdk.org; Yao, Lei A <lei.a.yao@intel.com>
> Subject: RE: [dts][PATCH V1 0/1] tests/power_pbf: python3 support and
> script optimize
>
> Tested by: Mo, YufengX <yufengx.mo@intel.com>
Acked-by: Lei Yao <lei.a.yao@intel.com>
>
>
> > -----Original Message-----
> > From: Mo, YufengX
> > Sent: Monday, March 23, 2020 10:10 AM
> > 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] tests/power_pbf: python3 support and script
> optimize
> >
> >
> > . python3 support.
> >
> > . use ^C to take the place of killall.
> >
> > . unify session method name.
> >
> > . unify exception catch process.
> >
> > yufengmx (1):
> > tests/power_pbf: python3 support and script optimize
> >
> > tests/TestSuite_power_pbf.py | 119 ++++++++++++++++++++++----------
> ---
> > 1 file changed, 77 insertions(+), 42 deletions(-)
> >
> > --
> > 2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-03-25 1:46 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-23 2:10 [dts] [PATCH V1 0/1] tests/power_pbf: python3 support and script optimize yufengmx
2020-03-23 2:10 ` [dts] [PATCH V1 1/1] " yufengmx
2020-03-24 6:51 ` Tu, Lijuan
2020-03-23 2:20 ` [dts] [PATCH V1 0/1] " Mo, YufengX
2020-03-25 1:46 ` Yao, Lei A
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).