linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Unify scaling of counters obtained from perf_evsel__read()
@ 2021-11-29  9:06 Shunsuke
  2021-11-29  9:06 ` [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf Shunsuke
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Shunsuke @ 2021-11-29  9:06 UTC (permalink / raw)
  To: peterz, mingo, acme, mark.rutland, alexander.shishkin, jolsa,
	namhyung, robh
  Cc: linux-kernel, linux-perf-users

This patch series unifies the counters that can be obtained from
perf_evsel__read() to "no scaling".
The counter scaling will be done using a function moved from
tools/perf/util.

The first patch move perf_counts_values__scale from tools/perf/util
to tools/lib/perf so that it can be used with libperf.

The second patch removes the scaling process from
perf_mmap__read_self().

The third patch adds a verification test to make sure that it scales
correctly when multiplexed.

---
Previous version at:
https://lore.kernel.org/linux-perf-users/20211109085831.3770594-1-nakamura.shun@fujitsu.com/


Changes in v4:
 - Modify type s8 to type __s8

Changes in v3:
 - Move scaling process from tools/perf/util to tools/lib/perf
 - Remove scaling process from perf_mmap__read_self()
 - Remove scaling process for perf_mmap__read_self
 - Remove test to verify that no division by zero occurs

Changes in v2:
 - Fix not to divide by zero when counter scaling
 - Add test to verify that no division by zero occurs


[1] https://github.com/deater/perf_event_tests/blob/master/tests/rdpmc/rdpmc_multiplexing.c


Shunsuke Nakamura (3):
  libperf: Move perf_counts_values__scale to tools/lib/perf
  libperf: Remove scaling process from perf_mmap__read_self()
  libperf tests: Add test_stat_multiplexing test

 tools/lib/perf/evsel.c              |  19 ++++
 tools/lib/perf/include/perf/evsel.h |   4 +
 tools/lib/perf/libperf.map          |   1 +
 tools/lib/perf/mmap.c               |   2 -
 tools/lib/perf/tests/test-evlist.c  | 157 ++++++++++++++++++++++++++++
 tools/perf/util/evsel.c             |  19 ----
 tools/perf/util/evsel.h             |   3 -
 7 files changed, 181 insertions(+), 24 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf
  2021-11-29  9:06 [PATCH v4 0/3] Unify scaling of counters obtained from perf_evsel__read() Shunsuke
@ 2021-11-29  9:06 ` Shunsuke
  2021-12-07  7:28   ` nakamura.shun
  2021-11-29  9:06 ` [PATCH v4 2/3] libperf: Remove scaling process from perf_mmap__read_self() Shunsuke
  2021-11-29  9:06 ` [PATCH v4 3/3] libperf tests: Add test_stat_multiplexing test Shunsuke
  2 siblings, 1 reply; 5+ messages in thread
From: Shunsuke @ 2021-11-29  9:06 UTC (permalink / raw)
  To: peterz, mingo, acme, mark.rutland, alexander.shishkin, jolsa,
	namhyung, robh
  Cc: linux-kernel, linux-perf-users, Shunsuke Nakamura

From: Shunsuke Nakamura <nakamura.shun@fujitsu.com>

Move perf_counts_values__scale from tools/perf/util to tools/lib/perf
so that it can be used with libperf.

Signed-off-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
---
 tools/lib/perf/evsel.c              | 19 +++++++++++++++++++
 tools/lib/perf/include/perf/evsel.h |  4 ++++
 tools/lib/perf/libperf.map          |  1 +
 tools/perf/util/evsel.c             | 19 -------------------
 tools/perf/util/evsel.h             |  3 ---
 5 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/tools/lib/perf/evsel.c b/tools/lib/perf/evsel.c
index 8441e3e1aaac..782d1466df1f 100644
--- a/tools/lib/perf/evsel.c
+++ b/tools/lib/perf/evsel.c
@@ -431,3 +431,22 @@ void perf_evsel__free_id(struct perf_evsel *evsel)
 	zfree(&evsel->id);
 	evsel->ids = 0;
 }
+
+void perf_counts_values__scale(struct perf_counts_values *count,
+			       bool scale, __s8 *pscaled)
+{
+	__s8 scaled = 0;
+
+	if (scale) {
+		if (count->run == 0) {
+			scaled = -1;
+			count->val = 0;
+		} else if (count->run < count->ena) {
+			scaled = 1;
+			count->val = (u64)((double)count->val * count->ena / count->run);
+		}
+	}
+
+	if (pscaled)
+		*pscaled = scaled;
+}
diff --git a/tools/lib/perf/include/perf/evsel.h b/tools/lib/perf/include/perf/evsel.h
index 60eae25076d3..f401c7484bec 100644
--- a/tools/lib/perf/include/perf/evsel.h
+++ b/tools/lib/perf/include/perf/evsel.h
@@ -4,6 +4,8 @@
 
 #include <stdint.h>
 #include <perf/core.h>
+#include <stdbool.h>
+#include <linux/types.h>
 
 struct perf_evsel;
 struct perf_event_attr;
@@ -39,5 +41,7 @@ LIBPERF_API int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu);
 LIBPERF_API struct perf_cpu_map *perf_evsel__cpus(struct perf_evsel *evsel);
 LIBPERF_API struct perf_thread_map *perf_evsel__threads(struct perf_evsel *evsel);
 LIBPERF_API struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel);
+LIBPERF_API void perf_counts_values__scale(struct perf_counts_values *count,
+					   bool scale, __s8 *pscaled);
 
 #endif /* __LIBPERF_EVSEL_H */
diff --git a/tools/lib/perf/libperf.map b/tools/lib/perf/libperf.map
index 71468606e8a7..5979bf92d98f 100644
--- a/tools/lib/perf/libperf.map
+++ b/tools/lib/perf/libperf.map
@@ -50,6 +50,7 @@ LIBPERF_0.0.1 {
 		perf_mmap__read_init;
 		perf_mmap__read_done;
 		perf_mmap__read_event;
+		perf_counts_values__scale;
 	local:
 		*;
 };
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index ac0127be0459..656c30b988ce 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1476,25 +1476,6 @@ void evsel__compute_deltas(struct evsel *evsel, int cpu, int thread,
 	count->run = count->run - tmp.run;
 }
 
-void perf_counts_values__scale(struct perf_counts_values *count,
-			       bool scale, s8 *pscaled)
-{
-	s8 scaled = 0;
-
-	if (scale) {
-		if (count->run == 0) {
-			scaled = -1;
-			count->val = 0;
-		} else if (count->run < count->ena) {
-			scaled = 1;
-			count->val = (u64)((double) count->val * count->ena / count->run);
-		}
-	}
-
-	if (pscaled)
-		*pscaled = scaled;
-}
-
 static int evsel__read_one(struct evsel *evsel, int cpu, int thread)
 {
 	struct perf_counts_values *count = perf_counts(evsel->counts, cpu, thread);
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 29d49a8c1e92..99aa3363def7 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -195,9 +195,6 @@ static inline int evsel__nr_cpus(struct evsel *evsel)
 	return evsel__cpus(evsel)->nr;
 }
 
-void perf_counts_values__scale(struct perf_counts_values *count,
-			       bool scale, s8 *pscaled);
-
 void evsel__compute_deltas(struct evsel *evsel, int cpu, int thread,
 			   struct perf_counts_values *count);
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v4 2/3] libperf: Remove scaling process from perf_mmap__read_self()
  2021-11-29  9:06 [PATCH v4 0/3] Unify scaling of counters obtained from perf_evsel__read() Shunsuke
  2021-11-29  9:06 ` [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf Shunsuke
@ 2021-11-29  9:06 ` Shunsuke
  2021-11-29  9:06 ` [PATCH v4 3/3] libperf tests: Add test_stat_multiplexing test Shunsuke
  2 siblings, 0 replies; 5+ messages in thread
From: Shunsuke @ 2021-11-29  9:06 UTC (permalink / raw)
  To: peterz, mingo, acme, mark.rutland, alexander.shishkin, jolsa,
	namhyung, robh
  Cc: linux-kernel, linux-perf-users, Jiri Olsa, Shunsuke Nakamura

From: Shunsuke Nakamura <nakamura.shun@fujitsu.com>

Remove the scaling process from perf_mmap__read_self(), and unify the
counters that can be obtained from perf_evsel__read() to "no scaling".

Acked-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
---
 tools/lib/perf/mmap.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/tools/lib/perf/mmap.c b/tools/lib/perf/mmap.c
index c89dfa5f67b3..aaa457904008 100644
--- a/tools/lib/perf/mmap.c
+++ b/tools/lib/perf/mmap.c
@@ -353,8 +353,6 @@ int perf_mmap__read_self(struct perf_mmap *map, struct perf_counts_values *count
 		count->ena += delta;
 		if (idx)
 			count->run += delta;
-
-		cnt = mul_u64_u64_div64(cnt, count->ena, count->run);
 	}
 
 	count->val = cnt;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v4 3/3] libperf tests: Add test_stat_multiplexing test
  2021-11-29  9:06 [PATCH v4 0/3] Unify scaling of counters obtained from perf_evsel__read() Shunsuke
  2021-11-29  9:06 ` [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf Shunsuke
  2021-11-29  9:06 ` [PATCH v4 2/3] libperf: Remove scaling process from perf_mmap__read_self() Shunsuke
