From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1763070AbdAJNWo (ORCPT ); Tue, 10 Jan 2017 08:22:44 -0500 Received: from mail.kernel.org ([198.145.29.136]:57368 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753878AbdAJNWn (ORCPT ); Tue, 10 Jan 2017 08:22:43 -0500 Date: Tue, 10 Jan 2017 10:22:36 -0300 From: Arnaldo Carvalho de Melo To: Jiri Olsa Cc: David Ahern , Namhyung Kim , Peter Zijlstra , Wang Nan , lkml , Ingo Molnar Subject: Re: [PATCH 1/6] perf tools: Add unit_number__scnprint function Message-ID: <20170110132236.GB24073@kernel.org> References: <1483955520-29063-1-git-send-email-jolsa@kernel.org> <1483955520-29063-2-git-send-email-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1483955520-29063-2-git-send-email-jolsa@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.7.1 (2016-10-04) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > Cc: David Ahern > Cc: Namhyung Kim > Cc: Peter Zijlstra > Cc: Wang Nan > 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 > +#include > +#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