From nobody Mon Jan 5 11:48:11 2026 X-Original-To: dev-commits-src-main@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 4dlCH0308Rz6MN7R for ; Mon, 05 Jan 2026 11:48:12 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dlCH00TXFz3Gyk for ; Mon, 05 Jan 2026 11:48:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767613692; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ynNCUal9zNC7nAriXGln+UHvyJJReMVDo8aqChAVmGk=; b=TucsjhxO6vK6n2TsuYH87/XSC8yh9W01Eg7na/TFj1/Ce9D1D7lbygIme9e5zGi77waqiq izr35SHiM+xc+RcEEGMPCyWk1KDoy4N4jIxsiYkNoc3KwGCNxggAr35SdO7Efl39u+bS9M OZhuiKdDhfS516H+ccizyD5dfHlUC5mOF/2fHo3YtXYhVfm8OG+M9QHY+C2wrdCx6m8TiA pFDZdOAtk5iJRlkSm2gkaXtxq8VnT5ISevp43FMsiNec+tLnzchMgW8QgKx3HMj8GMnaug 6ornskTDHfhRgVaX5N6Jwdkbzg1n6oOH9wt+042Bxb/3BIjAGnYsrXYwJGR26w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767613692; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ynNCUal9zNC7nAriXGln+UHvyJJReMVDo8aqChAVmGk=; b=i9dOGWsHAurw8dyXN/iLdCo7ccJWvApcsxJ36GgICvINgVU0T/AltNAbgdkOEdUZMqz2R+ lR/5Cj9PLZVQ6GwnPbjBj9UNflbslHJa/8Zi8PuLkG2jg8Ze8SzvVShrr2rbhHnmm5Nts4 xquvcWQTcbc5naboEJuM2Ccxfd4Wy/KwsxV/hbT8YnoiihO1IS/xNLC4EzUPNs2bQ7hJGP ycNaf1lNdKo0PxRcTIeoRQVlEXOXjblrSbfyHeDOhe1pY/YQ55T7upOZrKJoULqmTrDP0J h54iBXMF+b8gzrKU8yxBBR6AyuUgqU30b9BWZ9tzHT0YPjH9b86Q5l+YLoy6bA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767613692; a=rsa-sha256; cv=none; b=xjy85cgcTo/aWmeCYSUSemATd1s1uKDUtijaXEzHKBXJJ4CN+1O6LFJHXRbaF53ph+LXao EaWv8sNjk82XbFC/vnxJE9AIYcYbLFgH0GyHjpRilzxNv/m3w3mwllas/+mAmEUfHcVrFi xWKqCxGJe3nGFLtCs4hJxysXTfTxCGOKsmETyfd9WWPJt07RHh3xLOFTEGSxKweDgSrn2A 7XZkeCSSOHU/rMvnGqfubDZ7JWe4dmP+IEKJFZ0wRElp1bzQGrYGMvt6KY4z8mSjODdBy7 +qEbxnx4cEje2cqbS8FOul5RrAzSBBuyQ5Jc1Uawb2FRnE503SP4Ous63F7jdA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dlCGz6S9qz4DF for ; Mon, 05 Jan 2026 11:48:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 35e3f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 05 Jan 2026 11:48:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: George V. Neville-Neil Subject: git: eb1c0d74cbb9 - main - Convert fully to Python 3. Remove licence text, only keep List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: gnn X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: eb1c0d74cbb99f329767b3d565ae57a3ec032bee Auto-Submitted: auto-generated Date: Mon, 05 Jan 2026 11:48:11 +0000 Message-Id: <695ba4fb.35e3f.3a916a95@gitrepo.freebsd.org> The branch main has been updated by gnn: URL: https://cgit.FreeBSD.org/src/commit/?id=eb1c0d74cbb99f329767b3d565ae57a3ec032bee commit eb1c0d74cbb99f329767b3d565ae57a3ec032bee Author: George V. Neville-Neil AuthorDate: 2026-01-05 11:40:12 +0000 Commit: George V. Neville-Neil CommitDate: 2026-01-05 11:40:12 +0000 Convert fully to Python 3. Remove licence text, only keep SPDX. Update to use argparse rather than OptionParser (now deprecated). --- tools/test/hwpmc/pmctest.py | 73 ++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 54 deletions(-) diff --git a/tools/test/hwpmc/pmctest.py b/tools/test/hwpmc/pmctest.py index 4bd4910b00a9..bda2f3500d7d 100755 --- a/tools/test/hwpmc/pmctest.py +++ b/tools/test/hwpmc/pmctest.py @@ -2,37 +2,9 @@ # SPDX-License-Identifier: BSD-3-Clause # # Copyright (c) 2012, Neville-Neil Consulting +# Copyright (c) 2026, George V. Neville-Neil # All rights reserved. # -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# Neither the name of Neville-Neil Consulting nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Author: George V. Neville-Neil -# # Description: A program to run a simple program against every available # pmc counter present in a system. @@ -44,17 +16,19 @@ # This should result in ls being run with every available counter # and the system should neither lock up nor panic. # -# The default is to wait after each counter is tested. Since the +# The default is not to wait after each counter is tested. Since the # prompt would go to stdout you won't see it, just press return # to continue or Ctrl-D to stop. -import sys import subprocess from subprocess import PIPE +import argparse -# Use input() for Python version 3 -if sys.version_info[0] == 3: - raw_input = input +def gather_counters(): + """Run program and return output as array of lines.""" + result = subprocess.run("pmccontrol -L", shell=True, capture_output=True, text=True) + tabbed = result.stdout.strip().split('\n') + return [line.replace('\t', '') for line in tabbed] # A list of strings that are not really counters, just # name tags that are output by pmccontrol -L @@ -62,37 +36,28 @@ notcounter = ["IAF", "IAP", "TSC", "UNC", "UCF", "UCP", "SOFT" ] def main(): - from optparse import OptionParser - - parser = OptionParser() - parser.add_option("-p", "--program", dest="program", - help="program to execute") - parser.add_option("-w", "--wait", action="store_true", dest="wait", - default=True, help="wait after each execution") + parser = argparse.ArgumentParser(description='Exercise a program under hwpmc') + parser.add_argument('--program', type=str, required=True, help='target program') + parser.add_argument('--wait', action='store_true', help='Wait after each counter.') - (options, args) = parser.parse_args() + args = parser.parse_args() - if (options.program == None): - print("specify program, such as ls, with -p/--program") - sys.exit() - - p = subprocess.Popen(["pmccontrol", "-L"], stdout=PIPE) - counters = p.communicate()[0] + counters = gather_counters() if len(counters) <= 0: print("no counters found") sys.exit() - for counter in counters.split(): + for counter in counters: if counter in notcounter: continue - p = subprocess.Popen(["pmcstat", "-p", counter, options.program], - stdout=PIPE) - result = p.communicate()[0] + p = subprocess.Popen(["pmcstat", "-p", counter, args.program], + text=True, stderr=PIPE) + result = p.communicate()[1] print(result) - if (options.wait == True): + if (args.wait == True): try: - value = raw_input("next?") + value = input("Waitin for you to press ENTER") except EOFError: sys.exit()