From nobody Tue Feb 08 16:16:16 2022 X-Original-To: dev-commits-src-branches@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 9A12D19A53D9; Tue, 8 Feb 2022 16:16:16 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JtSmw3wzgz3p5F; Tue, 8 Feb 2022 16:16:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644336976; 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=qwuP/vUkykApbhiTeojXl85sLCN1KPHWBrHM2gLmkTs=; b=sqkQtBj9QWx6fsGIz32BD0auDQ6JdaD4t7CmOWlnujEIOwSGUDrmrPnKjgX2s+JLlRmXca MtvWGkVO140M/NtdMvK/3nrieRu4QchYo+zLU200a6TZqymNlft5Nz9KTjgIK8L/0rQY+2 egNFhoKOx9CwIOZZBw8/m/BAOlV6BB/j/gpvYb8BIyw7wGqdIvYXDErXmWnuJzcDaIsHkx 2sJP6S4XfPtTxgzqek3ZPhvj4QvGIX8u7M5DWdsahRdDfgbWRN9KJzg6aPmxXwiUQc3IBe ZP1rC6++ILqhutYSjbRMnuQGqskKKulQpk/WXUTr6SRgyZK6utZDekPc69Pxgg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 674631C6E8; Tue, 8 Feb 2022 16:16:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 218GGGd9001873; Tue, 8 Feb 2022 16:16:16 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 218GGG8M001872; Tue, 8 Feb 2022 16:16:16 GMT (envelope-from git) Date: Tue, 8 Feb 2022 16:16:16 GMT Message-Id: <202202081616.218GGG8M001872@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Andriy Gapon Subject: git: eee25e8417cf - stable/13 - schedgraph.py: port to Python 3 List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: avg X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: eee25e8417cfcef609b0761186588e3dcd637e53 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644336976; 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=qwuP/vUkykApbhiTeojXl85sLCN1KPHWBrHM2gLmkTs=; b=YbRayH9VzK6Q3avCxiSjGxwGBvyNN8ut2ApcyeWancBF5U+OYu/MFIV/f5tMJ4arYnC9wH Od6AyleWW5yJF3cE/vZXtgh1lxN7/nFtsPZI3ac+3ib3r3jKw0gXVnaBLsxEpCAWhWK8Zx FNniKLo55rsWQeapfgB5wN52aNL5DAfOudv+cW4MdOUlJeyWjmJZ0c//HUtV+G/ssstRUj TN0KO/yD/IAzQdfyPiRDP0XgrafbSH1oO+1/jEqhwnhDEf5tGTU8JKrb6F2FMwgZ9uG6uY Ue697QLgxss7fSiozLfbWqYGeBV7FYZl/rsSGe5B3UUXOml052hgCGLjcw94gw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1644336976; a=rsa-sha256; cv=none; b=Rj3axzG0rAAeaUN6yebcVX1jbWFl6fUkwzWlds30d8iuGU58fx7duJlEpYAWIyD/+9cu0D fO3HPXt6zA4vqLXE+OvMgEurJOHgTkxAZZYXsvg+aG05oJ1RTDie87emtiuPpwlz/d3mcc P1kc4+fgFT+HgSnVHDuzxMlxfngNOXaENDVJbeeAcgznCqnGwkhHLLHyevHLXQiONS4ABz eY9t21MplwQ7gge7bC2vGIUBoGFPVkKGw10F2Fuj7djnDM/sda7lUgr19TQInY5CD4YvGT 4XAz63UmyeoANEZLJxlRZEx9NSCECYpNpVpdUPA5SphYfe+NXkxJMHI54tDoZw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by avg: URL: https://cgit.FreeBSD.org/src/commit/?id=eee25e8417cfcef609b0761186588e3dcd637e53 commit eee25e8417cfcef609b0761186588e3dcd637e53 Author: Andriy Gapon AuthorDate: 2022-01-11 13:31:45 +0000 Commit: Andriy Gapon CommitDate: 2022-02-08 16:15:24 +0000 schedgraph.py: port to Python 3 The change does not preserve compatibility with Python 2.7. (cherry picked from commit 7e8ed296e120a57211d377102fa27dd9411d0fbd) --- tools/sched/schedgraph.py | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/tools/sched/schedgraph.py b/tools/sched/schedgraph.py index 6d8a4b9ada14..bfd4339f6633 100644 --- a/tools/sched/schedgraph.py +++ b/tools/sched/schedgraph.py @@ -30,11 +30,13 @@ from __future__ import print_function import sys import re import random -from Tkinter import * +from operator import attrgetter, itemgetter +from functools import total_ordering +from tkinter import * # To use: # - Install the ports/x11-toolkits/py-tkinter package; e.g. -# portinstall x11-toolkits/py-tkinter package +# pkg install x11-toolkits/py-tkinter # - Add KTR_SCHED to KTR_COMPILE and KTR_MASK in your KERNCONF; e.g. # options KTR # options KTR_ENTRIES=32768 @@ -55,6 +57,8 @@ from Tkinter import * # while the workload is still running is to avoid wasting log entries on # "idle" time at the end. # - Dump the trace to a file: 'ktrdump -ct > ktr.out' +# - Alternatively, use schedgraph.d script in this directory for getting +# the trace data by means of DTrace. See the script for details. # - Run the python script: 'python schedgraph.py ktr.out' optionally provide # your cpu frequency in ghz: 'python schedgraph.py ktr.out 2.4' # @@ -444,10 +448,6 @@ class SourceConfigure(Toplevel): for item in self.sconfig: item.uncheck() -# Reverse compare of second member of the tuple -def cmp_counts(x, y): - return y[1] - x[1] - class SourceStats(Toplevel): def __init__(self, source): self.source = source @@ -473,7 +473,7 @@ class SourceStats(Toplevel): for k, v in eventtypes.iteritems(): (c, d) = v events.append((k, c, d)) - events.sort(cmp=cmp_counts) + events.sort(key=itemgetter(1), reverse=True) ypos = 0 for event in events: @@ -793,10 +793,8 @@ class PadEvent(StateEvent): Event.draw(self, canvas, xpos, ypos, None) return (xpos + delta) -# Sort function for start y address -def source_cmp_start(x, y): - return x.y - y.y +@total_ordering class EventSource: def __init__(self, group, id): self.name = id @@ -808,12 +806,16 @@ class EventSource: self.hidden = 0 self.tag = group + id - def __cmp__(self, other): - if (other == None): - return -1 - if (self.group == other.group): - return cmp(self.name, other.name) - return cmp(self.group, other.group) + def __lt__(self, other): + if other is None: + return False + return (self.group < other.group or + self.group == other.group and self.name < other.name) + + def __eq__(self, other): + if other is None: + return False + return self.group == other.group and self.name == other.name # It is much faster to append items to a list then to insert them # at the beginning. As a result, we add events in reverse order @@ -1478,7 +1480,7 @@ class SchedGraph(Frame): # expensive due to python's canvas.move(). # def sourceshowlist(self, srclist): - srclist.sort(cmp=source_cmp_start) + srclist.sort(key=attrgetter('y')) startsize = [] for source in srclist: if (source.hidden == 0): @@ -1486,7 +1488,7 @@ class SchedGraph(Frame): startsize.append((self.sourcepicky(source), self.sourcesize(source))) - sources.sort(cmp=source_cmp_start, reverse=True) + sources.sort(key=attrgetter('y'), reverse=True) self.status.startup("Updating display..."); for source in sources: if (source.hidden == 1): @@ -1516,8 +1518,8 @@ class SchedGraph(Frame): # expensive due to python's canvas.move(). # def sourcehidelist(self, srclist): - srclist.sort(cmp=source_cmp_start) - sources.sort(cmp=source_cmp_start) + srclist.sort(key=attrgetter('y')) + sources.sort(key=attrgetter('y')) startsize = [] off = len(sources) * 100 self.status.startup("Updating display...");