From nobody Tue Jul 28 19:29:27 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h8ls42Wk0z6n9ZY for ; Tue, 28 Jul 2026 19:29:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h8ls35dKfz43kn for ; Tue, 28 Jul 2026 19:29:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785266967; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uUjTzMiOdoBvrmXzy0A+T5wQelvx5v4SpdZEKX5HtRI=; b=Pkkk6txjAovg/PQZg0ckIWyBywRGohQbSYHev8JSuMvQzXR4WNIMpfg9ZHHDX2vGSdiewv Pepm92QX4L2zgzxRR8icWQioawT/ER0nAPu9z9DYlQnRmYljbJu0dgQl3CWZLAoLJGxWNm WRLTSlcE4ARuvlniJBgA4RAEsiqs3wTcJW0JQlzCyGtSP2b8PGVdmqLE2tcpg+Gmf6P1xK rEHenFEETsmI+SWhm1eYb3PQTQK9zOSEXEgmLwOsBmdS0Y7iySUiTW5ItA2F1FwF88Foq0 C4fm3+79FZa3fumudHoJfHTnKTn/0eD08TKV9R/XU1Wr8zw3eW+UFhnkVxlp+g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785266967; a=rsa-sha256; cv=none; b=wJpM8lDP3wySjbz0JR6I6nv/t7XdP6nDK1WrYHQnPTJ1KtTYwll8BaT0eOmHiKgNxbPsu8 YL31s+DGmCAv5JTjayCyLIfEsR/N+0m6/MnJOyMzS7gRZH0OvsqdUCteVWIcHCVqY8IBDG 2Hs5wQe1NuTJ5QVuNvNLLQjJDI4lo4d2kfTIdm9oJ7V8AG9oKsxe8NLZCU+R9emBFORUHe 2GuhJflsIW+sS01I2crsE87mg/HSaw0OxwS6+bk/+x4K10IuBu1oNbUOdbWH5OHXViLH+I xiBM2OddBQtVHkEvPDTK8IDYhxlDLKNh+bSo3IaY9b8fLSN9UTOfFOLH3iElGA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785266967; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uUjTzMiOdoBvrmXzy0A+T5wQelvx5v4SpdZEKX5HtRI=; b=NkMYaHDC2QNOQvaDCGCrPzrQvu5eX1/kU+2kiYhIRaIzXgmEVeqdWUFeiOn34qjW3K/2E4 CkWzoWROY5SNN1OOrAviFv0TqmS5UKm4mHP0kwqGGK4A9sxcqiQvEWoVNI9LTbF3GOv7tV 11zaGltUGN4HEXUMhX8tL9S2vyMCan4ESwtPhWMnpIUUHKhWm1wX2nOe801OEwU7VaJme0 4OjNTIjgc59S6ntO2YMy8VYg+rF0eFm/40mnJ1pzVtq3U4Gixp9pJPvh6hc/j8a29B8Yin vxgzOtKoLOSJ01DUDnbOxnfY95uEPQ8meWRB0+9tx2d5MYChw87izXRY4RQAPw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h8ls34F7zztTW for ; Tue, 28 Jul 2026 19:29:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43317 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 28 Jul 2026 19:29:27 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Ali Mashtizadeh From: Warner Losh Subject: git: ce6ab51fc378 - main - pmc: enable the new pmc commands List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ce6ab51fc3784aec3d7501b50e7d2d0a75507a86 Auto-Submitted: auto-generated Date: Tue, 28 Jul 2026 19:29:27 +0000 Message-Id: <6a690317.43317.5f4ea6a7@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=ce6ab51fc3784aec3d7501b50e7d2d0a75507a86 commit ce6ab51fc3784aec3d7501b50e7d2d0a75507a86 Author: Ali Mashtizadeh AuthorDate: 2026-07-28 17:46:57 +0000 Commit: Warner Losh CommitDate: 2026-07-28 19:27:45 +0000 pmc: enable the new pmc commands This change hooks everything up to the pmc command and improves the usage to document all functions. There are a couple older commands that are currently broken that I have hidden from the usage, but left in the code for those using it. I won't remove those until we have our replacements upstreamed that depend on the AMD PMC multiplexing patches. Sponsored by: Netflix Reviewed by: adrian, imp Differential Revision: https://reviews.freebsd.org/D57780 --- usr.sbin/pmc/Makefile | 6 ++++-- usr.sbin/pmc/cmd_pmc.h | 7 +++++-- usr.sbin/pmc/pmc.c | 52 +++++++++++++++++++++++++++++++++++--------------- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/usr.sbin/pmc/Makefile b/usr.sbin/pmc/Makefile index d2f482b8fa5c..c27ad797e696 100644 --- a/usr.sbin/pmc/Makefile +++ b/usr.sbin/pmc/Makefile @@ -6,10 +6,12 @@ MAN= CWARNFLAGS.gcc+= -Wno-redundant-decls CFLAGS+= -I${SRCTOP}/lib/libpmcstat -LIBADD= pmc m pmcstat elf +LIBADD= pmc m util ncursesw pmcstat elf dwarf SRCS= pmc.c pmc_util.c cmd_pmc_stat.c \ cmd_pmc_list.c cmd_pmc_filter.cc \ - cmd_pmc_summary.cc + cmd_pmc_summary.cc \ + cmd_pmc_frontend.cc cmd_pmc_record.cc cmd_pmc_info.cc \ + display.cc util.cc view.cc .include diff --git a/usr.sbin/pmc/cmd_pmc.h b/usr.sbin/pmc/cmd_pmc.h index 83c279c4e8b7..795c762cbed5 100644 --- a/usr.sbin/pmc/cmd_pmc.h +++ b/usr.sbin/pmc/cmd_pmc.h @@ -41,10 +41,13 @@ typedef int (*cmd_disp_t)(int, char **); #if defined(__cplusplus) extern "C" { #endif - int cmd_pmc_stat(int, char **); + int cmd_pmc_info(int, char **); int cmd_pmc_filter(int, char **); - int cmd_pmc_stat_system(int, char **); + int cmd_pmc_frontend(int, char **); int cmd_pmc_list_events(int, char **); + int cmd_pmc_record(int, char **); + int cmd_pmc_stat(int, char **); + int cmd_pmc_stat_system(int, char **); int cmd_pmc_summary(int, char **); #if defined(__cplusplus) }; diff --git a/usr.sbin/pmc/pmc.c b/usr.sbin/pmc/pmc.c index 4b4d113e2bd4..92f27db55026 100644 --- a/usr.sbin/pmc/pmc.c +++ b/usr.sbin/pmc/pmc.c @@ -36,11 +36,11 @@ #include #include #include +#include #include #include #include -#include #include "cmd_pmc.h" int pmc_displayheight = DEFAULT_DISPLAY_HEIGHT; @@ -57,27 +57,44 @@ struct pmcstat_process_hash_list pmcstat_process_hash[PMCSTAT_NHASH]; struct cmd_handler { const char *ch_name; cmd_disp_t ch_fn; + const char *ch_desc; }; static struct cmd_handler disp_table[] = { - {"stat", cmd_pmc_stat}, - {"stat-system", cmd_pmc_stat_system}, - {"list-events", cmd_pmc_list_events}, - {"filter", cmd_pmc_filter}, - {"summary", cmd_pmc_summary}, - {NULL, NULL} + { "filter", cmd_pmc_filter, NULL }, + { "frontend", cmd_pmc_frontend, "Analyze front-end stalls" }, + { "info", cmd_pmc_info, "Display high level information about a log" }, + { "list-events", cmd_pmc_list_events, "List available PMC events" }, + { "record", cmd_pmc_record, "Record a performance sample" }, + { "stat", cmd_pmc_stat, NULL }, + { "stat-system", cmd_pmc_stat_system, NULL }, + { "summary", cmd_pmc_summary, NULL }, + { NULL, NULL, NULL } }; -static void __dead2 +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 list PMC events available on host\n" - "\t filter filter records by lwp, pid, or event\n" - ); + int i; + + fprintf(stderr, "Usage: pmc [OPTIONS] ...\n\n"); + fprintf(stderr, "PMC tool\n\n"); + + fprintf(stderr, "Commands:\n"); + for (i = 0; disp_table[i].ch_name != NULL; i++) { + // Hide stuff we plan to deprecate + if (disp_table[i].ch_desc) + fprintf(stderr, " %-12s %s\n", + disp_table[i].ch_name, disp_table[i].ch_desc); + } + + fprintf(stderr, "\nEnvironment Variables:\n"); + fprintf(stderr, " CLICOLOR Enables color graphs\n"); + fprintf(stderr, " SYSROOT Path to system root\n"); + fprintf(stderr, " SYMROOT Path to debug symbols\n"); + fprintf(stderr, " TERM Controls symbols and color palettes\n"); + + exit(EX_USAGE); } static cmd_disp_t @@ -109,9 +126,14 @@ main(int argc, char **argv) /* 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" ); + + if (elf_version(EV_CURRENT) == EV_NONE) + err(EX_UNAVAILABLE, "ERROR: ELF library version too old"); + return (disp(argc, argv)); }