From owner-svn-src-head@freebsd.org Fri Jun 1 00:46:02 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D3C84EF3464; Fri, 1 Jun 2018 00:46:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3C8396A74A; Fri, 1 Jun 2018 00:46:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5A92D21AAB; Fri, 1 Jun 2018 00:46:00 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w510k032036463; Fri, 1 Jun 2018 00:46:00 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w510jx4i036457; Fri, 1 Jun 2018 00:45:59 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201806010045.w510jx4i036457@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 1 Jun 2018 00:45:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r334465 - head/usr.sbin/pmc X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/usr.sbin/pmc X-SVN-Commit-Revision: 334465 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Jun 2018 00:46:02 -0000 Author: mmacy Date: Fri Jun 1 00:45:59 2018 New Revision: 334465 URL: https://svnweb.freebsd.org/changeset/base/334465 Log: pmc: add list-events command Added: head/usr.sbin/pmc/cmd_pmc_list.c - copied, changed from r334464, head/usr.sbin/pmc/pmc.c Modified: head/usr.sbin/pmc/Makefile (contents, props changed) head/usr.sbin/pmc/cmd_pmc.h (contents, props changed) head/usr.sbin/pmc/pmc.c (contents, props changed) Modified: head/usr.sbin/pmc/Makefile ============================================================================== --- head/usr.sbin/pmc/Makefile Fri Jun 1 00:45:53 2018 (r334464) +++ head/usr.sbin/pmc/Makefile Fri Jun 1 00:45:59 2018 (r334465) @@ -7,6 +7,7 @@ MAN= LIBADD= kvm pmc m ncursesw pmcstat elf -SRCS= pmc.c pmc_util.c cmd_pmc_stat.c +SRCS= pmc.c pmc_util.c cmd_pmc_stat.c \ + cmd_pmc_list.c .include Modified: head/usr.sbin/pmc/cmd_pmc.h ============================================================================== --- head/usr.sbin/pmc/cmd_pmc.h Fri Jun 1 00:45:53 2018 (r334464) +++ head/usr.sbin/pmc/cmd_pmc.h Fri Jun 1 00:45:59 2018 (r334465) @@ -42,6 +42,7 @@ typedef int (*cmd_disp_t)(int, char **); int cmd_pmc_stat(int, char **); int cmd_pmc_stat_system(int, char **); +int cmd_pmc_list_events(int, char **); int pmc_util_get_pid(struct pmcstat_args *); void pmc_util_start_pmcs(struct pmcstat_args *); Copied and modified: head/usr.sbin/pmc/cmd_pmc_list.c (from r334464, head/usr.sbin/pmc/pmc.c) ============================================================================== --- head/usr.sbin/pmc/pmc.c Fri Jun 1 00:45:53 2018 (r334464, copy source) +++ head/usr.sbin/pmc/cmd_pmc_list.c Fri Jun 1 00:45:59 2018 (r334465) @@ -24,91 +24,105 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD$ - * */ -#include -#include +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include + +#include +#include #include +#include +#include +#include +#include +#include #include -#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include "cmd_pmc.h" -int pmc_displayheight = DEFAULT_DISPLAY_HEIGHT; -int pmc_displaywidth = DEFAULT_DISPLAY_WIDTH; -int pmc_kq; -struct pmcstat_args pmc_args; -struct pmcstat_pmcs pmcstat_pmcs = LIST_HEAD_INITIALIZER(pmcstat_pmcs); - -struct pmcstat_image_hash_list pmcstat_image_hash[PMCSTAT_NHASH]; - -struct pmcstat_process_hash_list pmcstat_process_hash[PMCSTAT_NHASH]; - -struct cmd_handler { - const char *ch_name; - cmd_disp_t ch_fn; +static struct option longopts[] = { + {"long-desc", no_argument, NULL, 'U'}, + {"desc", no_argument, NULL, 'u'}, + {"full", no_argument, NULL, 'f'}, + {NULL, 0, NULL, 0} }; -static struct cmd_handler disp_table[] = { - {"stat", cmd_pmc_stat}, - {"stat-system", cmd_pmc_stat_system}, - {NULL, NULL} -}; - static void usage(void) { errx(EX_USAGE, - "\t pmc management utility\n" - "\t stat run program and print stats\n" - "\t stat-system run program and print system wide stats for duration of execution\n" + "\t list events\n" + "\t -u, desc -- short description of event\n" + "\t -U, long-desc -- long description of event\n" + "\t -f, full -- full event details\n" ); } -static cmd_disp_t -disp_lookup(char *name) -{ - struct cmd_handler *hnd; - - for (hnd = disp_table; hnd->ch_name != NULL; hnd++) - if (strcmp(hnd->ch_name, name) == 0) - return (hnd->ch_fn); - return (NULL); -} - int -main(int argc, char **argv) +cmd_pmc_list_events(int argc, char **argv) { - cmd_disp_t disp; + int do_long_descr, do_descr, do_full; + int option; - pmc_args.pa_printfile = stderr; - STAILQ_INIT(&pmc_args.pa_events); - SLIST_INIT(&pmc_args.pa_targets); - if (argc == 1) + do_long_descr = do_descr = do_full = 0; + while ((option = getopt_long(argc, argv, "Uuf", longopts, NULL)) != -1) { + switch (option) { + case 'U': + do_long_descr = 1; + break; + case 'u': + do_descr = 1; + break; + case 'f': + do_full = 1; + break; + case '?': + default: + usage(); + } + } + argc -= optind; + argv += optind; + if ((do_long_descr | do_descr | do_full) && argc == 0) { + warnx("event or event substring required when option provided\n"); usage(); - if ((disp = disp_lookup(argv[1])) == NULL) - usage(); - argc--; - argv++; + } + if (do_full) + pmc_pmu_print_counter_full(argc ? argv[0] : NULL); + else if (do_long_descr) + pmc_pmu_print_counter_desc_long(argv[0]); + else if (do_descr) + pmc_pmu_print_counter_desc(argv[0]); + else + pmc_pmu_print_counters(argv[0]); - /* Allocate a kqueue */ - if ((pmc_kq = kqueue()) < 0) - err(EX_OSERR, "ERROR: Cannot allocate kqueue"); - if (pmc_init() < 0) - err(EX_UNAVAILABLE, - "ERROR: Initialization of the pmc(3) library failed" - ); - return (disp(argc, argv)); + return (0); } Modified: head/usr.sbin/pmc/pmc.c ============================================================================== --- head/usr.sbin/pmc/pmc.c Fri Jun 1 00:45:53 2018 (r334464) +++ head/usr.sbin/pmc/pmc.c Fri Jun 1 00:45:59 2018 (r334465) @@ -64,6 +64,7 @@ struct cmd_handler { static struct cmd_handler disp_table[] = { {"stat", cmd_pmc_stat}, {"stat-system", cmd_pmc_stat_system}, + {"list-events", cmd_pmc_list_events}, {NULL, NULL} }; @@ -73,7 +74,8 @@ usage(void) errx(EX_USAGE, "\t pmc management utility\n" "\t stat run program and print stats\n" - "\t stat-system run program and print system wide stats for duration of execution\n" + "\t stat-system run program and print system wide stats for duration of execution\n" + "\t list-events list PMC events available on host\n" ); }