linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

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