* [Intel-gfx] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing
@ 2020-01-17 18:49 Tvrtko Ursulin
2020-01-17 20:58 ` [igt-dev] " Ye, Tony
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Tvrtko Ursulin @ 2020-01-17 18:49 UTC (permalink / raw)
To: igt-dev; +Cc: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
...
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Tony Ye <tony.ye@intel.com>
---
Tony could you please check if this works for you and even send me some
raw trace files you might have so I see how it looks?
P.S.
I don't yet guarantee the results are 100% reliable and truthful. Or that
it won't crash.
---
scripts/trace.pl | 283 +++++++++++++++++++++++++----------------------
1 file changed, 151 insertions(+), 132 deletions(-)
diff --git a/scripts/trace.pl b/scripts/trace.pl
index 77587f24197a..8cad7e6ef65b 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -34,11 +34,10 @@ my $cid = 0;
my %queues;
my @freqs;
-use constant VENG => '255:254';
+use constant VENG => '65534:65534';
my $max_requests = 1000;
my $width_us = 32000;
-my $correct_durations = 0;
my %ignore_ring;
my %skip_box;
my $html = 0;
@@ -224,18 +223,6 @@ sub arg_zoom_width
return @_;
}
-sub arg_split_requests
-{
- return unless scalar(@_);
-
- if ($_[0] eq '--split-requests' or $_[0] eq '-s') {
- shift @_;
- $correct_durations = 1;
- }
-
- return @_;
-}
-
sub arg_ignore_ring
{
my $val;
@@ -299,7 +286,6 @@ while (@args) {
@args = arg_trace(@args);
@args = arg_max_requests(@args);
@args = arg_zoom_width(@args);
- @args = arg_split_requests(@args);
@args = arg_ignore_ring(@args);
@args = arg_skip_box(@args);
@args = arg_colour_contexts(@args);
@@ -340,7 +326,79 @@ sub is_veng
{
my ($class, $instance) = split ':', shift;
- return $instance eq '254';
+ return 1 if $instance eq '254' or $instance eq '65534';
+}
+
+my (%port_keys, %port_times);
+
+sub port_in
+{
+ my ($ring, $port, $key, $time) = @_;
+ my ($port_key, $port_time);
+ my @slices;
+
+ $db{$key}->{'slices'} = \@slices
+ unless exists $db{$key}->{'slices'};
+
+ $db{$key}->{'in'}++;
+
+ unless (exists $port_keys{$ring}) {
+ my (@keys, @times);
+
+ $port_keys{$ring} = \@keys;
+ $port_times{$ring} = \@times;
+ }
+
+ $port_key = $port_keys{$ring};
+ $port_time = $port_times{$ring};
+
+ unless (defined $port_key->[$port] and $port_key->[$port] eq $key) {
+ $port_key->[$port] = $key;
+ $port_time->[$port] = $time;
+ }
+}
+
+sub port_out
+{
+ my ($ring, $key, $time) = @_;
+ my ($port_key, $port_time);
+ my $port;
+
+ die unless $db{$key}->{'in'};
+ $db{$key}->{'in'}--;
+
+ $port_key = $port_keys{$ring};
+ $port_time = $port_times{$ring};
+
+ for (my $i = 0; $i < scalar(@{$port_key}); $i++) {
+ next unless defined $port_key->[$i];
+
+ if ($port_key->[$i] eq $key) {
+ $port = $i;
+ last;
+ }
+ }
+
+ return unless defined $port;
+
+ if ($port == 0) {
+ my $s = $db{$key}->{'slices'};
+ my $next;
+
+ push @{$s}, [$port_time->[$port], $time];
+
+ $next = $port + 1;
+ if (defined $port_key->[$next]) {
+ $port_time->[$next] = $time;
+ shift @{$port_key};
+ shift @{$port_time};
+ }
+ }
+
+ if ($db{$key}->{'in'} == 0) {
+ $port_key->[$port] = undef;
+ $port_time->[$port] = undef;
+ }
}
# Main input loop - parse lines and build the internal representation of the
@@ -368,7 +426,6 @@ while (<>) {
next unless $f =~ m/=/;
($k, $v) = ($`, $');
- $k = 'global' if $k eq 'global_seqno';
chop $v if substr($v, -1, 1) eq ',';
$tp{$k} = $v;
@@ -433,76 +490,89 @@ while (<>) {
}
} elsif ($tp_name eq 'i915:i915_request_submit:') {
die if exists $submit{$key};
- die unless exists $queue{$key};
+ unless (exists $queue{$key}) { # i915 internal
+ $queue{$key} = $time;
+ $ctxdb{$orig_ctx} = 1;
+ }
die if $ring eq VENG and not exists $queues{$ctx};
$submit{$key} = $time;
} elsif ($tp_name eq 'i915:i915_request_in:') {
+ my $port = $tp{'port'};
my ($q, $s);
my %req;
- # preemption
- delete $db{$key} if exists $db{$key};
-
unless (exists $queue{$key}) {
# Virtual engine
my $vkey = db_key(VENG, $ctx, $seqno);
my %req;
die unless exists $queues{$ctx};
- die unless exists $queue{$vkey};
die unless exists $submit{$vkey};
- # Create separate request record on the queue timeline
$q = $queue{$vkey};
$s = $submit{$vkey};
- $req{'queue'} = $q;
- $req{'submit'} = $s;
+
+ unless (exists $vdb{$vkey}) {
+ # Create separate request record on the queue
+ # timeline.
+ $req{'queue'} = $q;
+ $req{'submit'} = $s;
+ $req{'start'} = $time;
+ $req{'end'} = $time;
+ $req{'ring'} = VENG;
+ $req{'phys-engine'} = $ring;
+ $req{'seqno'} = $seqno;
+ $req{'ctx'} = $ctx;
+ $req{'name'} = $ctx . '/' . $seqno;
+ $req{'port'} = $port;
+
+ $vdb{$vkey} = \%req;
+ }
+ } else {
+ $q = $queue{$key};
+ $s = $submit{$key};
+ }
+
+ unless (exists $db{$key}) {
$req{'start'} = $time;
- $req{'end'} = $time;
- $req{'ring'} = VENG;
+ $req{'ring'} = $ring;
$req{'seqno'} = $seqno;
$req{'ctx'} = $ctx;
+ $ctxtimelines{$ctx . '/' . $ring} = 1;
$req{'name'} = $ctx . '/' . $seqno;
- $req{'global'} = $tp{'global'};
- $req{'port'} = $tp{'port'};
+ $req{'port'} = $port;
+ $req{'queue'} = $q;
+ $req{'submit'} = $s;
+ $req{'virtual'} = 1 if exists $queues{$ctx};
+ $rings{$ring} = $gid++ unless exists $rings{$ring};
+ $ringmap{$rings{$ring}} = $ring;
+ $db{$key} = \%req;
- $vdb{$vkey} = \%req;
- } else {
- $q = $queue{$key};
- $s = $submit{$key};
}
- $req{'start'} = $time;
- $req{'ring'} = $ring;
- $req{'seqno'} = $seqno;
- $req{'ctx'} = $ctx;
- $ctxtimelines{$ctx . '/' . $ring} = 1;
- $req{'name'} = $ctx . '/' . $seqno;
- $req{'global'} = $tp{'global'};
- $req{'port'} = $tp{'port'};
- $req{'queue'} = $q;
- $req{'submit'} = $s;
- $req{'virtual'} = 1 if exists $queues{$ctx};
- $rings{$ring} = $gid++ unless exists $rings{$ring};
- $ringmap{$rings{$ring}} = $ring;
- $db{$key} = \%req;
+ port_in($ring, $port, $key, $time);
} elsif ($tp_name eq 'i915:i915_request_out:') {
- if ($tp{'completed?'}) {
- my $nkey;
+ my ($nkey, $completed, $prev_in);
- die unless exists $db{$key};
- die unless exists $db{$key}->{'start'};
- die if exists $db{$key}->{'end'};
-
- $nkey = notify_key($ctx, $seqno);
+ if ($ring eq VENG and not exists $db{$key}) {
+ my $vkey = db_key(VENG, $ctx, $seqno);
- $db{$key}->{'end'} = $time;
- $db{$key}->{'notify'} = $notify{$nkey}
- if exists $notify{$nkey};
- } else {
- delete $db{$key};
+ $ring = $vdb{$vkey}->{'phys-engine'};
+ $key = db_key($ring, $ctx, $seqno);
}
+
+ die unless exists $db{$key};
+ die unless exists $db{$key}->{'start'};
+
+ $nkey = notify_key($ctx, $seqno);
+
+ port_out($ring, $key, $time);
+
+ $db{$key}->{'notify'} = $notify{$nkey}
+ if exists $notify{$nkey};
+ $db{$key}->{'end'} = $time;
+ $db{$key}->{'completed'} = $tp{'completed?'};
} elsif ($tp_name eq 'dma_fence:dma_fence_signaled:') {
my $nkey;
@@ -561,6 +631,18 @@ sub sortStart {
return $val;
}
+sub sortEnd {
+ my $as = $db{$a}->{'end'};
+ my $bs = $db{$b}->{'end'};
+ my $val;
+
+say $a unless defined $as;
+ $val = $as <=> $bs;
+ $val = $a cmp $b if $val == 0;
+
+ return $val;
+}
+
sub get_engine_timeline {
my ($ring) = @_;
my @timeline;
@@ -568,7 +650,7 @@ sub get_engine_timeline {
return $engine_timelines{$ring} if exists $engine_timelines{$ring};
@timeline = grep { $db{$_}->{'ring'} eq $ring } keys %db;
- @timeline = sort sortStart @timeline;
+ @timeline = sort sortEnd @timeline;
$engine_timelines{$ring} = \@timeline;
return \@timeline;
@@ -679,73 +761,6 @@ sub get_ctx_timeline {
return \@timeline;
}
-# Split out merged batches if requested.
-if ($correct_durations) {
- # Shift !port0 requests start time to after the previous context on the
- # same timeline has finished.
- foreach my $gid (sort keys %rings) {
- my $ring = $ringmap{$rings{$gid}};
- my $timeline = get_engine_timeline($ring);
- my $complete;
-
- foreach my $pos (0..$#{$timeline}) {
- my $key = @{$timeline}[$pos];
- my $prev = $complete;
- my $pkey;
-
- $complete = $key unless exists $db{$key}->{'no-end'};
- $pkey = $complete;
-
- next if $db{$key}->{'port'} == 0;
-
- $pkey = $prev if $complete eq $key;
-
- die unless defined $pkey;
-
- $db{$key}->{'start'} = $db{$pkey}->{'end'};
- $db{$key}->{'start'} = $db{$pkey}->{'notify'} if $db{$key}->{'start'} > $db{$key}->{'end'};
-
- die if $db{$key}->{'start'} > $db{$key}->{'end'};
-
- $re_sort = 1;
- }
- }
-
- maybe_sort_keys();
-
- # Batch with no-end (no request_out) means it was submitted as part of
- # coalesced context. This means it's start time should be set to the end
- # time of a following request on this context timeline.
- foreach my $tkey (sort keys %ctxtimelines) {
- my ($ctx, $ring) = split '/', $tkey;
- my $timeline = get_ctx_timeline($ctx, $ring, $tkey);
- my $last_complete = -1;
- my $complete;
-
- foreach my $pos (0..$#{$timeline}) {
- my $key = @{$timeline}[$pos];
- my $next_key;
-
- next unless exists $db{$key}->{'no-end'};
- last if $pos == $#{$timeline};
-
- # Shift following request to start after the current
- # one, but only if that wouldn't make it zero duration,
- # which would indicate notify arrived after context
- # complete.
- $next_key = ${$timeline}[$pos + 1];
- if (exists $db{$key}->{'notify'} and
- $db{$key}->{'notify'} < $db{$key}->{'end'}) {
- $db{$next_key}->{'engine-start'} = $db{$next_key}->{'start'};
- $db{$next_key}->{'start'} = $db{$key}->{'notify'};
- $re_sort = 1;
- }
- }
- }
-}
-
-maybe_sort_keys();
-
# GPU time accounting
my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
my (%submit_avg, %execute_avg, %ctxsave_avg);
@@ -781,8 +796,7 @@ foreach my $key (@sorted_keys) {
$db{$key}->{'duration'} = 0;
}
- $running{$ring} += $end - $start if $correct_durations or
- not exists $db{$key}->{'no-end'};
+ $running{$ring} += $end - $start if not exists $db{$key}->{'no-end'};
unless (exists $db{$key}->{'virtual'}) {
$runnable{$ring} += $db{$key}->{'execute-delay'};
$queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'};
@@ -1324,9 +1338,14 @@ foreach my $key (sort sortQueue keys %db) {
$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
$content .= "<br>$db{$key}->{'duration'}us <small>($db{$key}->{'context-complete-delay'}us)</small>";
- $startend = 'start: ' . $start . ', end: ' . $notify;
- print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
- $i++;
+ foreach my $slice (@{$db{$key}->{'slices'}}) {
+ my ($s, $e) = ($start, $notify);
+ $s = @{$slice}[0] if @{$slice}[0] >= $start;
+ $e = @{$slice}[1] if @{$slice}[1] <= $notify;
+ $startend = 'start: ' . $s . ', end: ' . $e;
+ print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
+ $i++;
+ }
}
# user interrupt to context complete
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [igt-dev] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing 2020-01-17 18:49 [Intel-gfx] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing Tvrtko Ursulin @ 2020-01-17 20:58 ` Ye, Tony 2020-01-20 10:02 ` Tvrtko Ursulin 2020-01-17 21:08 ` Ye, Tony ` (2 subsequent siblings) 3 siblings, 1 reply; 6+ messages in thread From: Ye, Tony @ 2020-01-17 20:58 UTC (permalink / raw) To: Tvrtko Ursulin, igt-dev; +Cc: Intel-gfx, Tvrtko Ursulin [-- Attachment #1: Type: text/plain, Size: 12124 bytes --] Failed on parsing the trace log: Died at ./trace.pl line 296. Raw data attached. Regards, Tony On 1/17/2020 10:49 AM, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > > ... > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > Cc: Tony Ye <tony.ye@intel.com> > --- > Tony could you please check if this works for you and even send me some > raw trace files you might have so I see how it looks? > > P.S. > I don't yet guarantee the results are 100% reliable and truthful. Or that > it won't crash. > --- > scripts/trace.pl | 283 +++++++++++++++++++++++++---------------------- > 1 file changed, 151 insertions(+), 132 deletions(-) > > diff --git a/scripts/trace.pl b/scripts/trace.pl > index 77587f24197a..8cad7e6ef65b 100755 > --- a/scripts/trace.pl > +++ b/scripts/trace.pl > @@ -34,11 +34,10 @@ my $cid = 0; > my %queues; > my @freqs; > > -use constant VENG => '255:254'; > +use constant VENG => '65534:65534'; > > my $max_requests = 1000; > my $width_us = 32000; > -my $correct_durations = 0; > my %ignore_ring; > my %skip_box; > my $html = 0; > @@ -224,18 +223,6 @@ sub arg_zoom_width > return @_; > } > > -sub arg_split_requests > -{ > - return unless scalar(@_); > - > - if ($_[0] eq '--split-requests' or $_[0] eq '-s') { > - shift @_; > - $correct_durations = 1; > - } > - > - return @_; > -} > - > sub arg_ignore_ring > { > my $val; > @@ -299,7 +286,6 @@ while (@args) { > @args = arg_trace(@args); > @args = arg_max_requests(@args); > @args = arg_zoom_width(@args); > - @args = arg_split_requests(@args); > @args = arg_ignore_ring(@args); > @args = arg_skip_box(@args); > @args = arg_colour_contexts(@args); > @@ -340,7 +326,79 @@ sub is_veng > { > my ($class, $instance) = split ':', shift; > > - return $instance eq '254'; > + return 1 if $instance eq '254' or $instance eq '65534'; > +} > + > +my (%port_keys, %port_times); > + > +sub port_in > +{ > + my ($ring, $port, $key, $time) = @_; > + my ($port_key, $port_time); > + my @slices; > + > + $db{$key}->{'slices'} = \@slices > + unless exists $db{$key}->{'slices'}; > + > + $db{$key}->{'in'}++; > + > + unless (exists $port_keys{$ring}) { > + my (@keys, @times); > + > + $port_keys{$ring} = \@keys; > + $port_times{$ring} = \@times; > + } > + > + $port_key = $port_keys{$ring}; > + $port_time = $port_times{$ring}; > + > + unless (defined $port_key->[$port] and $port_key->[$port] eq $key) { > + $port_key->[$port] = $key; > + $port_time->[$port] = $time; > + } > +} > + > +sub port_out > +{ > + my ($ring, $key, $time) = @_; > + my ($port_key, $port_time); > + my $port; > + > + die unless $db{$key}->{'in'}; > + $db{$key}->{'in'}--; > + > + $port_key = $port_keys{$ring}; > + $port_time = $port_times{$ring}; > + > + for (my $i = 0; $i < scalar(@{$port_key}); $i++) { > + next unless defined $port_key->[$i]; > + > + if ($port_key->[$i] eq $key) { > + $port = $i; > + last; > + } > + } > + > + return unless defined $port; > + > + if ($port == 0) { > + my $s = $db{$key}->{'slices'}; > + my $next; > + > + push @{$s}, [$port_time->[$port], $time]; > + > + $next = $port + 1; > + if (defined $port_key->[$next]) { > + $port_time->[$next] = $time; > + shift @{$port_key}; > + shift @{$port_time}; > + } > + } > + > + if ($db{$key}->{'in'} == 0) { > + $port_key->[$port] = undef; > + $port_time->[$port] = undef; > + } > } > > # Main input loop - parse lines and build the internal representation of the > @@ -368,7 +426,6 @@ while (<>) { > > next unless $f =~ m/=/; > ($k, $v) = ($`, $'); > - $k = 'global' if $k eq 'global_seqno'; > chop $v if substr($v, -1, 1) eq ','; > $tp{$k} = $v; > > @@ -433,76 +490,89 @@ while (<>) { > } > } elsif ($tp_name eq 'i915:i915_request_submit:') { > die if exists $submit{$key}; > - die unless exists $queue{$key}; > + unless (exists $queue{$key}) { # i915 internal > + $queue{$key} = $time; > + $ctxdb{$orig_ctx} = 1; > + } > die if $ring eq VENG and not exists $queues{$ctx}; > > $submit{$key} = $time; > } elsif ($tp_name eq 'i915:i915_request_in:') { > + my $port = $tp{'port'}; > my ($q, $s); > my %req; > > - # preemption > - delete $db{$key} if exists $db{$key}; > - > unless (exists $queue{$key}) { > # Virtual engine > my $vkey = db_key(VENG, $ctx, $seqno); > my %req; > > die unless exists $queues{$ctx}; > - die unless exists $queue{$vkey}; > die unless exists $submit{$vkey}; > > - # Create separate request record on the queue timeline > $q = $queue{$vkey}; > $s = $submit{$vkey}; > - $req{'queue'} = $q; > - $req{'submit'} = $s; > + > + unless (exists $vdb{$vkey}) { > + # Create separate request record on the queue > + # timeline. > + $req{'queue'} = $q; > + $req{'submit'} = $s; > + $req{'start'} = $time; > + $req{'end'} = $time; > + $req{'ring'} = VENG; > + $req{'phys-engine'} = $ring; > + $req{'seqno'} = $seqno; > + $req{'ctx'} = $ctx; > + $req{'name'} = $ctx . '/' . $seqno; > + $req{'port'} = $port; > + > + $vdb{$vkey} = \%req; > + } > + } else { > + $q = $queue{$key}; > + $s = $submit{$key}; > + } > + > + unless (exists $db{$key}) { > $req{'start'} = $time; > - $req{'end'} = $time; > - $req{'ring'} = VENG; > + $req{'ring'} = $ring; > $req{'seqno'} = $seqno; > $req{'ctx'} = $ctx; > + $ctxtimelines{$ctx . '/' . $ring} = 1; > $req{'name'} = $ctx . '/' . $seqno; > - $req{'global'} = $tp{'global'}; > - $req{'port'} = $tp{'port'}; > + $req{'port'} = $port; > + $req{'queue'} = $q; > + $req{'submit'} = $s; > + $req{'virtual'} = 1 if exists $queues{$ctx}; > + $rings{$ring} = $gid++ unless exists $rings{$ring}; > + $ringmap{$rings{$ring}} = $ring; > + $db{$key} = \%req; > > - $vdb{$vkey} = \%req; > - } else { > - $q = $queue{$key}; > - $s = $submit{$key}; > } > > - $req{'start'} = $time; > - $req{'ring'} = $ring; > - $req{'seqno'} = $seqno; > - $req{'ctx'} = $ctx; > - $ctxtimelines{$ctx . '/' . $ring} = 1; > - $req{'name'} = $ctx . '/' . $seqno; > - $req{'global'} = $tp{'global'}; > - $req{'port'} = $tp{'port'}; > - $req{'queue'} = $q; > - $req{'submit'} = $s; > - $req{'virtual'} = 1 if exists $queues{$ctx}; > - $rings{$ring} = $gid++ unless exists $rings{$ring}; > - $ringmap{$rings{$ring}} = $ring; > - $db{$key} = \%req; > + port_in($ring, $port, $key, $time); > } elsif ($tp_name eq 'i915:i915_request_out:') { > - if ($tp{'completed?'}) { > - my $nkey; > + my ($nkey, $completed, $prev_in); > > - die unless exists $db{$key}; > - die unless exists $db{$key}->{'start'}; > - die if exists $db{$key}->{'end'}; > - > - $nkey = notify_key($ctx, $seqno); > + if ($ring eq VENG and not exists $db{$key}) { > + my $vkey = db_key(VENG, $ctx, $seqno); > > - $db{$key}->{'end'} = $time; > - $db{$key}->{'notify'} = $notify{$nkey} > - if exists $notify{$nkey}; > - } else { > - delete $db{$key}; > + $ring = $vdb{$vkey}->{'phys-engine'}; > + $key = db_key($ring, $ctx, $seqno); > } > + > + die unless exists $db{$key}; > + die unless exists $db{$key}->{'start'}; > + > + $nkey = notify_key($ctx, $seqno); > + > + port_out($ring, $key, $time); > + > + $db{$key}->{'notify'} = $notify{$nkey} > + if exists $notify{$nkey}; > + $db{$key}->{'end'} = $time; > + $db{$key}->{'completed'} = $tp{'completed?'}; > } elsif ($tp_name eq 'dma_fence:dma_fence_signaled:') { > my $nkey; > > @@ -561,6 +631,18 @@ sub sortStart { > return $val; > } > > +sub sortEnd { > + my $as = $db{$a}->{'end'}; > + my $bs = $db{$b}->{'end'}; > + my $val; > + > +say $a unless defined $as; > + $val = $as <=> $bs; > + $val = $a cmp $b if $val == 0; > + > + return $val; > +} > + > sub get_engine_timeline { > my ($ring) = @_; > my @timeline; > @@ -568,7 +650,7 @@ sub get_engine_timeline { > return $engine_timelines{$ring} if exists $engine_timelines{$ring}; > > @timeline = grep { $db{$_}->{'ring'} eq $ring } keys %db; > - @timeline = sort sortStart @timeline; > + @timeline = sort sortEnd @timeline; > $engine_timelines{$ring} = \@timeline; > > return \@timeline; > @@ -679,73 +761,6 @@ sub get_ctx_timeline { > return \@timeline; > } > > -# Split out merged batches if requested. > -if ($correct_durations) { > - # Shift !port0 requests start time to after the previous context on the > - # same timeline has finished. > - foreach my $gid (sort keys %rings) { > - my $ring = $ringmap{$rings{$gid}}; > - my $timeline = get_engine_timeline($ring); > - my $complete; > - > - foreach my $pos (0..$#{$timeline}) { > - my $key = @{$timeline}[$pos]; > - my $prev = $complete; > - my $pkey; > - > - $complete = $key unless exists $db{$key}->{'no-end'}; > - $pkey = $complete; > - > - next if $db{$key}->{'port'} == 0; > - > - $pkey = $prev if $complete eq $key; > - > - die unless defined $pkey; > - > - $db{$key}->{'start'} = $db{$pkey}->{'end'}; > - $db{$key}->{'start'} = $db{$pkey}->{'notify'} if $db{$key}->{'start'} > $db{$key}->{'end'}; > - > - die if $db{$key}->{'start'} > $db{$key}->{'end'}; > - > - $re_sort = 1; > - } > - } > - > - maybe_sort_keys(); > - > - # Batch with no-end (no request_out) means it was submitted as part of > - # coalesced context. This means it's start time should be set to the end > - # time of a following request on this context timeline. > - foreach my $tkey (sort keys %ctxtimelines) { > - my ($ctx, $ring) = split '/', $tkey; > - my $timeline = get_ctx_timeline($ctx, $ring, $tkey); > - my $last_complete = -1; > - my $complete; > - > - foreach my $pos (0..$#{$timeline}) { > - my $key = @{$timeline}[$pos]; > - my $next_key; > - > - next unless exists $db{$key}->{'no-end'}; > - last if $pos == $#{$timeline}; > - > - # Shift following request to start after the current > - # one, but only if that wouldn't make it zero duration, > - # which would indicate notify arrived after context > - # complete. > - $next_key = ${$timeline}[$pos + 1]; > - if (exists $db{$key}->{'notify'} and > - $db{$key}->{'notify'} < $db{$key}->{'end'}) { > - $db{$next_key}->{'engine-start'} = $db{$next_key}->{'start'}; > - $db{$next_key}->{'start'} = $db{$key}->{'notify'}; > - $re_sort = 1; > - } > - } > - } > -} > - > -maybe_sort_keys(); > - > # GPU time accounting > my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count); > my (%submit_avg, %execute_avg, %ctxsave_avg); > @@ -781,8 +796,7 @@ foreach my $key (@sorted_keys) { > $db{$key}->{'duration'} = 0; > } > > - $running{$ring} += $end - $start if $correct_durations or > - not exists $db{$key}->{'no-end'}; > + $running{$ring} += $end - $start if not exists $db{$key}->{'no-end'}; > unless (exists $db{$key}->{'virtual'}) { > $runnable{$ring} += $db{$key}->{'execute-delay'}; > $queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'}; > @@ -1324,9 +1338,14 @@ foreach my $key (sort sortQueue keys %db) { > $content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'}; > $content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'}; > $content .= "<br>$db{$key}->{'duration'}us <small>($db{$key}->{'context-complete-delay'}us)</small>"; > - $startend = 'start: ' . $start . ', end: ' . $notify; > - print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n"; > - $i++; > + foreach my $slice (@{$db{$key}->{'slices'}}) { > + my ($s, $e) = ($start, $notify); > + $s = @{$slice}[0] if @{$slice}[0] >= $start; > + $e = @{$slice}[1] if @{$slice}[1] <= $notify; > + $startend = 'start: ' . $s . ', end: ' . $e; > + print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n"; > + $i++; > + } > } > > # user interrupt to context complete > [-- Attachment #2: perf.data.tar.gz --] [-- Type: application/x-gzip, Size: 95585 bytes --] [-- Attachment #3: Type: text/plain, Size: 154 bytes --] _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [igt-dev] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing 2020-01-17 20:58 ` [igt-dev] " Ye, Tony @ 2020-01-20 10:02 ` Tvrtko Ursulin 0 siblings, 0 replies; 6+ messages in thread From: Tvrtko Ursulin @ 2020-01-20 10:02 UTC (permalink / raw) To: Ye, Tony, igt-dev; +Cc: Intel-gfx, Tvrtko Ursulin On 17/01/2020 20:58, Ye, Tony wrote: > Failed on parsing the trace log: > Died at ./trace.pl line 296. > Raw data attached. I need to add better error messages - that line is command line argument handling. I have dropped "-s" from this version in favour of always trying to track ELSP port occupancy. Regardless, the logic still does not seem solid. Some parts of your trace file are not correctly represented in the HTML. Back to the drawing board. Regards, Tvrtko > Regards, > Tony > On 1/17/2020 10:49 AM, Tvrtko Ursulin wrote: >> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> >> ... >> >> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> Cc: Tony Ye <tony.ye@intel.com> >> --- >> Tony could you please check if this works for you and even send me some >> raw trace files you might have so I see how it looks? >> >> P.S. >> I don't yet guarantee the results are 100% reliable and truthful. Or that >> it won't crash. >> --- >> scripts/trace.pl | 283 +++++++++++++++++++++++++---------------------- >> 1 file changed, 151 insertions(+), 132 deletions(-) >> >> diff --git a/scripts/trace.pl b/scripts/trace.pl >> index 77587f24197a..8cad7e6ef65b 100755 >> --- a/scripts/trace.pl >> +++ b/scripts/trace.pl >> @@ -34,11 +34,10 @@ my $cid = 0; >> my %queues; >> my @freqs; >> -use constant VENG => '255:254'; >> +use constant VENG => '65534:65534'; >> my $max_requests = 1000; >> my $width_us = 32000; >> -my $correct_durations = 0; >> my %ignore_ring; >> my %skip_box; >> my $html = 0; >> @@ -224,18 +223,6 @@ sub arg_zoom_width >> return @_; >> } >> -sub arg_split_requests >> -{ >> - return unless scalar(@_); >> - >> - if ($_[0] eq '--split-requests' or $_[0] eq '-s') { >> - shift @_; >> - $correct_durations = 1; >> - } >> - >> - return @_; >> -} >> - >> sub arg_ignore_ring >> { >> my $val; >> @@ -299,7 +286,6 @@ while (@args) { >> @args = arg_trace(@args); >> @args = arg_max_requests(@args); >> @args = arg_zoom_width(@args); >> - @args = arg_split_requests(@args); >> @args = arg_ignore_ring(@args); >> @args = arg_skip_box(@args); >> @args = arg_colour_contexts(@args); >> @@ -340,7 +326,79 @@ sub is_veng >> { >> my ($class, $instance) = split ':', shift; >> - return $instance eq '254'; >> + return 1 if $instance eq '254' or $instance eq '65534'; >> +} >> + >> +my (%port_keys, %port_times); >> + >> +sub port_in >> +{ >> + my ($ring, $port, $key, $time) = @_; >> + my ($port_key, $port_time); >> + my @slices; >> + >> + $db{$key}->{'slices'} = \@slices >> + unless exists $db{$key}->{'slices'}; >> + >> + $db{$key}->{'in'}++; >> + >> + unless (exists $port_keys{$ring}) { >> + my (@keys, @times); >> + >> + $port_keys{$ring} = \@keys; >> + $port_times{$ring} = \@times; >> + } >> + >> + $port_key = $port_keys{$ring}; >> + $port_time = $port_times{$ring}; >> + >> + unless (defined $port_key->[$port] and $port_key->[$port] eq $key) { >> + $port_key->[$port] = $key; >> + $port_time->[$port] = $time; >> + } >> +} >> + >> +sub port_out >> +{ >> + my ($ring, $key, $time) = @_; >> + my ($port_key, $port_time); >> + my $port; >> + >> + die unless $db{$key}->{'in'}; >> + $db{$key}->{'in'}--; >> + >> + $port_key = $port_keys{$ring}; >> + $port_time = $port_times{$ring}; >> + >> + for (my $i = 0; $i < scalar(@{$port_key}); $i++) { >> + next unless defined $port_key->[$i]; >> + >> + if ($port_key->[$i] eq $key) { >> + $port = $i; >> + last; >> + } >> + } >> + >> + return unless defined $port; >> + >> + if ($port == 0) { >> + my $s = $db{$key}->{'slices'}; >> + my $next; >> + >> + push @{$s}, [$port_time->[$port], $time]; >> + >> + $next = $port + 1; >> + if (defined $port_key->[$next]) { >> + $port_time->[$next] = $time; >> + shift @{$port_key}; >> + shift @{$port_time}; >> + } >> + } >> + >> + if ($db{$key}->{'in'} == 0) { >> + $port_key->[$port] = undef; >> + $port_time->[$port] = undef; >> + } >> } >> # Main input loop - parse lines and build the internal >> representation of the >> @@ -368,7 +426,6 @@ while (<>) { >> next unless $f =~ m/=/; >> ($k, $v) = ($`, $'); >> - $k = 'global' if $k eq 'global_seqno'; >> chop $v if substr($v, -1, 1) eq ','; >> $tp{$k} = $v; >> @@ -433,76 +490,89 @@ while (<>) { >> } >> } elsif ($tp_name eq 'i915:i915_request_submit:') { >> die if exists $submit{$key}; >> - die unless exists $queue{$key}; >> + unless (exists $queue{$key}) { # i915 internal >> + $queue{$key} = $time; >> + $ctxdb{$orig_ctx} = 1; >> + } >> die if $ring eq VENG and not exists $queues{$ctx}; >> $submit{$key} = $time; >> } elsif ($tp_name eq 'i915:i915_request_in:') { >> + my $port = $tp{'port'}; >> my ($q, $s); >> my %req; >> - # preemption >> - delete $db{$key} if exists $db{$key}; >> - >> unless (exists $queue{$key}) { >> # Virtual engine >> my $vkey = db_key(VENG, $ctx, $seqno); >> my %req; >> die unless exists $queues{$ctx}; >> - die unless exists $queue{$vkey}; >> die unless exists $submit{$vkey}; >> - # Create separate request record on the queue timeline >> $q = $queue{$vkey}; >> $s = $submit{$vkey}; >> - $req{'queue'} = $q; >> - $req{'submit'} = $s; >> + >> + unless (exists $vdb{$vkey}) { >> + # Create separate request record on the queue >> + # timeline. >> + $req{'queue'} = $q; >> + $req{'submit'} = $s; >> + $req{'start'} = $time; >> + $req{'end'} = $time; >> + $req{'ring'} = VENG; >> + $req{'phys-engine'} = $ring; >> + $req{'seqno'} = $seqno; >> + $req{'ctx'} = $ctx; >> + $req{'name'} = $ctx . '/' . $seqno; >> + $req{'port'} = $port; >> + >> + $vdb{$vkey} = \%req; >> + } >> + } else { >> + $q = $queue{$key}; >> + $s = $submit{$key}; >> + } >> + >> + unless (exists $db{$key}) { >> $req{'start'} = $time; >> - $req{'end'} = $time; >> - $req{'ring'} = VENG; >> + $req{'ring'} = $ring; >> $req{'seqno'} = $seqno; >> $req{'ctx'} = $ctx; >> + $ctxtimelines{$ctx . '/' . $ring} = 1; >> $req{'name'} = $ctx . '/' . $seqno; >> - $req{'global'} = $tp{'global'}; >> - $req{'port'} = $tp{'port'}; >> + $req{'port'} = $port; >> + $req{'queue'} = $q; >> + $req{'submit'} = $s; >> + $req{'virtual'} = 1 if exists $queues{$ctx}; >> + $rings{$ring} = $gid++ unless exists $rings{$ring}; >> + $ringmap{$rings{$ring}} = $ring; >> + $db{$key} = \%req; >> - $vdb{$vkey} = \%req; >> - } else { >> - $q = $queue{$key}; >> - $s = $submit{$key}; >> } >> - $req{'start'} = $time; >> - $req{'ring'} = $ring; >> - $req{'seqno'} = $seqno; >> - $req{'ctx'} = $ctx; >> - $ctxtimelines{$ctx . '/' . $ring} = 1; >> - $req{'name'} = $ctx . '/' . $seqno; >> - $req{'global'} = $tp{'global'}; >> - $req{'port'} = $tp{'port'}; >> - $req{'queue'} = $q; >> - $req{'submit'} = $s; >> - $req{'virtual'} = 1 if exists $queues{$ctx}; >> - $rings{$ring} = $gid++ unless exists $rings{$ring}; >> - $ringmap{$rings{$ring}} = $ring; >> - $db{$key} = \%req; >> + port_in($ring, $port, $key, $time); >> } elsif ($tp_name eq 'i915:i915_request_out:') { >> - if ($tp{'completed?'}) { >> - my $nkey; >> + my ($nkey, $completed, $prev_in); >> - die unless exists $db{$key}; >> - die unless exists $db{$key}->{'start'}; >> - die if exists $db{$key}->{'end'}; >> - >> - $nkey = notify_key($ctx, $seqno); >> + if ($ring eq VENG and not exists $db{$key}) { >> + my $vkey = db_key(VENG, $ctx, $seqno); >> - $db{$key}->{'end'} = $time; >> - $db{$key}->{'notify'} = $notify{$nkey} >> - if exists $notify{$nkey}; >> - } else { >> - delete $db{$key}; >> + $ring = $vdb{$vkey}->{'phys-engine'}; >> + $key = db_key($ring, $ctx, $seqno); >> } >> + >> + die unless exists $db{$key}; >> + die unless exists $db{$key}->{'start'}; >> + >> + $nkey = notify_key($ctx, $seqno); >> + >> + port_out($ring, $key, $time); >> + >> + $db{$key}->{'notify'} = $notify{$nkey} >> + if exists $notify{$nkey}; >> + $db{$key}->{'end'} = $time; >> + $db{$key}->{'completed'} = $tp{'completed?'}; >> } elsif ($tp_name eq 'dma_fence:dma_fence_signaled:') { >> my $nkey; >> @@ -561,6 +631,18 @@ sub sortStart { >> return $val; >> } >> +sub sortEnd { >> + my $as = $db{$a}->{'end'}; >> + my $bs = $db{$b}->{'end'}; >> + my $val; >> + >> +say $a unless defined $as; >> + $val = $as <=> $bs; >> + $val = $a cmp $b if $val == 0; >> + >> + return $val; >> +} >> + >> sub get_engine_timeline { >> my ($ring) = @_; >> my @timeline; >> @@ -568,7 +650,7 @@ sub get_engine_timeline { >> return $engine_timelines{$ring} if exists $engine_timelines{$ring}; >> @timeline = grep { $db{$_}->{'ring'} eq $ring } keys %db; >> - @timeline = sort sortStart @timeline; >> + @timeline = sort sortEnd @timeline; >> $engine_timelines{$ring} = \@timeline; >> return \@timeline; >> @@ -679,73 +761,6 @@ sub get_ctx_timeline { >> return \@timeline; >> } >> -# Split out merged batches if requested. >> -if ($correct_durations) { >> - # Shift !port0 requests start time to after the previous context >> on the >> - # same timeline has finished. >> - foreach my $gid (sort keys %rings) { >> - my $ring = $ringmap{$rings{$gid}}; >> - my $timeline = get_engine_timeline($ring); >> - my $complete; >> - >> - foreach my $pos (0..$#{$timeline}) { >> - my $key = @{$timeline}[$pos]; >> - my $prev = $complete; >> - my $pkey; >> - >> - $complete = $key unless exists $db{$key}->{'no-end'}; >> - $pkey = $complete; >> - >> - next if $db{$key}->{'port'} == 0; >> - >> - $pkey = $prev if $complete eq $key; >> - >> - die unless defined $pkey; >> - >> - $db{$key}->{'start'} = $db{$pkey}->{'end'}; >> - $db{$key}->{'start'} = $db{$pkey}->{'notify'} if >> $db{$key}->{'start'} > $db{$key}->{'end'}; >> - >> - die if $db{$key}->{'start'} > $db{$key}->{'end'}; >> - >> - $re_sort = 1; >> - } >> - } >> - >> - maybe_sort_keys(); >> - >> - # Batch with no-end (no request_out) means it was submitted as >> part of >> - # coalesced context. This means it's start time should be set to >> the end >> - # time of a following request on this context timeline. >> - foreach my $tkey (sort keys %ctxtimelines) { >> - my ($ctx, $ring) = split '/', $tkey; >> - my $timeline = get_ctx_timeline($ctx, $ring, $tkey); >> - my $last_complete = -1; >> - my $complete; >> - >> - foreach my $pos (0..$#{$timeline}) { >> - my $key = @{$timeline}[$pos]; >> - my $next_key; >> - >> - next unless exists $db{$key}->{'no-end'}; >> - last if $pos == $#{$timeline}; >> - >> - # Shift following request to start after the current >> - # one, but only if that wouldn't make it zero duration, >> - # which would indicate notify arrived after context >> - # complete. >> - $next_key = ${$timeline}[$pos + 1]; >> - if (exists $db{$key}->{'notify'} and >> - $db{$key}->{'notify'} < $db{$key}->{'end'}) { >> - $db{$next_key}->{'engine-start'} = >> $db{$next_key}->{'start'}; >> - $db{$next_key}->{'start'} = $db{$key}->{'notify'}; >> - $re_sort = 1; >> - } >> - } >> - } >> -} >> - >> -maybe_sort_keys(); >> - >> # GPU time accounting >> my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, >> %batch_count); >> my (%submit_avg, %execute_avg, %ctxsave_avg); >> @@ -781,8 +796,7 @@ foreach my $key (@sorted_keys) { >> $db{$key}->{'duration'} = 0; >> } >> - $running{$ring} += $end - $start if $correct_durations or >> - not exists $db{$key}->{'no-end'}; >> + $running{$ring} += $end - $start if not exists >> $db{$key}->{'no-end'}; >> unless (exists $db{$key}->{'virtual'}) { >> $runnable{$ring} += $db{$key}->{'execute-delay'}; >> $queued{$ring} += $start - $db{$key}->{'execute-delay'} - >> $db{$key}->{'queue'}; >> @@ -1324,9 +1338,14 @@ foreach my $key (sort sortQueue keys %db) { >> $content .= ' <small><i>++</i></small> ' if exists >> $db{$key}->{'no-end'}; >> $content .= ' <small><i>+</i></small> ' if exists >> $db{$key}->{'no-notify'}; >> $content .= "<br>$db{$key}->{'duration'}us >> <small>($db{$key}->{'context-complete-delay'}us)</small>"; >> - $startend = 'start: ' . $start . ', end: ' . $notify; >> - print "\t{id: $i, key: $skey, $type group: $group, subgroup: >> $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, >> style: \'$style\'},\n"; >> - $i++; >> + foreach my $slice (@{$db{$key}->{'slices'}}) { >> + my ($s, $e) = ($start, $notify); >> + $s = @{$slice}[0] if @{$slice}[0] >= $start; >> + $e = @{$slice}[1] if @{$slice}[1] <= $notify; >> + $startend = 'start: ' . $s . ', end: ' . $e; >> + print "\t{id: $i, key: $skey, $type group: $group, >> subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', >> $startend, style: \'$style\'},\n"; >> + $i++; >> + } >> } >> # user interrupt to context complete >> _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [igt-dev] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing 2020-01-17 18:49 [Intel-gfx] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing Tvrtko Ursulin 2020-01-17 20:58 ` [igt-dev] " Ye, Tony @ 2020-01-17 21:08 ` Ye, Tony 2020-01-17 21:27 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2020-01-20 17:09 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 3 siblings, 0 replies; 6+ messages in thread From: Ye, Tony @ 2020-01-17 21:08 UTC (permalink / raw) To: Tvrtko Ursulin, igt-dev; +Cc: Intel-gfx, Tvrtko Ursulin Failed on parsing the trace log: Died at ./trace.pl line 296. Regards, Tony On 1/17/2020 10:49 AM, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > > ... > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > Cc: Tony Ye <tony.ye@intel.com> > --- > Tony could you please check if this works for you and even send me some > raw trace files you might have so I see how it looks? > > P.S. > I don't yet guarantee the results are 100% reliable and truthful. Or that > it won't crash. > --- > scripts/trace.pl | 283 +++++++++++++++++++++++++---------------------- > 1 file changed, 151 insertions(+), 132 deletions(-) > > diff --git a/scripts/trace.pl b/scripts/trace.pl > index 77587f24197a..8cad7e6ef65b 100755 > --- a/scripts/trace.pl > +++ b/scripts/trace.pl > @@ -34,11 +34,10 @@ my $cid = 0; > my %queues; > my @freqs; > > -use constant VENG => '255:254'; > +use constant VENG => '65534:65534'; > > my $max_requests = 1000; > my $width_us = 32000; > -my $correct_durations = 0; > my %ignore_ring; > my %skip_box; > my $html = 0; > @@ -224,18 +223,6 @@ sub arg_zoom_width > return @_; > } > > -sub arg_split_requests > -{ > - return unless scalar(@_); > - > - if ($_[0] eq '--split-requests' or $_[0] eq '-s') { > - shift @_; > - $correct_durations = 1; > - } > - > - return @_; > -} > - > sub arg_ignore_ring > { > my $val; > @@ -299,7 +286,6 @@ while (@args) { > @args = arg_trace(@args); > @args = arg_max_requests(@args); > @args = arg_zoom_width(@args); > - @args = arg_split_requests(@args); > @args = arg_ignore_ring(@args); > @args = arg_skip_box(@args); > @args = arg_colour_contexts(@args); > @@ -340,7 +326,79 @@ sub is_veng > { > my ($class, $instance) = split ':', shift; > > - return $instance eq '254'; > + return 1 if $instance eq '254' or $instance eq '65534'; > +} > + > +my (%port_keys, %port_times); > + > +sub port_in > +{ > + my ($ring, $port, $key, $time) = @_; > + my ($port_key, $port_time); > + my @slices; > + > + $db{$key}->{'slices'} = \@slices > + unless exists $db{$key}->{'slices'}; > + > + $db{$key}->{'in'}++; > + > + unless (exists $port_keys{$ring}) { > + my (@keys, @times); > + > + $port_keys{$ring} = \@keys; > + $port_times{$ring} = \@times; > + } > + > + $port_key = $port_keys{$ring}; > + $port_time = $port_times{$ring}; > + > + unless (defined $port_key->[$port] and $port_key->[$port] eq $key) { > + $port_key->[$port] = $key; > + $port_time->[$port] = $time; > + } > +} > + > +sub port_out > +{ > + my ($ring, $key, $time) = @_; > + my ($port_key, $port_time); > + my $port; > + > + die unless $db{$key}->{'in'}; > + $db{$key}->{'in'}--; > + > + $port_key = $port_keys{$ring}; > + $port_time = $port_times{$ring}; > + > + for (my $i = 0; $i < scalar(@{$port_key}); $i++) { > + next unless defined $port_key->[$i]; > + > + if ($port_key->[$i] eq $key) { > + $port = $i; > + last; > + } > + } > + > + return unless defined $port; > + > + if ($port == 0) { > + my $s = $db{$key}->{'slices'}; > + my $next; > + > + push @{$s}, [$port_time->[$port], $time]; > + > + $next = $port + 1; > + if (defined $port_key->[$next]) { > + $port_time->[$next] = $time; > + shift @{$port_key}; > + shift @{$port_time}; > + } > + } > + > + if ($db{$key}->{'in'} == 0) { > + $port_key->[$port] = undef; > + $port_time->[$port] = undef; > + } > } > > # Main input loop - parse lines and build the internal representation of the > @@ -368,7 +426,6 @@ while (<>) { > > next unless $f =~ m/=/; > ($k, $v) = ($`, $'); > - $k = 'global' if $k eq 'global_seqno'; > chop $v if substr($v, -1, 1) eq ','; > $tp{$k} = $v; > > @@ -433,76 +490,89 @@ while (<>) { > } > } elsif ($tp_name eq 'i915:i915_request_submit:') { > die if exists $submit{$key}; > - die unless exists $queue{$key}; > + unless (exists $queue{$key}) { # i915 internal > + $queue{$key} = $time; > + $ctxdb{$orig_ctx} = 1; > + } > die if $ring eq VENG and not exists $queues{$ctx}; > > $submit{$key} = $time; > } elsif ($tp_name eq 'i915:i915_request_in:') { > + my $port = $tp{'port'}; > my ($q, $s); > my %req; > > - # preemption > - delete $db{$key} if exists $db{$key}; > - > unless (exists $queue{$key}) { > # Virtual engine > my $vkey = db_key(VENG, $ctx, $seqno); > my %req; > > die unless exists $queues{$ctx}; > - die unless exists $queue{$vkey}; > die unless exists $submit{$vkey}; > > - # Create separate request record on the queue timeline > $q = $queue{$vkey}; > $s = $submit{$vkey}; > - $req{'queue'} = $q; > - $req{'submit'} = $s; > + > + unless (exists $vdb{$vkey}) { > + # Create separate request record on the queue > + # timeline. > + $req{'queue'} = $q; > + $req{'submit'} = $s; > + $req{'start'} = $time; > + $req{'end'} = $time; > + $req{'ring'} = VENG; > + $req{'phys-engine'} = $ring; > + $req{'seqno'} = $seqno; > + $req{'ctx'} = $ctx; > + $req{'name'} = $ctx . '/' . $seqno; > + $req{'port'} = $port; > + > + $vdb{$vkey} = \%req; > + } > + } else { > + $q = $queue{$key}; > + $s = $submit{$key}; > + } > + > + unless (exists $db{$key}) { > $req{'start'} = $time; > - $req{'end'} = $time; > - $req{'ring'} = VENG; > + $req{'ring'} = $ring; > $req{'seqno'} = $seqno; > $req{'ctx'} = $ctx; > + $ctxtimelines{$ctx . '/' . $ring} = 1; > $req{'name'} = $ctx . '/' . $seqno; > - $req{'global'} = $tp{'global'}; > - $req{'port'} = $tp{'port'}; > + $req{'port'} = $port; > + $req{'queue'} = $q; > + $req{'submit'} = $s; > + $req{'virtual'} = 1 if exists $queues{$ctx}; > + $rings{$ring} = $gid++ unless exists $rings{$ring}; > + $ringmap{$rings{$ring}} = $ring; > + $db{$key} = \%req; > > - $vdb{$vkey} = \%req; > - } else { > - $q = $queue{$key}; > - $s = $submit{$key}; > } > > - $req{'start'} = $time; > - $req{'ring'} = $ring; > - $req{'seqno'} = $seqno; > - $req{'ctx'} = $ctx; > - $ctxtimelines{$ctx . '/' . $ring} = 1; > - $req{'name'} = $ctx . '/' . $seqno; > - $req{'global'} = $tp{'global'}; > - $req{'port'} = $tp{'port'}; > - $req{'queue'} = $q; > - $req{'submit'} = $s; > - $req{'virtual'} = 1 if exists $queues{$ctx}; > - $rings{$ring} = $gid++ unless exists $rings{$ring}; > - $ringmap{$rings{$ring}} = $ring; > - $db{$key} = \%req; > + port_in($ring, $port, $key, $time); > } elsif ($tp_name eq 'i915:i915_request_out:') { > - if ($tp{'completed?'}) { > - my $nkey; > + my ($nkey, $completed, $prev_in); > > - die unless exists $db{$key}; > - die unless exists $db{$key}->{'start'}; > - die if exists $db{$key}->{'end'}; > - > - $nkey = notify_key($ctx, $seqno); > + if ($ring eq VENG and not exists $db{$key}) { > + my $vkey = db_key(VENG, $ctx, $seqno); > > - $db{$key}->{'end'} = $time; > - $db{$key}->{'notify'} = $notify{$nkey} > - if exists $notify{$nkey}; > - } else { > - delete $db{$key}; > + $ring = $vdb{$vkey}->{'phys-engine'}; > + $key = db_key($ring, $ctx, $seqno); > } > + > + die unless exists $db{$key}; > + die unless exists $db{$key}->{'start'}; > + > + $nkey = notify_key($ctx, $seqno); > + > + port_out($ring, $key, $time); > + > + $db{$key}->{'notify'} = $notify{$nkey} > + if exists $notify{$nkey}; > + $db{$key}->{'end'} = $time; > + $db{$key}->{'completed'} = $tp{'completed?'}; > } elsif ($tp_name eq 'dma_fence:dma_fence_signaled:') { > my $nkey; > > @@ -561,6 +631,18 @@ sub sortStart { > return $val; > } > > +sub sortEnd { > + my $as = $db{$a}->{'end'}; > + my $bs = $db{$b}->{'end'}; > + my $val; > + > +say $a unless defined $as; > + $val = $as <=> $bs; > + $val = $a cmp $b if $val == 0; > + > + return $val; > +} > + > sub get_engine_timeline { > my ($ring) = @_; > my @timeline; > @@ -568,7 +650,7 @@ sub get_engine_timeline { > return $engine_timelines{$ring} if exists $engine_timelines{$ring}; > > @timeline = grep { $db{$_}->{'ring'} eq $ring } keys %db; > - @timeline = sort sortStart @timeline; > + @timeline = sort sortEnd @timeline; > $engine_timelines{$ring} = \@timeline; > > return \@timeline; > @@ -679,73 +761,6 @@ sub get_ctx_timeline { > return \@timeline; > } > > -# Split out merged batches if requested. > -if ($correct_durations) { > - # Shift !port0 requests start time to after the previous context on the > - # same timeline has finished. > - foreach my $gid (sort keys %rings) { > - my $ring = $ringmap{$rings{$gid}}; > - my $timeline = get_engine_timeline($ring); > - my $complete; > - > - foreach my $pos (0..$#{$timeline}) { > - my $key = @{$timeline}[$pos]; > - my $prev = $complete; > - my $pkey; > - > - $complete = $key unless exists $db{$key}->{'no-end'}; > - $pkey = $complete; > - > - next if $db{$key}->{'port'} == 0; > - > - $pkey = $prev if $complete eq $key; > - > - die unless defined $pkey; > - > - $db{$key}->{'start'} = $db{$pkey}->{'end'}; > - $db{$key}->{'start'} = $db{$pkey}->{'notify'} if $db{$key}->{'start'} > $db{$key}->{'end'}; > - > - die if $db{$key}->{'start'} > $db{$key}->{'end'}; > - > - $re_sort = 1; > - } > - } > - > - maybe_sort_keys(); > - > - # Batch with no-end (no request_out) means it was submitted as part of > - # coalesced context. This means it's start time should be set to the end > - # time of a following request on this context timeline. > - foreach my $tkey (sort keys %ctxtimelines) { > - my ($ctx, $ring) = split '/', $tkey; > - my $timeline = get_ctx_timeline($ctx, $ring, $tkey); > - my $last_complete = -1; > - my $complete; > - > - foreach my $pos (0..$#{$timeline}) { > - my $key = @{$timeline}[$pos]; > - my $next_key; > - > - next unless exists $db{$key}->{'no-end'}; > - last if $pos == $#{$timeline}; > - > - # Shift following request to start after the current > - # one, but only if that wouldn't make it zero duration, > - # which would indicate notify arrived after context > - # complete. > - $next_key = ${$timeline}[$pos + 1]; > - if (exists $db{$key}->{'notify'} and > - $db{$key}->{'notify'} < $db{$key}->{'end'}) { > - $db{$next_key}->{'engine-start'} = $db{$next_key}->{'start'}; > - $db{$next_key}->{'start'} = $db{$key}->{'notify'}; > - $re_sort = 1; > - } > - } > - } > -} > - > -maybe_sort_keys(); > - > # GPU time accounting > my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count); > my (%submit_avg, %execute_avg, %ctxsave_avg); > @@ -781,8 +796,7 @@ foreach my $key (@sorted_keys) { > $db{$key}->{'duration'} = 0; > } > > - $running{$ring} += $end - $start if $correct_durations or > - not exists $db{$key}->{'no-end'}; > + $running{$ring} += $end - $start if not exists $db{$key}->{'no-end'}; > unless (exists $db{$key}->{'virtual'}) { > $runnable{$ring} += $db{$key}->{'execute-delay'}; > $queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'}; > @@ -1324,9 +1338,14 @@ foreach my $key (sort sortQueue keys %db) { > $content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'}; > $content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'}; > $content .= "<br>$db{$key}->{'duration'}us <small>($db{$key}->{'context-complete-delay'}us)</small>"; > - $startend = 'start: ' . $start . ', end: ' . $notify; > - print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n"; > - $i++; > + foreach my $slice (@{$db{$key}->{'slices'}}) { > + my ($s, $e) = ($start, $notify); > + $s = @{$slice}[0] if @{$slice}[0] >= $start; > + $e = @{$slice}[1] if @{$slice}[1] <= $notify; > + $startend = 'start: ' . $s . ', end: ' . $e; > + print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n"; > + $i++; > + } > } > > # user interrupt to context complete > _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 6+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing 2020-01-17 18:49 [Intel-gfx] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing Tvrtko Ursulin 2020-01-17 20:58 ` [igt-dev] " Ye, Tony 2020-01-17 21:08 ` Ye, Tony @ 2020-01-17 21:27 ` Patchwork 2020-01-20 17:09 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 3 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2020-01-17 21:27 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev == Series Details == Series: scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing URL : https://patchwork.freedesktop.org/series/72213/ State : success == Summary == CI Bug Log - changes from CI_DRM_7767 -> IGTPW_3938 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/index.html Known issues ------------ Here are the changes found in IGTPW_3938 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_module_load@reload-with-fault-injection: - fi-skl-6700k2: [PASS][1] -> [DMESG-WARN][2] ([i915#889]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-skl-6700k2/igt@i915_module_load@reload-with-fault-injection.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-skl-6700k2/igt@i915_module_load@reload-with-fault-injection.html * igt@i915_selftest@live_gem_contexts: - fi-hsw-peppy: [PASS][3] -> [DMESG-FAIL][4] ([i915#722]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-hsw-peppy/igt@i915_selftest@live_gem_contexts.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-hsw-peppy/igt@i915_selftest@live_gem_contexts.html * igt@kms_chamelium@hdmi-edid-read: - fi-kbl-7500u: [PASS][5] -> [FAIL][6] ([i915#217]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-kbl-7500u/igt@kms_chamelium@hdmi-edid-read.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-kbl-7500u/igt@kms_chamelium@hdmi-edid-read.html * igt@kms_chamelium@hdmi-hpd-fast: - fi-kbl-7500u: [PASS][7] -> [FAIL][8] ([fdo#111096] / [i915#323]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html * igt@vgem_basic@debugfs: - fi-tgl-y: [PASS][9] -> [DMESG-WARN][10] ([i915#402]) +1 similar issue [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-tgl-y/igt@vgem_basic@debugfs.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-tgl-y/igt@vgem_basic@debugfs.html #### Possible fixes #### * igt@i915_getparams_basic@basic-subslice-total: - fi-tgl-y: [DMESG-WARN][11] ([i915#402]) -> [PASS][12] +1 similar issue [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-tgl-y/igt@i915_getparams_basic@basic-subslice-total.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-tgl-y/igt@i915_getparams_basic@basic-subslice-total.html * igt@i915_pm_rpm@module-reload: - fi-skl-6600u: [DMESG-WARN][13] ([i915#889]) -> [PASS][14] +23 similar issues [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-skl-6600u/igt@i915_pm_rpm@module-reload.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-skl-6600u/igt@i915_pm_rpm@module-reload.html * igt@i915_selftest@live_blt: - fi-hsw-4770: [DMESG-FAIL][15] ([i915#725]) -> [PASS][16] [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-hsw-4770/igt@i915_selftest@live_blt.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-hsw-4770/igt@i915_selftest@live_blt.html * igt@i915_selftest@live_gt_lrc: - fi-skl-6600u: [DMESG-FAIL][17] ([i915#889]) -> [PASS][18] +7 similar issues [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-skl-6600u/igt@i915_selftest@live_gt_lrc.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-skl-6600u/igt@i915_selftest@live_gt_lrc.html #### Warnings #### * igt@i915_module_load@reload-with-fault-injection: - fi-skl-6770hq: [DMESG-WARN][19] ([i915#889]) -> [DMESG-WARN][20] ([i915#88]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/fi-skl-6770hq/igt@i915_module_load@reload-with-fault-injection.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/fi-skl-6770hq/igt@i915_module_load@reload-with-fault-injection.html [fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096 [i915#217]: https://gitlab.freedesktop.org/drm/intel/issues/217 [i915#323]: https://gitlab.freedesktop.org/drm/intel/issues/323 [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402 [i915#722]: https://gitlab.freedesktop.org/drm/intel/issues/722 [i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725 [i915#88]: https://gitlab.freedesktop.org/drm/intel/issues/88 [i915#889]: https://gitlab.freedesktop.org/drm/intel/issues/889 Participating hosts (44 -> 44) ------------------------------ Additional (5): fi-gdg-551 fi-ivb-3770 fi-blb-e6850 fi-bsw-nick fi-snb-2600 Missing (5): fi-hsw-4770r fi-cml-u2 fi-ilk-m540 fi-bsw-cyan fi-byt-clapper Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5371 -> IGTPW_3938 CI-20190529: 20190529 CI_DRM_7767: dc447e46590410adce9a6fc6b19dbf02f1ba4ab4 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_3938: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/index.html IGT_5371: 1b2816124ec3dbd53b81725d39292f45d41d895b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/index.html _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 6+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing 2020-01-17 18:49 [Intel-gfx] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing Tvrtko Ursulin ` (2 preceding siblings ...) 2020-01-17 21:27 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork @ 2020-01-20 17:09 ` Patchwork 3 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2020-01-20 17:09 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev == Series Details == Series: scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing URL : https://patchwork.freedesktop.org/series/72213/ State : success == Summary == CI Bug Log - changes from CI_DRM_7767_full -> IGTPW_3938_full ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/index.html Known issues ------------ Here are the changes found in IGTPW_3938_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_ctx_persistence@vcs1-mixed-process: - shard-iclb: [PASS][1] -> [SKIP][2] ([fdo#109276] / [fdo#112080]) +6 similar issues [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb1/igt@gem_ctx_persistence@vcs1-mixed-process.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb8/igt@gem_ctx_persistence@vcs1-mixed-process.html * igt@gem_exec_balancer@hang: - shard-iclb: [PASS][3] -> [INCOMPLETE][4] ([i915#140]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb6/igt@gem_exec_balancer@hang.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb4/igt@gem_exec_balancer@hang.html * igt@gem_exec_schedule@in-order-bsd: - shard-iclb: [PASS][5] -> [SKIP][6] ([fdo#112146]) +3 similar issues [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb6/igt@gem_exec_schedule@in-order-bsd.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb4/igt@gem_exec_schedule@in-order-bsd.html * igt@gem_exec_suspend@basic-s0: - shard-iclb: [PASS][7] -> [DMESG-WARN][8] ([fdo#111764]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb6/igt@gem_exec_suspend@basic-s0.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb1/igt@gem_exec_suspend@basic-s0.html * igt@gem_mmap_gtt@cpuset-basic-small-copy: - shard-snb: [PASS][9] -> [DMESG-WARN][10] ([i915#478]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-snb1/igt@gem_mmap_gtt@cpuset-basic-small-copy.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-snb6/igt@gem_mmap_gtt@cpuset-basic-small-copy.html * igt@gem_persistent_relocs@forked-faulting-reloc-thrashing: - shard-hsw: [PASS][11] -> [INCOMPLETE][12] ([i915#530] / [i915#61]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-hsw2/igt@gem_persistent_relocs@forked-faulting-reloc-thrashing.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-hsw2/igt@gem_persistent_relocs@forked-faulting-reloc-thrashing.html * igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrash-inactive: - shard-hsw: [PASS][13] -> [TIMEOUT][14] ([fdo#112271] / [i915#530]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-hsw7/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrash-inactive.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-hsw7/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrash-inactive.html * igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing: - shard-kbl: [PASS][15] -> [TIMEOUT][16] ([fdo#112271] / [i915#530]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-kbl2/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-kbl4/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html * igt@gem_persistent_relocs@forked-thrash-inactive: - shard-kbl: [PASS][17] -> [INCOMPLETE][18] ([fdo#103665] / [i915#530]) [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-kbl7/igt@gem_persistent_relocs@forked-thrash-inactive.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-kbl6/igt@gem_persistent_relocs@forked-thrash-inactive.html * igt@gem_persistent_relocs@forked-thrashing: - shard-snb: [PASS][19] -> [FAIL][20] ([i915#520]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-snb5/igt@gem_persistent_relocs@forked-thrashing.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-snb5/igt@gem_persistent_relocs@forked-thrashing.html * igt@gem_workarounds@suspend-resume-context: - shard-apl: [PASS][21] -> [DMESG-WARN][22] ([i915#180]) +5 similar issues [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-apl4/igt@gem_workarounds@suspend-resume-context.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-apl6/igt@gem_workarounds@suspend-resume-context.html * igt@i915_suspend@debugfs-reader: - shard-kbl: [PASS][23] -> [INCOMPLETE][24] ([fdo#103665]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-kbl2/igt@i915_suspend@debugfs-reader.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-kbl3/igt@i915_suspend@debugfs-reader.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move: - shard-apl: [PASS][25] -> [FAIL][26] ([i915#49]) [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-apl1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-apl6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move.html * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes: - shard-kbl: [PASS][27] -> [DMESG-WARN][28] ([i915#180]) +2 similar issues [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-kbl3/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-kbl7/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes.html * igt@kms_psr@psr2_cursor_mmap_cpu: - shard-iclb: [PASS][29] -> [SKIP][30] ([fdo#109441]) +3 similar issues [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb2/igt@kms_psr@psr2_cursor_mmap_cpu.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb1/igt@kms_psr@psr2_cursor_mmap_cpu.html * igt@perf_pmu@busy-vcs1: - shard-iclb: [PASS][31] -> [SKIP][32] ([fdo#112080]) +15 similar issues [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb1/igt@perf_pmu@busy-vcs1.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb6/igt@perf_pmu@busy-vcs1.html * igt@prime_busy@hang-bsd2: - shard-iclb: [PASS][33] -> [SKIP][34] ([fdo#109276]) +15 similar issues [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb1/igt@prime_busy@hang-bsd2.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb5/igt@prime_busy@hang-bsd2.html #### Possible fixes #### * igt@gem_busy@busy-vcs1: - shard-iclb: [SKIP][35] ([fdo#112080]) -> [PASS][36] +8 similar issues [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb6/igt@gem_busy@busy-vcs1.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb2/igt@gem_busy@busy-vcs1.html * igt@gem_ctx_persistence@vcs1-queued: - shard-iclb: [SKIP][37] ([fdo#109276] / [fdo#112080]) -> [PASS][38] [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb5/igt@gem_ctx_persistence@vcs1-queued.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb2/igt@gem_ctx_persistence@vcs1-queued.html * igt@gem_exec_schedule@out-order-bsd2: - shard-iclb: [SKIP][39] ([fdo#109276]) -> [PASS][40] +17 similar issues [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb8/igt@gem_exec_schedule@out-order-bsd2.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb1/igt@gem_exec_schedule@out-order-bsd2.html * igt@gem_exec_schedule@preempt-other-chain-bsd: - shard-iclb: [SKIP][41] ([fdo#112146]) -> [PASS][42] +7 similar issues [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb1/igt@gem_exec_schedule@preempt-other-chain-bsd.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb6/igt@gem_exec_schedule@preempt-other-chain-bsd.html * igt@gem_persistent_relocs@forked-interruptible-thrashing: - shard-apl: [TIMEOUT][43] ([fdo#112271] / [i915#530]) -> [PASS][44] [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-apl8/igt@gem_persistent_relocs@forked-interruptible-thrashing.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-apl7/igt@gem_persistent_relocs@forked-interruptible-thrashing.html * igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy: - shard-snb: [DMESG-WARN][45] ([fdo#111870] / [i915#478]) -> [PASS][46] +1 similar issue [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-snb1/igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-snb4/igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy.html * igt@gen9_exec_parse@allowed-all: - shard-glk: [DMESG-WARN][47] ([i915#716]) -> [PASS][48] [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-glk4/igt@gen9_exec_parse@allowed-all.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-glk5/igt@gen9_exec_parse@allowed-all.html * igt@kms_cursor_crc@pipe-a-cursor-suspend: - shard-kbl: [DMESG-WARN][49] ([i915#180]) -> [PASS][50] +4 similar issues [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-kbl7/igt@kms_cursor_crc@pipe-a-cursor-suspend.html [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-suspend.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-msflip-blt: - shard-glk: [FAIL][51] ([i915#49]) -> [PASS][52] [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-glk1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-msflip-blt.html [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-glk3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-msflip-blt.html * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes: - shard-apl: [DMESG-WARN][53] ([i915#180]) -> [PASS][54] +1 similar issue [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-apl4/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes.html [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-apl2/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes.html * igt@kms_psr2_su@page_flip: - shard-iclb: [SKIP][55] ([fdo#109642] / [fdo#111068]) -> [PASS][56] [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb5/igt@kms_psr2_su@page_flip.html [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb2/igt@kms_psr2_su@page_flip.html * igt@kms_psr@psr2_sprite_plane_move: - shard-iclb: [SKIP][57] ([fdo#109441]) -> [PASS][58] +2 similar issues [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb8/igt@kms_psr@psr2_sprite_plane_move.html [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html #### Warnings #### * igt@gem_ctx_isolation@vcs1-nonpriv: - shard-iclb: [FAIL][59] ([IGT#28]) -> [SKIP][60] ([fdo#109276] / [fdo#112080]) [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb4/igt@gem_ctx_isolation@vcs1-nonpriv.html [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb5/igt@gem_ctx_isolation@vcs1-nonpriv.html * igt@gem_userptr_blits@map-fixed-invalidate-busy: - shard-snb: [DMESG-WARN][61] ([fdo#111870] / [i915#478]) -> [DMESG-WARN][62] ([fdo#110789] / [fdo#111870] / [i915#478]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-snb6/igt@gem_userptr_blits@map-fixed-invalidate-busy.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-snb1/igt@gem_userptr_blits@map-fixed-invalidate-busy.html * igt@i915_selftest@live_blt: - shard-hsw: [DMESG-FAIL][63] ([i915#725]) -> [DMESG-FAIL][64] ([i915#553] / [i915#725]) [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-hsw7/igt@i915_selftest@live_blt.html [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-hsw5/igt@i915_selftest@live_blt.html * igt@kms_dp_dsc@basic-dsc-enable-edp: - shard-iclb: [SKIP][65] ([fdo#109349]) -> [DMESG-WARN][66] ([fdo#107724]) [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7767/shard-iclb1/igt@kms_dp_dsc@basic-dsc-enable-edp.html [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/shard-iclb2/igt@kms_dp_dsc@basic-dsc-enable-edp.html [IGT#28]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/28 [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665 [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724 [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276 [fdo#109349]: https://bugs.freedesktop.org/show_bug.cgi?id=109349 [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642 [fdo#110789]: https://bugs.freedesktop.org/show_bug.cgi?id=110789 [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068 [fdo#111764]: https://bugs.freedesktop.org/show_bug.cgi?id=111764 [fdo#111870]: https://bugs.freedesktop.org/show_bug.cgi?id=111870 [fdo#112080]: https://bugs.freedesktop.org/show_bug.cgi?id=112080 [fdo#112146]: https://bugs.freedesktop.org/show_bug.cgi?id=112146 [fdo#112271]: https://bugs.freedesktop.org/show_bug.cgi?id=112271 [i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#478]: https://gitlab.freedesktop.org/drm/intel/issues/478 [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49 [i915#520]: https://gitlab.freedesktop.org/drm/intel/issues/520 [i915#530]: https://gitlab.freedesktop.org/drm/intel/issues/530 [i915#553]: https://gitlab.freedesktop.org/drm/intel/issues/553 [i915#61]: https://gitlab.freedesktop.org/drm/intel/issues/61 [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716 [i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725 Participating hosts (10 -> 8) ------------------------------ Missing (2): pig-skl-6260u pig-glk-j5005 Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5371 -> IGTPW_3938 * Piglit: piglit_4509 -> None CI-20190529: 20190529 CI_DRM_7767: dc447e46590410adce9a6fc6b19dbf02f1ba4ab4 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_3938: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/index.html IGT_5371: 1b2816124ec3dbd53b81725d39292f45d41d895b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3938/index.html _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-01-20 17:09 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-01-17 18:49 [Intel-gfx] [PATCH i-g-t] scripts/trace.pl: Update for preempt-to-busy, heartbeats and timeslicing Tvrtko Ursulin 2020-01-17 20:58 ` [igt-dev] " Ye, Tony 2020-01-20 10:02 ` Tvrtko Ursulin 2020-01-17 21:08 ` Ye, Tony 2020-01-17 21:27 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2020-01-20 17:09 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox