From nobody Mon Feb 23 13:32:10 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 4fKMGL53cLz6TNqr for ; Mon, 23 Feb 2026 13:32:10 +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 4fKMGL4M1hz3J8J for ; Mon, 23 Feb 2026 13:32:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771853530; 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=RYGOdVtIjChtor+tqbpxBiAodzF7vjl2J8Va8lE4SP8=; b=VGqdw8Y4trqtBBNfwFetNSibR1XwTrcPmO/QKyf8rKiitp7JZMWGsS1vcU4lJ/Biy70Vzs 9WCNvIX7sOLoGhNYmkhxMjPTGzXPWvtSxnLpW0z0vR389x6wyqH82yDWaE4u4KSDbm37RG FpEpRT2pxihdDTLpg+3pd/RMizeuVAbSvuu6iBQDjWWgv+z/39otFpfb1FPAQdW3qJ+UnM ivO+uUE0QMuSW1Up3YV1P13JZEgOgQDRpjBfQTWacKb+vfCSrHnCQbLZiuncXidY8lpKLJ k0W21W/5IH72/LHlCkEh2AwPzjIhzoJjyTlddN12MP5TewuG4OYqOOnimBJCXA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771853530; a=rsa-sha256; cv=none; b=ALet0EOegbx1y6T6dr/Ziugx/hc4flSbHL1vDncSLwhgEjd1pyUdrmUIvriL4T3IHYw9pk WExwIkg4phCppjxT+SKUXmfUb7glxCFEY2NwIz2/j7tnvCTWv51/pjHYQr7FWFZlFEcO8c 4eeIeGyLt7pATvPcH+lqes99pF07F57URYQjBGG8snzK01pGU9hUFiFibgUQLGCSIDGT6T 8ZBeHyuFWe6DzBOwCFAFskxbSJbpZfZStwDxTJWtpJksaQN/PFEzWe007gVe6555VnqDM8 bNKOLP0WqAI94+xZgGajZXTaHrqcD+kbjT7XkxIA1dLhU+FhxhQuxF6bk873TQ== 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=1771853530; 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=RYGOdVtIjChtor+tqbpxBiAodzF7vjl2J8Va8lE4SP8=; b=SNEQ7nZnLED9ouN0icu2qIJ1i34mSuHjgax7m0Oh97/rPvwlZri3/MFXjXxR6mGUjMuK1e TagbEs4pNEKFJIpcKCyDzog1PF5o2+diOJ4RISWeSDyLTbmJwGw7Ha4rY1AC/urscYYpdP 3/5D6WvQAvn4Bd3JzEZSQzzD4oXsKtEoBsW0ShjTI2T7XUuoH51pNnVj+bqfgkFjgutovG ZXqPmJPw38HKP+b7ZPkNwa5MzLXjHx746eJUihICAPE5qs27b1ZcO6CGGC/ewx4mF+e6Ti +kEl9caOlGQFFurLTMQ9RVdSunfZxA7IMKyxfTj8oBkjuevCMgK/uXlxQqX+WA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fKMGL3d1yzXjr for ; Mon, 23 Feb 2026 13:32:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46ae9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 23 Feb 2026 13:32:10 +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: d967f923caaa - stable/15 - 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/15 X-Git-Reftype: branch X-Git-Commit: d967f923caaaaf9a4efd74d1c442788377e2bc89 Auto-Submitted: auto-generated Date: Mon, 23 Feb 2026 13:32:10 +0000 Message-Id: <699c56da.46ae9.50327ab4@gitrepo.freebsd.org> The branch stable/15 has been updated by gnn: URL: https://cgit.FreeBSD.org/src/commit/?id=d967f923caaaaf9a4efd74d1c442788377e2bc89 commit d967f923caaaaf9a4efd74d1c442788377e2bc89 Author: George V. Neville-Neil AuthorDate: 2026-01-05 11:40:12 +0000 Commit: George V. Neville-Neil CommitDate: 2026-02-23 13:31:43 +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()