lkml.org 
[lkml]   [2017]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/6] perf tools: Add unit_number__scnprint function
    Em Mon, Jan 09, 2017 at 10:51:55AM +0100, Jiri Olsa escreveu:
    > Adding unit_number__scnprint function to display

    Renaming to unit_number__scnprintf() for consistency.

    - Arnaldo

    > size units and use it in -m option info message.
    >
    > Before:
    > $ perf record -m 10M ls
    > rounding mmap pages size to 16777216 bytes (4096 pages)
    > ...
    >
    > After:
    > $ perf record -m 10M ls
    > rounding mmap pages size to 16M (4096 pages)
    > ...
    >
    > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    > Cc: David Ahern <dsahern@gmail.com>
    > Cc: Namhyung Kim <namhyung@kernel.org>
    > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    > Cc: Wang Nan <wangnan0@huawei.com>
    > Link: http://lkml.kernel.org/n/tip-0gafw11lesghnbfoiw90kc3q@git.kernel.org
    > ---
    > tools/perf/tests/Build | 1 +
    > tools/perf/tests/builtin-test.c | 4 ++++
    > tools/perf/tests/tests.h | 1 +
    > tools/perf/tests/unit_number__scnprint.c | 37 ++++++++++++++++++++++++++++++++
    > tools/perf/util/evlist.c | 8 +++++--
    > tools/perf/util/util.c | 13 +++++++++++
    > tools/perf/util/util.h | 1 +
    > 7 files changed, 63 insertions(+), 2 deletions(-)
    > create mode 100644 tools/perf/tests/unit_number__scnprint.c
    >
    > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
    > index 6676c2dd6dcb..4f653d257225 100644
    > --- a/tools/perf/tests/Build
    > +++ b/tools/perf/tests/Build
    > @@ -44,6 +44,7 @@ perf-y += is_printable_array.o
    > perf-y += bitmap.o
    > perf-y += perf-hooks.o
    > perf-y += clang.o
    > +perf-y += unit_number__scnprint.o
    >
    > $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build
    > $(call rule_mkdir)
    > diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
    > index a77dcc0d24e3..5d93c41803d3 100644
    > --- a/tools/perf/tests/builtin-test.c
    > +++ b/tools/perf/tests/builtin-test.c
    > @@ -247,6 +247,10 @@ static struct test generic_tests[] = {
    > }
    > },
    > {
    > + .desc = "unit_number__scnprint",
    > + .func = test__unit_number__scnprint,
    > + },
    > + {
    > .func = NULL,
    > },
    > };
    > diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
    > index a512f0c8ff5b..1fa9b9d83aa5 100644
    > --- a/tools/perf/tests/tests.h
    > +++ b/tools/perf/tests/tests.h
    > @@ -96,6 +96,7 @@ int test__perf_hooks(int subtest);
    > int test__clang(int subtest);
    > const char *test__clang_subtest_get_desc(int subtest);
    > int test__clang_subtest_get_nr(void);
    > +int test__unit_number__scnprint(int subtest);
    >
    > #if defined(__arm__) || defined(__aarch64__)
    > #ifdef HAVE_DWARF_UNWIND_SUPPORT
    > diff --git a/tools/perf/tests/unit_number__scnprint.c b/tools/perf/tests/unit_number__scnprint.c
    > new file mode 100644
    > index 000000000000..b336024b6c6a
    > --- /dev/null
    > +++ b/tools/perf/tests/unit_number__scnprint.c
    > @@ -0,0 +1,37 @@
    > +#include <linux/compiler.h>
    > +#include <linux/types.h>
    > +#include "tests.h"
    > +#include "util.h"
    > +#include "debug.h"
    > +
    > +int test__unit_number__scnprint(int subtest __maybe_unused)
    > +{
    > + struct {
    > + u64 n;
    > + const char *str;
    > + } test[] = {
    > + { 1, "1B" },
    > + { 10*1024, "10K" },
    > + { 20*1024*1024, "20M" },
    > + { 30*1024*1024*1024ULL, "30G" },
    > + { 0, "0B" },
    > + { 0, NULL },
    > + };
    > + unsigned i = 0;
    > +
    > + while (test[i].str) {
    > + char buf[100];
    > +
    > + unit_number__scnprint(buf, sizeof(buf), test[i].n);
    > +
    > + pr_debug("n %" PRIu64 ", str '%s', buf '%s'\n",
    > + test[i].n, test[i].str, buf);
    > +
    > + if (strcmp(test[i].str, buf))
    > + return TEST_FAIL;
    > +
    > + i++;
    > + }
    > +
    > + return TEST_OK;
    > +}
    > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
    > index d92e02006fb8..435ff1c94a66 100644
    > --- a/tools/perf/util/evlist.c
    > +++ b/tools/perf/util/evlist.c
    > @@ -1224,12 +1224,16 @@ static long parse_pages_arg(const char *str, unsigned long min,
    > if (pages == 0 && min == 0) {
    > /* leave number of pages at 0 */
    > } else if (!is_power_of_2(pages)) {
    > + char buf[100];
    > +
    > /* round pages up to next power of 2 */
    > pages = roundup_pow_of_two(pages);
    > if (!pages)
    > return -EINVAL;
    > - pr_info("rounding mmap pages size to %lu bytes (%lu pages)\n",
    > - pages * page_size, pages);
    > +
    > + unit_number__scnprint(buf, sizeof(buf), pages * page_size);
    > + pr_info("rounding mmap pages size to %s (%lu pages)\n",
    > + buf, pages);
    > }
    >
    > if (pages > max)
    > diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c
    > index 9ddd98827d12..c2b941dd8826 100644
    > --- a/tools/perf/util/util.c
    > +++ b/tools/perf/util/util.c
    > @@ -789,3 +789,16 @@ int is_printable_array(char *p, unsigned int len)
    > }
    > return 1;
    > }
    > +
    > +int unit_number__scnprint(char *buf, size_t size, u64 n)
    > +{
    > + char unit[4] = "BKMG";
    > + int i = 0;
    > +
    > + while (((n / 1024) > 1) && (i < 3)) {
    > + n /= 1024;
    > + i++;
    > + }
    > +
    > + return scnprintf(buf, size, "%" PRIu64 "%c", n, unit[i]);
    > +}
    > diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
    > index 1d639e38aa82..e2a627cd11dd 100644
    > --- a/tools/perf/util/util.h
    > +++ b/tools/perf/util/util.h
    > @@ -363,4 +363,5 @@ int is_printable_array(char *p, unsigned int len);
    >
    > int timestamp__scnprintf_usec(u64 timestamp, char *buf, size_t sz);
    >
    > +int unit_number__scnprint(char *buf, size_t size, u64 n);
    > #endif /* GIT_COMPAT_UTIL_H */
    > --
    > 2.7.4

    \
     
     \ /
      Last update: 2017-01-10 14:23    [W:4.911 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site