From patchwork Mon Jul 9 13:19:55 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Tvrtko Ursulin
X-Patchwork-Id: 10514571
Return-Path:
Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org
[172.30.200.125])
by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id
CABF26032C for ;
Mon, 9 Jul 2018 13:20:19 +0000 (UTC)
Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1])
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B144628ABC
for ;
Mon, 9 Jul 2018 13:20:17 +0000 (UTC)
Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486)
id A55D428B01; Mon, 9 Jul 2018 13:20:17 +0000 (UTC)
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
pdx-wl-mail.web.codeaurora.org
X-Spam-Level:
X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177])
(using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 1EB5F28ABC
for ;
Mon, 9 Jul 2018 13:20:17 +0000 (UTC)
Received: from gabe.freedesktop.org (localhost [127.0.0.1])
by gabe.freedesktop.org (Postfix) with ESMTP id 8ACEF6E2A0;
Mon, 9 Jul 2018 13:20:15 +0000 (UTC)
X-Original-To: intel-gfx@lists.freedesktop.org
Delivered-To: intel-gfx@lists.freedesktop.org
Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com
[IPv6:2a00:1450:4864:20::442])
by gabe.freedesktop.org (Postfix) with ESMTPS id 19CC36E174
for ;
Mon, 9 Jul 2018 13:20:13 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id h10-v6so10956925wre.6
for ;
Mon, 09 Jul 2018 06:20:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20161025;
h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
:references;
bh=oF+H+6sgJ9BeB4tTI0t3j0VYv2uRFLN4K+Fxg6rgZA8=;
b=CtwshH3PisZu4kSQlu+pC5vxb+jup1VUk3jFfd7e1Z+yaZc1y+46u7M/sskFZXUH/+
48XEpTqu1R1xkqRH77Kc/Z2E7OOLkzXWspVSPbQyA+vGugim1wo7g//aBj+7jf6aemcH
GNCfoT4rufcvWkwHKwFZFMgDw+LGwU8nwr1ALYYVMBUbLwVttKlu/y8Ak4s36lmjZ8+8
hjq790p5zDrhH6PeVDbSxMogMlbsrDDetXPoS1qrY0Z6GLaJA7ALopSdx41DxydsZ9gF
Tp40aEvi71URwndAcPaV5dqvECmDuQG+bCl+HIvw3P9jCfazya9WLKz5wuwVOGo/dX93
e84g==
X-Gm-Message-State: APt69E1LmXQCqlGIZQTefYfzRWNdV7mN9Chilr2oap+F+VzKJziVV47l
bW5Lc6QvMRmPecrReQGScJvRJtsX
X-Google-Smtp-Source:
AAOMgpdkWwtWuTblYBr6csCTDMVaSXlDZo3MzsHf3Av54yGNSdN7zsJa3on2Xrdf+0chI79ClCeiXw==
X-Received: by 2002:adf:8bd7:: with SMTP id
w23-v6mr14000954wra.208.1531142411689;
Mon, 09 Jul 2018 06:20:11 -0700 (PDT)
Received: from localhost.localdomain ([95.146.151.144])
by smtp.gmail.com with ESMTPSA id
l10-v6sm21585637wrv.23.2018.07.09.06.20.10
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Mon, 09 Jul 2018 06:20:11 -0700 (PDT)
From: Tvrtko Ursulin
X-Google-Original-From: Tvrtko Ursulin
To: igt-dev@lists.freedesktop.org
Date: Mon, 9 Jul 2018 14:19:55 +0100
Message-Id: <20180709132004.14468-3-tvrtko.ursulin@linux.intel.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20180709132004.14468-1-tvrtko.ursulin@linux.intel.com>
References: <20180709132004.14468-1-tvrtko.ursulin@linux.intel.com>
Subject: [Intel-gfx] [PATCH i-g-t 02/11] trace.pl: Improve readability of
graphical timeline representation
X-BeenThere: intel-gfx@lists.freedesktop.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Intel graphics driver community testing & development
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Cc: intel-gfx@lists.freedesktop.org
MIME-Version: 1.0
Errors-To: intel-gfx-bounces@lists.freedesktop.org
Sender: "Intel-gfx"
X-Virus-Scanned: ClamAV using ClamSMTP
From: Tvrtko Ursulin
We add stripes for different stages of request execution so it is easier
to follow one context in the multi-colour mode.
Vertical stripe pattern indicates pipeline "blockages" - requests waiting
for dependencies before they are runnable.
Diagonal stripes indicate runnable requests waiting for GPU time.
Horizontal strips are requests executing on the GPU.
Also use this new multi-coloured mode from media-bench.pl.
v2:
John Harrison:
* Mention media-bench.pl in the commit.
* Fix HTML for single colour mode.
v3:
* Rebase.
* Apply stripes to legacy colouring as well.
v4:
John Harrison:
* Use per context colours for ctxsave and incomplete boxes.
* Clearer timeline legend.
Signed-off-by: Tvrtko Ursulin
Cc: John Harrison
---
scripts/media-bench.pl | 2 +-
scripts/trace.pl | 112 ++++++++++++++++++++++++++++++++---------
2 files changed, 90 insertions(+), 24 deletions(-)
diff --git a/scripts/media-bench.pl b/scripts/media-bench.pl
index c5628c7f2836..375844d9cdf6 100755
--- a/scripts/media-bench.pl
+++ b/scripts/media-bench.pl
@@ -207,7 +207,7 @@ sub trace_workload
show_cmd($cmd);
system($cmd);
- $cmd = "perf script | $tracepl --html -x ctxsave -s ";
+ $cmd = "perf script | $tracepl --html -x ctxsave -s -c ";
$cmd .= join ' ', map("-i $_", @skip_engine);
$cmd .= " > ${file}.html";
show_cmd($cmd);
diff --git a/scripts/trace.pl b/scripts/trace.pl
index fd414f5a4b1e..1ec8b297d15e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -727,9 +727,14 @@ foreach my $key (keys %reqwait) {
say sprintf('GPU: %.2f%% idle, %.2f%% busy',
$flat_busy{'gpu-idle'}, $flat_busy{'gpu-busy'}) unless $html;
-my $queued_colour = $colour_contexts ? 'multi-colour light' : 'blue';
-my $runnable_colour = $colour_contexts ? 'multi-colour dark' : 'grey';
-my $execute_colour = $colour_contexts ? 'multi-colour' : 'pink';
+my $timeline_text = $colour_contexts ?
+ 'Per context coloured shading like:' : 'Box shading like:';
+
+my $queued_style = box_style($min_ctx, 'queue');
+my $ready_style = box_style($min_ctx, 'ready');
+my $execute_style = box_style($min_ctx, 'execute');
+my $ctxsave_style = box_style($min_ctx, 'ctxsave');
+my $incomplete_style = box_style($min_ctx, 'incomplete');
print <
@@ -751,9 +756,28 @@ print <Toggle stacking
-$execute_colour = requests executing on the GPU
-$runnable_colour = runnable requests waiting for a slot on GPU
-$queued_colour = requests waiting on fences and dependencies before they are runnable
+Timeline request view:
+
+$timeline_text |
+
+QUEUED |
+READY |
+EXECUTE |
+CTXSAVE |
+
+ |
+ |
+(INCOMPLETE) |
+ |
+
+
+
+
+QUEUED = requests executing on the GPU
+READY = runnable requests waiting for a slot on GPU
+EXECUTE = requests waiting on fences and dependencies before they are runnable
+CTXSAVE = GPU saving the context image
+
Boxes are in format 'ctx-id/seqno'.
@@ -873,17 +897,31 @@ sub sortQueue {
sub ctx_colour
{
- my ($ctx, $stage) = (@_);
+ my ($ctx, $stage, $lfac) = (@_);
my ($s, $l);
my $val;
unless ($colour_contexts) {
if ($stage eq 'queue') {
- return 'lightblue;';
+ $val = 210;
+ $s = 65;
+ $l = 52;
} elsif ($stage eq 'ready') {
- return 'lightgrey;';
+ $val = 0;
+ $s = 0;
+ $l = 47;
} elsif ($stage eq 'execute') {
- return 'pink;';
+ $val = 346;
+ $s = 68;
+ $l = 65;
+ } elsif ($stage eq 'ctxsave') {
+ $val = 26;
+ $s = 90;
+ $l = 52;
+ } elsif ($stage eq 'incomplete') {
+ $val = 0;
+ $s = 85;
+ $l = 50;
}
} else {
if ($stage eq 'queue') {
@@ -895,12 +933,45 @@ sub ctx_colour
} elsif ($stage eq 'execute') {
$s = 80;
$l = 65;
+ } elsif ($stage eq 'ctxsave') {
+ $s = 75;
+ $l = 70;
+ } elsif ($stage eq 'incomplete') {
+ $s = 80;
+ $l = 25;
}
+
+ $val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
}
- $val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
+ $l = int($l * $lfac);
- return "hsl($val, $s%, $l%);";
+ return "hsl($val, $s%, $l%)";
+}
+
+sub box_style
+{
+ my ($ctx, $stage) = @_;
+ my $deg;
+
+ if ($stage eq 'queue') {
+ $deg = 90;
+ } elsif ($stage eq 'ready') {
+ $deg = 45;
+ } elsif ($stage eq 'execute') {
+ $deg = 0;
+ } elsif ($stage eq 'ctxsave') {
+ $deg = 105;
+ } elsif ($stage eq 'incomplete') {
+ $deg = 0;
+ }
+
+ return 'color: black; background: repeating-linear-gradient(' .
+ $deg . 'deg, ' .
+ ctx_colour($ctx, $stage, 1.0) . ', ' .
+ ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
+ ctx_colour($ctx, $stage, 0.90) . ' 10px, ' .
+ ctx_colour($ctx, $stage, 0.90) . ' 20px);';
}
my $i = 0;
@@ -917,8 +988,7 @@ foreach my $key (sort sortQueue keys %db) {
# submit to execute
unless (exists $skip_box{'queue'}) {
$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
- $style = 'color: black; background-color: ' .
- ctx_colour($ctx, 'queue');
+ $style = box_style($ctx, 'queue');
$content = "$name
$db{$key}->{'submit-delay'}us ($db{$key}->{'execute-delay'}us)";
$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
@@ -928,8 +998,7 @@ foreach my $key (sort sortQueue keys %db) {
# execute to start
unless (exists $skip_box{'ready'}) {
$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
- $style = 'color: black; background-color: ' .
- ctx_colour($ctx, 'ready');
+ $style = box_style($ctx, 'ready');
$content = "$name
$db{$key}->{'execute-delay'}us";
$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
@@ -939,12 +1008,9 @@ foreach my $key (sort sortQueue keys %db) {
# start to user interrupt
unless (exists $skip_box{'execute'}) {
$skey = -2 * $max_seqno * $ctx - 2 * $seqno - 1;
- if (exists $db{$key}->{'incomplete'}) {
- $style = 'color: white; background-color: red;';
- } else {
- $style = 'color: black; background-color: ' .
- ctx_colour($ctx, 'execute');
- }
+ $style = box_style($ctx,
+ exists $db{$key}->{'incomplete'} ?
+ 'incomplete' : 'execute');
$content = "$name $db{$key}->{'port'}";
$content .= ' ??? ' if exists $db{$key}->{'incomplete'};
$content .= ' ++ ' if exists $db{$key}->{'no-end'};
@@ -958,7 +1024,7 @@ foreach my $key (sort sortQueue keys %db) {
# user interrupt to context complete
unless (exists $skip_box{'ctxsave'}) {
$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
- $style = 'color: black; background-color: orange;';
+ $style = box_style($ctx, 'ctxsave');
my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
$content = "$name
${ctxsave}us";
$content .= ' ??? ' if exists $db{$key}->{'incomplete'};