From nobody Mon Feb 23 13:33:44 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 4fKMJ85L0dz6TNt6 for ; Mon, 23 Feb 2026 13:33:44 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fKMJ835Rbz3KxK for ; Mon, 23 Feb 2026 13:33:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771853624; 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=yRQ6dXXUTiEsyMcBiCB/o9S8fh+lTFrOYOvDHKGCAQc=; b=KdHcb35myY9X53LzQKugZWx3hies5j5Ke4t5MDbJ4gqtmnCC4m8FJmOvt09BrYa10YpyYB 1VUcvy9l44zse34jiKGsiImZLTP/eLWG6aE4En5qtSVdJ19CbOb7oDiIUVeiMkYPzsmCvO QX8OaNig5eJWZL5Ng6bsuRuEn44dUTaONwQVJJjXoytaZACjLrMwUpsU3MSmcvJBBOWK1y jmfDxi+bRKJ6l/e/efw84scmpqvbhpaqGnjpQ/Oo3cMraQibw5c5zdnGyAfFI3TE6uGEfG 949KIQlTNXP+kjW2bTapGll4LY4bmrWKUiioYu4FStiYG9FT8T2KSxwkVfjTYw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771853624; a=rsa-sha256; cv=none; b=Vqn/QZLWOtBGjMPhucitGHXzh2Pyn2q4d+tIZBgs5fwJt6aqtptw8giIw9katsCucKsYY+ SwFJ8ZcGl78GaaRKUHiryGTU2pb1zoMpGBFhPA2A81lr2WRko1dDeqYq+Vc6x0paVkY535 3JFhT8nvMv1xQ3vLrCUtBDDMb9pQL8p+YDHXOgfR/clg1l4LetwDeisoDfa86bUgxHJlKD u7oNNnXrSMi0ngWGKUsga9CT0XGPIURQxVOA4rUJu9OeOZI4ExJ2MvaFEkReAV1NCFuZEX EFdD3CkS6YLHGYJCenpeZI/H7pki3ULNC6WUEZcYsPpHtYJXx8MCeiHmPBJYCg== 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=1771853624; 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=yRQ6dXXUTiEsyMcBiCB/o9S8fh+lTFrOYOvDHKGCAQc=; b=xUzhD0KEM/7b39EcXuF9pxpeeBVAySuQjylxEDOKswy2foqypmIssSiIGC5jAnqFsCivms KCcU1HCVSbsYKaDWl19kQG6oZ/NISYMQlARgfM8PhHOtNVO24wRmTM+VKc7oGWswTwMRtN u/yWag98dtc+xlJToiQ2P//bSKcv1HgdRNDCFkFit03HIUVsQ9BTLavGdKDDwHZOxoyfxr 7i0mq4KESlEeu44y2d2mRs4UfwmBI5qOK6TFAOzYE2S4YvfeJ3BpA7L5qH1Cjo5GQuNpo+ DXIUsFr1rr/pmQu/ehekaB58vU6MkaUrhalzuWO7c8XhT5IJ0+jkyNu0TtPNnQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fKMJ82MdTzY1y for ; Mon, 23 Feb 2026 13:33:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46167 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 23 Feb 2026 13:33:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: George V. Neville-Neil Subject: git: 9f80b89c5a4e - stable/14 - Convert fully to Python 3. Remove licence text, only keep SPDX. 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 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/stable/14 X-Git-Reftype: branch X-Git-Commit: 9f80b89c5a4ee66c9428f0d240899d77f442079f Auto-Submitted: auto-generated Date: Mon, 23 Feb 2026 13:33:44 +0000 Message-Id: <699c5738.46167.75b11eaa@gitrepo.freebsd.org> The branch stable/14 has been updated by gnn: URL: https://cgit.FreeBSD.org/src/commit/?id=9f80b89c5a4ee66c9428f0d240899d77f442079f commit 9f80b89c5a4ee66c9428f0d240899d77f442079f Author: George V. Neville-Neil AuthorDate: 2026-01-05 11:40:12 +0000 Commit: George V. Neville-Neil CommitDate: 2026-02-23 13:33:27 +0000 Convert fully to Python 3. Remove licence text, only keep SPDX. Update to use argparse rather than OptionParser (now deprecated). (cherry picked from commit eb1c0d74cbb99f329767b3d565ae57a3ec032bee) --- 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()