From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Thomas Richter <tmricht@linux.vnet.ibm.com>
Cc: jolsa@redhat.com, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v2] RFC perf test 14 add platform dependency
Date: Fri, 16 Jun 2017 13:08:17 -0300 [thread overview]
Message-ID: <20170616160817.GD3645@kernel.org> (raw)
In-Reply-To: <20170613090937.72899-1-tmricht@linux.vnet.ibm.com>
Em Tue, Jun 13, 2017 at 11:09:37AM +0200, Thomas Richter escreveu:
> This is a proposal to add platform dependency into the
> test case 14 (perf_event_attr). It is based on a suggestion from
> Jiri Olsa.
> Add a new optional attribute named 'machine' in the [config] section
> of the test case file. It is a comma separated list of architecture
> names this test can be executed on. For example:
>
> machine = x86_64,alpha,ppc
Looks ok, Jiri?
- Arnaldo
> If this attribute is missing the test is executed on any platform.
> This does not break the current setup.
> The values listed for this attribute should be identical to
> uname -m output.
> If the list starts with an exclamation mark (!) the comparison is
> inverted, for example for
>
> machine = !s390x,ppc
>
> the test is not executed on s390x or ppc platforms.
> The exclamation mark must be at the beginnning of the list.
>
> Here is an example debug output:
> [root@s35lp76]# fgrep machine tests/attr/test-stat-C2
> machine = x86_64,alpha,ppc
> [root@s35lp76]# PERF_TEST_ATTR=/tmp /usr/bin/python2 ./tests/attr.py \
> -d ./tests/attr/ -p ./perf -vvvvv -t test-stat-C1
>
> provides the following output:
>
> running './tests/attr//test-stat-C1'
> test executed only on 'x86_64,alpha,ppc' <--- new
> loading expected events
> Event event:base-stat
> fd = 1
> group_fd = -1
> .....
> skipped [s390x] './tests/attr//test-stat-C1' <--- new
>
> The test is skipped with return code 0.
>
> Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
> ---
> tools/perf/tests/attr.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
>
> diff --git a/tools/perf/tests/attr.py b/tools/perf/tests/attr.py
> index d0242d8..6e71d52 100644
> --- a/tools/perf/tests/attr.py
> +++ b/tools/perf/tests/attr.py
> @@ -30,6 +30,13 @@ class Fail(Exception):
> def getMsg(self):
> return '\'%s\' - %s' % (self.test.path, self.msg)
>
> +class Notest(Exception):
> + def __init__(self, test, arch):
> + self.arch = arch
> + self.test = test
> + def getMsg(self):
> + return '[%s] \'%s\'' % (self.arch, self.test.path)
> +
> class Unsup(Exception):
> def __init__(self, test):
> self.test = test
> @@ -112,6 +119,7 @@ class Event(dict):
> # 'command' - perf command name
> # 'args' - special command arguments
> # 'ret' - expected command return value (0 by default)
> +# 'machine' - machine specific test
> #
> # [eventX:base]
> # - one or multiple instances in file
> @@ -134,6 +142,12 @@ class Test(object):
> except:
> self.ret = 0
>
> + try:
> + self.machine = parser.get('config', 'machine')
> + log.warning("test limitation '%s'" % self.machine)
> + except:
> + self.machine = ''
> +
> self.expect = {}
> self.result = {}
> log.debug(" loading expected events");
> @@ -145,6 +159,30 @@ class Test(object):
> else:
> return True
>
> + def skip_test(self, arch):
> + # If architecture not set always run test
> + if self.machine == '':
> + return False
> +
> + # Allow multiple values in assignment separated by ','
> + machine_list = self.machine.split(',')
> +
> + # Handle negated list such as !s390x,ppc
> + if machine_list[0][0] == '!':
> + machine_list[0] = machine_list[0][1:]
> + log.warning("excluded machine_list %s" % machine_list)
> + for machine_item in machine_list:
> + # log.warning("test for %s arch is %s" % (machine_item, arch))
> + if machine_item == arch:
> + return True
> + return False
> +
> + for machine_item in machine_list:
> + # log.warning("test for %s arch is %s" % (machine_item, arch))
> + if machine_item == arch:
> + return False
> + return True
> +
> def load_events(self, path, events):
> parser_event = ConfigParser.SafeConfigParser()
> parser_event.read(path)
> @@ -168,6 +206,11 @@ class Test(object):
> events[section] = e
>
> def run_cmd(self, tempdir):
> + junk1, junk2, junk3, junk4, arch = (os.uname())
> +
> + if self.skip_test(arch):
> + raise Notest(self, arch)
> +
> cmd = "PERF_TEST_ATTR=%s %s %s -o %s/perf.data %s" % (tempdir,
> self.perf, self.command, tempdir, self.args)
> ret = os.WEXITSTATUS(os.system(cmd))
> @@ -267,6 +310,8 @@ def run_tests(options):
> Test(f, options).run()
> except Unsup, obj:
> log.warning("unsupp %s" % obj.getMsg())
> + except Notest, obj:
> + log.warning("skipped %s" % obj.getMsg())
>
> def setup_log(verbose):
> global log
> --
> 2.9.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-06-16 16:08 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-13 9:09 [PATCH v2] RFC perf test 14 add platform dependency Thomas Richter
2017-06-16 16:08 ` Arnaldo Carvalho de Melo [this message]
2017-06-18 22:51 ` Jiri Olsa
2017-06-19 20:59 ` Jiri Olsa
2017-06-20 1:40 ` Arnaldo Carvalho de Melo
2017-06-20 8:12 ` Thomas-Mich Richter
2017-06-20 9:24 ` Jiri Olsa
2017-06-20 14:06 ` Thomas-Mich Richter
2017-06-20 14:48 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170616160817.GD3645@kernel.org \
--to=acme@kernel.org \
--cc=jolsa@redhat.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=tmricht@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.