From nobody Tue Jan 11 13:36:48 2022 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 1B41B193838F; Tue, 11 Jan 2022 13:36:49 +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 4JYBYr5nj0z4V8d; Tue, 11 Jan 2022 13:36:48 +0000 (UTC) (envelope-from git@FreeBSD.org) 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 A674119BFC; Tue, 11 Jan 2022 13:36:48 +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 20BDamwf024537; Tue, 11 Jan 2022 13:36:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 20BDam2m024536; Tue, 11 Jan 2022 13:36:48 GMT (envelope-from git) Date: Tue, 11 Jan 2022 13:36:48 GMT Message-Id: <202201111336.20BDam2m024536@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andriy Gapon Subject: git: 7e8ed296e120 - main - schedgraph.py: port to Python 3 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 7e8ed296e120a57211d377102fa27dd9411d0fbd Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1641908208; 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=nJ22GmXTTSx8z0HhtItic/LfdLs96odiC8u/IV9iKyw=; b=wOzXCyfBjFamOLWTV/I6TES0je3uHak/7kMCRr6Xus4rvxzhcxHDfH4cjOIGxbU4DFDmCR 1gkV9eCvHJA8gM5oxIW8aqgCbHtQMC2i9NckCAt4SjFX/cQ4IrZnZK/XbhJUU2HOMM3SQH R6GOJKkivMvm80CXMQbeiK5LKLk9kIA+/3pbHI1+UhZGC1Q/gPqGsil8po6oiABOAXkkWH LgeRlqSrcjvzIc0RZJiwyD+JDqnu+TfwavThJyOsVmS6tTB9mliHYGoaS1rI0BF29oPEOS 2DgCyARTkzOsiQLZZKtUx6uCjJmpno9NWzgZOT5LVNhD7u7GyMqKBV7N9ScNvw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1641908208; a=rsa-sha256; cv=none; b=kFEBVopVdo4O6WduHWm98uUI+KBOJFMvdl43UT3It6xrad0PB8LVLKPftlgud6AogD32EU r2X3vLw9XHCTu8iT8QHLjPCyMPQvQNzvwZPje8dW014QPqK4PtVRH3KWkMxEuS8YOb+45r SnhfOirdrjyjQZkEUDQMQNJDlql41fryVEgMjAu523xAULBEqCLLsFOVX/MornfnwIGD+i kti8YljkRX0lmN4tNwcgW6Kto5a5RL6WfMGXkMJgcm1cDj3oR+Qpbnlc5zcs1gGhaZcMst y/wePVKwtnCvagU6EBouwzx/qjKZ/NxMg48RUDvyIRpqd+tzykNAGvgU03cmwg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by avg: URL: https://cgit.FreeBSD.org/src/commit/?id=7e8ed296e120a57211d377102fa27dd9411d0fbd commit 7e8ed296e120a57211d377102fa27dd9411d0fbd Author: Andriy Gapon AuthorDate: 2022-01-11 13:31:45 +0000 Commit: Andriy Gapon CommitDate: 2022-01-11 13:32:39 +0000 schedgraph.py: port to Python 3 The change does not preserve compatibility with Python 2.7. MFC after: 4 weeks Differential Revision: https://reviews.freebsd.org/D33626 --- 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...");