svn commit: r334464 - in head: lib/libpmc usr.sbin/pmcstat

Matt Macy mmacy at FreeBSD.org
Fri Jun 1 00:45:56 UTC 2018


Author: mmacy
Date: Fri Jun  1 00:45:53 2018
New Revision: 334464
URL: https://svnweb.freebsd.org/changeset/base/334464

Log:
  libpmc: allow substring for list and add function for printing event details

Modified:
  head/lib/libpmc/libpmc_pmu_util.c   (contents, props changed)
  head/lib/libpmc/pmc.h
  head/usr.sbin/pmcstat/pmcstat.c

Modified: head/lib/libpmc/libpmc_pmu_util.c
==============================================================================
--- head/lib/libpmc/libpmc_pmu_util.c	Fri Jun  1 00:45:48 2018	(r334463)
+++ head/lib/libpmc/libpmc_pmu_util.c	Fri Jun  1 00:45:53 2018	(r334464)
@@ -235,7 +235,7 @@ pmc_pmu_enabled(void)
 }
 
 void
-pmc_pmu_print_counters(void)
+pmc_pmu_print_counters(const char *event_name)
 {
 	const struct pmu_events_map *pme;
 	const struct pmu_event *pe;
@@ -253,6 +253,8 @@ pmc_pmu_print_counters(void)
 	for (pe = pme->table; pe->name || pe->desc || pe->event; pe++) {
 		if (pe->name == NULL)
 			continue;
+		if (event_name != NULL && strcasestr(pe->name, event_name) == NULL)
+			continue;
 		printf("\t%s\n", pe->name);
 		if (do_debug)
 			pmu_parse_event(&ped, pe->event);
@@ -296,6 +298,43 @@ pmc_pmu_print_counter_desc_long(const char *ev)
 	}
 }
 
+void
+pmc_pmu_print_counter_full(const char *ev)
+{
+	const struct pmu_events_map *pme;
+	const struct pmu_event *pe;
+
+	if ((pme = pmu_events_map_get()) == NULL)
+		return;
+	for (pe = pme->table; pe->name || pe->desc || pe->event; pe++) {
+		if (pe->name == NULL)
+			continue;
+		if (strcasestr(pe->name, ev) == NULL)
+			continue;
+		printf("name: %s\n", pe->name);
+		if (pe->long_desc != NULL)
+			printf("desc: %s\n", pe->long_desc);
+		else if (pe->desc != NULL)
+			printf("desc: %s\n", pe->desc);
+		if (pe->event != NULL)
+			printf("event: %s\n", pe->event);
+		if (pe->topic != NULL)
+			printf("topic: %s\n", pe->topic);
+		if (pe->pmu != NULL)
+			printf("pmu: %s\n", pe->pmu);
+		if (pe->unit != NULL)
+			printf("unit: %s\n", pe->unit);
+		if (pe->perpkg != NULL)
+			printf("perpkg: %s\n", pe->perpkg);
+		if (pe->metric_expr != NULL)
+			printf("metric_expr: %s\n", pe->metric_expr);
+		if (pe->metric_name != NULL)
+			printf("metric_name: %s\n", pe->metric_name);
+		if (pe->metric_group != NULL)
+			printf("metric_group: %s\n", pe->metric_group);
+	}
+}
+
 int
 pmc_pmu_pmcallocate(const char *event_name, struct pmc_op_pmcallocate *pm)
 {
@@ -394,7 +433,7 @@ pmc_pmu_sample_rate_get(const char *event_name __unuse
 }
 
 void
-pmc_pmu_print_counters(void)
+pmc_pmu_print_counters(const char *event_name __unused)
 {
 }
 
@@ -406,6 +445,12 @@ pmc_pmu_print_counter_desc(const char *e __unused)
 void
 pmc_pmu_print_counter_desc_long(const char *e __unused)
 {
+}
+
+void
+pmc_pmu_print_counter_full(const char *e __unused)
+{
+
 }
 
 int

Modified: head/lib/libpmc/pmc.h
==============================================================================
--- head/lib/libpmc/pmc.h	Fri Jun  1 00:45:48 2018	(r334463)
+++ head/lib/libpmc/pmc.h	Fri Jun  1 00:45:53 2018	(r334464)
@@ -114,9 +114,10 @@ int	pmc_event_names_of_class(enum pmc_class _cl, const
     int *_nevents);
 
 int pmc_pmu_enabled(void);
-void pmc_pmu_print_counters(void);
+void pmc_pmu_print_counters(const char *);
 void pmc_pmu_print_counter_desc(const char *);
 void pmc_pmu_print_counter_desc_long(const char *);
+void pmc_pmu_print_counter_full(const char *);
 uint64_t pmc_pmu_sample_rate_get(const char *);
 int pmc_pmu_pmcallocate(const char *, struct pmc_op_pmcallocate *);
 const char *pmc_pmu_event_get_by_idx(int idx);

Modified: head/usr.sbin/pmcstat/pmcstat.c
==============================================================================
--- head/usr.sbin/pmcstat/pmcstat.c	Fri Jun  1 00:45:48 2018	(r334463)
+++ head/usr.sbin/pmcstat/pmcstat.c	Fri Jun  1 00:45:53 2018	(r334464)
@@ -820,7 +820,7 @@ main(int argc, char **argv)
 		pmc_pmu_enabled() == 0)
 			errx(EX_USAGE, "pmu features not supported on host or hwpmc not loaded");
 	if (do_listcounters) {
-		pmc_pmu_print_counters();
+		pmc_pmu_print_counters(NULL);
 	} else if (do_descr) {
 		pmc_pmu_print_counter_desc(event);
 	} else if (do_long_descr) {


More information about the svn-src-head mailing list