@ 2021-11-29  9:06 ` Shunsuke
  2 siblings, 0 replies; 5+ messages in thread
From: Shunsuke @ 2021-11-29  9:06 UTC (permalink / raw)
  To: peterz, mingo, acme, mark.rutland, alexander.shishkin, jolsa,
	namhyung, robh
  Cc: linux-kernel, linux-perf-users, Jiri Olsa, Shunsuke Nakamura

From: Shunsuke Nakamura <nakamura.shun@fujitsu.com>

Adds a test for a counter obtained using read() system call during
multiplexing.

Committer testing:

  $ sudo make tests -C ./tools/lib/perf V=1
  make[1]: Entering directory '/home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/lib/perf'
  make -f /home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/build/Makefile.build dir=. obj=libperf
  make -C /home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/lib/api/ O= libapi.a
  make -f /home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/build/Makefile.build dir=./fd obj=libapi
  make -f /home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/build/Makefile.build dir=./fs obj=libapi
  make -f /home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/build/Makefile.build dir=. obj=tests
  make -f /home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/build/Makefile.build dir=./tests obj=tests
  running static:
  - running tests/test-cpumap.c...OK
  - running tests/test-threadmap.c...OK
  - running tests/test-evlist.c...
  Event  0 -- Raw count = 299302036, run = 288430205, enable = 486235490
           Scaled count = 504563217 (59.32%, 288430205/486235490)
  Event  1 -- Raw count = 298545418, run = 289425078, enable = 486232769
           Scaled count = 501554897 (59.52%, 289425078/486232769)
  Event  2 -- Raw count = 298838327, run = 290411278, enable = 486229222
           Scaled count = 500338444 (59.73%, 290411278/486229222)
  Event  3 -- Raw count = 299382984, run = 291406006, enable = 486225338
           Scaled count = 499535320 (59.93%, 291406006/486225338)
  Event  4 -- Raw count = 300119283, run = 292411181, enable = 486220615
           Scaled count = 499037628 (60.14%, 292411181/486220615)
  Event  5 -- Raw count = 300255891, run = 293404372, enable = 486215261
           Scaled count = 497569260 (60.34%, 293404372/486215261)
  Event  6 -- Raw count = 302390604, run = 294222082, enable = 486209147
           Scaled count = 499707828 (60.51%, 294222082/486209147)
  Event  7 -- Raw count = 303524473, run = 294214550, enable = 486202374
           Scaled count = 501587427 (60.51%, 294214550/486202374)
  Event  8 -- Raw count = 304282474, run = 294206637, enable = 486194647
           Scaled count = 502845590 (60.51%, 294206637/486194647)
  Event  9 -- Raw count = 303969062, run = 293818554, enable = 486185895
           Scaled count = 502982090 (60.43%, 293818554/486185895)
  Event 10 -- Raw count = 303784907, run = 292808731, enable = 486174252
           Scaled count = 504398893 (60.23%, 292808731/486174252)
  Event 11 -- Raw count = 304129077, run = 291818946, enable = 486164475
           Scaled count = 506672904 (60.02%, 291818946/486164475)
  Event 12 -- Raw count = 302677227, run = 290819976, enable = 486155254
           Scaled count = 505976673 (59.82%, 290819976/486155254)
  Event 13 -- Raw count = 301748186, run = 289821793, enable = 486146028
           Scaled count = 506151316 (59.62%, 289821793/486146028)
  Event 14 -- Raw count = 300216852, run = 288823624, enable = 486136825
           Scaled count = 505313468 (59.41%, 288823624/486136825)
     Expected: 501623296
     High: 506672904   Low:  299302036   Average:  502548997
     Average Error = 0.18%
  OK
  - running tests/test-evsel.c...
          loop = 65536, count = 354844
          loop = 131072, count = 693386
          loop = 262144, count = 1339140
          loop = 524288, count = 2726813
          loop = 1048576, count = 5263081
          loop = 65536, count = 472935
          loop = 131072, count = 1018641
          loop = 262144, count = 1840393
          loop = 524288, count = 3349520
          loop = 1048576, count = 6759085
  OK
  running dynamic:
  - running tests/test-cpumap.c...OK
  - running tests/test-threadmap.c...OK
  - running tests/test-evlist.c...
  Event  0 -- Raw count = 297934481, run = 297856898, enable = 501847789
           Scaled count = 501978505 (59.35%, 297856898/501847789)
  Event  1 -- Raw count = 298651420, run = 297970032, enable = 501845063
           Scaled count = 502992665 (59.37%, 297970032/501845063)
  Event  2 -- Raw count = 299731258, run = 298965119, enable = 501841526
           Scaled count = 503127563 (59.57%, 298965119/501841526)
  Event  3 -- Raw count = 300644680, run = 299960013, enable = 501837664
           Scaled count = 502983122 (59.77%, 299960013/501837664)
  Event  4 -- Raw count = 301854645, run = 300947092, enable = 501833170
           Scaled count = 503346526 (59.97%, 300947092/501833170)
  Event  5 -- Raw count = 303228020, run = 302371294, enable = 501827577
           Scaled count = 503249433 (60.25%, 302371294/501827577)
  Event  6 -- Raw count = 304162593, run = 303363734, enable = 501820925
           Scaled count = 503142388 (60.45%, 303363734/501820925)
  Event  7 -- Raw count = 304802876, run = 304254160, enable = 501814005
           Scaled count = 502719016 (60.63%, 304254160/501814005)
  Event  8 -- Raw count = 304797825, run = 304246193, enable = 501805969
           Scaled count = 502715798 (60.63%, 304246193/501805969)
  Event  9 -- Raw count = 304678040, run = 303884090, enable = 501797023
           Scaled count = 503108054 (60.56%, 303884090/501797023)
  Event 10 -- Raw count = 303209569, run = 302886553, enable = 501785047
           Scaled count = 502320180 (60.36%, 302886553/501785047)
  Event 11 -- Raw count = 301801701, run = 301456719, enable = 501775302
           Scaled count = 502349525 (60.08%, 301456719/501775302)
  Event 12 -- Raw count = 300744781, run = 300457620, enable = 501765832
           Scaled count = 502245392 (59.88%, 300457620/501765832)
  Event 13 -- Raw count = 299656316, run = 299458825, enable = 501756687
           Scaled count = 502087592 (59.68%, 299458825/501756687)
  Event 14 -- Raw count = 298616379, run = 298460087, enable = 501747345
           Scaled count = 502010090 (59.48%, 298460087/501747345)
     Expected: 501618012
     High: 503346526   Low:  297934481   Average:  502691723
     Average Error = 0.21%
  OK
  - running tests/test-evsel.c...
          loop = 65536, count = 328183
          loop = 131072, count = 681853
          loop = 262144, count = 1334936
          loop = 524288, count = 2702197
          loop = 1048576, count = 5294233
          loop = 65536, count = 486498
          loop = 131072, count = 928179
          loop = 262144, count = 1921944
          loop = 524288, count = 3687007
          loop = 1048576, count = 6721087
  OK
  make[1]: Leaving directory '/home/nakamura/build_work/build_kernel/linux-kernel/linux/tools/lib/perf'

Acked-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
---
 tools/lib/perf/tests/test-evlist.c | 157 +++++++++++++++++++++++++++++
 1 file changed, 157 insertions(+)

diff --git a/tools/lib/perf/tests/test-evlist.c b/tools/lib/perf/tests/test-evlist.c
index ce91a582f0e4..064edd0e995c 100644
--- a/tools/lib/perf/tests/test-evlist.c
+++ b/tools/lib/perf/tests/test-evlist.c
@@ -21,6 +21,9 @@
 #include "tests.h"
 #include <internal/evsel.h>
 
+#define EVENT_NUM 15
+#define WAIT_COUNT 100000000UL
+
 static int libperf_print(enum libperf_print_level level,
 			 const char *fmt, va_list ap)
 {
@@ -413,6 +416,159 @@ static int test_mmap_cpus(void)
 	return 0;
 }
 
+static double display_error(long long average,
+			    long long high,
+			    long long low,
+			    long long expected)
+{
+	double error;
+
+	error = (((double)average - expected) / expected) * 100.0;
+
+	__T_VERBOSE("   Expected: %lld\n", expected);
+	__T_VERBOSE("   High: %lld   Low:  %lld   Average:  %lld\n",
+		    high, low, average);
+
+	__T_VERBOSE("   Average Error = %.2f%%\n", error);
+
+	return error;
+}
+
+static int test_stat_multiplexing(void)
+{
+	struct perf_counts_values expected_counts = { .val = 0 };
+	struct perf_counts_values counts[EVENT_NUM] = {{ .val = 0 },};
+	struct perf_thread_map *threads;
+	struct perf_evlist *evlist;
+	struct perf_evsel *evsel;
+	struct perf_event_attr attr = {
+		.type	     = PERF_TYPE_HARDWARE,
+		.config	     = PERF_COUNT_HW_INSTRUCTIONS,
+		.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
+			       PERF_FORMAT_TOTAL_TIME_RUNNING,
+		.disabled    = 1,
+	};
+	int err, i, nonzero = 0;
+	unsigned long count;
+	long long max = 0, min = 0, avg = 0;
+	double error = 0.0;
+	__s8 scaled = 0;
+
+	/* read for non-multiplexing event count */
+	threads = perf_thread_map__new_dummy();
+	__T("failed to create threads", threads);
+
+	perf_thread_map__set_pid(threads, 0, 0);
+
+	evsel = perf_evsel__new(&attr);
+	__T("failed to create evsel", evsel);
+
+	err = perf_evsel__open(evsel, NULL, threads);
+	__T("failed to open evsel", err == 0);
+
+	err = perf_evsel__enable(evsel);
+	__T("failed to enable evsel", err == 0);
+
+	/* wait loop */
+	count = WAIT_COUNT;
+	while (count--)
+		;
+
+	perf_evsel__read(evsel, 0, 0, &expected_counts);
+	__T("failed to read value for evsel", expected_counts.val != 0);
+	__T("failed to read non-multiplexing event count",
+	    expected_counts.ena == expected_counts.run);
+
+	err = perf_evsel__disable(evsel);
+	__T("failed to enable evsel", err == 0);
+
+	perf_evsel__close(evsel);
+	perf_evsel__delete(evsel);
+
+	perf_thread_map__put(threads);
+
+	/* read for multiplexing event count */
+	threads = perf_thread_map__new_dummy();
+	__T("failed to create threads", threads);
+
+	perf_thread_map__set_pid(threads, 0, 0);
+
+	evlist = perf_evlist__new();
+	__T("failed to create evlist", evlist);
+
+	for (i = 0; i < EVENT_NUM; i++) {
+		evsel = perf_evsel__new(&attr);
+		__T("failed to create evsel", evsel);
+
+		perf_evlist__add(evlist, evsel);
+	}
+	perf_evlist__set_maps(evlist, NULL, threads);
+
+	err = perf_evlist__open(evlist);
+	__T("failed to open evsel", err == 0);
+
+	perf_evlist__enable(evlist);
+
+	/* wait loop */
+	count = WAIT_COUNT;
+	while (count--)
+		;
+
+	i = 0;
+	perf_evlist__for_each_evsel(evlist, evsel) {
+		perf_evsel__read(evsel, 0, 0, &counts[i]);
+		__T("failed to read value for evsel", counts[i].val != 0);
+		i++;
+	}
+
+	perf_evlist__disable(evlist);
+
+	min = counts[0].val;
+	for (i = 0; i < EVENT_NUM; i++) {
+		__T_VERBOSE("Event %2d -- Raw count = %lu, run = %lu, enable = %lu\n",
+			    i, counts[i].val, counts[i].run, counts[i].ena);
+
+		perf_counts_values__scale(&counts[i], true, &scaled);
+		if (scaled == 1) {
+			__T_VERBOSE("\t Scaled count = %lu (%.2lf%%, %lu/%lu)\n",
+				    counts[i].val,
+				    (double)counts[i].run / (double)counts[i].ena * 100.0,
+				    counts[i].run, counts[i].ena);
+		} else if (scaled == -1) {
+			__T_VERBOSE("\t Not Runnnig\n");
+		} else {
+			__T_VERBOSE("\t Not Scaling\n");
+		}
+
+		if (counts[i].val > max)
+			max = counts[i].val;
+
+		if (counts[i].val < min)
+			min = counts[i].val;
+
+		avg += counts[i].val;
+
+		if (counts[i].val != 0)
+			nonzero++;
+	}
+
+	if (nonzero != 0)
+		avg = avg / nonzero;
+	else
+		avg = 0;
+
+	error = display_error(avg, max, min, expected_counts.val);
+
+	__T("Error out of range!", ((error <= 1.0) && (error >= -1.0)));
+
+	perf_evlist__close(evlist);
+	perf_evlist__delete(evlist);
+
+	perf_thread_map__put(threads);
+
+	return 0;
+}
+
 int test_evlist(int argc, char **argv)
 {
 	__T_START;
@@ -424,6 +580,7 @@ int test_evlist(int argc, char **argv)
 	test_stat_thread_enable();
 	test_mmap_thread();
 	test_mmap_cpus();
+	test_stat_multiplexing();
 
 	__T_END;
 	return tests_failed == 0 ? 0 : -1;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf
  2021-11-29  9:06 ` [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf Shunsuke
@ 2021-12-07  7:28   ` nakamura.shun
  0 siblings, 0 replies; 5+ messages in thread
From: nakamura.shun @ 2021-12-07  7:28 UTC (permalink / raw)
  To: peterz, mingo, acme, mark.rutland, alexander.shishkin, jolsa,
	namhyung, robh
  Cc: linux-kernel, linux-perf-users

> Move perf_counts_values__scale from tools/perf/util to tools/lib/perf
> so that it can be used with libperf.
> 
> Signed-off-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
> ---
>  tools/lib/perf/evsel.c              | 19 +++++++++++++++++++
>  tools/lib/perf/include/perf/evsel.h |  4 ++++
>  tools/lib/perf/libperf.map          |  1 +
>  tools/perf/util/evsel.c             | 19 -------------------
>  tools/perf/util/evsel.h             |  3 ---
>  5 files changed, 24 insertions(+), 22 deletions(-)

I missed to update tools/lib/perf/Documentation/libperf.txt, so I will fix it.



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-12-07  7:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-29  9:06 [PATCH v4 0/3] Unify scaling of counters obtained from perf_evsel__read() Shunsuke
2021-11-29  9:06 ` [PATCH v4 1/3] libperf: Move perf_counts_values__scale to tools/lib/perf Shunsuke
2021-12-07  7:28   ` nakamura.shun
2021-11-29  9:06 ` [PATCH v4 2/3] libperf: Remove scaling process from perf_mmap__read_self() Shunsuke
2021-11-29  9:06 ` [PATCH v4 3/3] libperf tests: Add test_stat_multiplexing test Shunsuke

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