[Intel-gfx] [PATCH i-g-t 1/4] scripts/trace.pl: More hash key optimisations

John Harrison John.C.Harrison at Intel.com
Mon Jan 22 22:48:43 UTC 2018


On 1/22/2018 2:14 AM, Tvrtko Ursulin wrote:
>
> On 20/01/2018 00:24, John.C.Harrison at Intel.com wrote:
>> From: John Harrison <John.C.Harrison at Intel.com>
>>
>> Cache the key count value rather than querying the hash every time.
>
> This actually makes a difference? Just curious, I would have assumed 
> Perl would know the size of it's arrays but maybe the implementation 
> is stupid...

Actually, I'm not sure it does anymore. I thought it did but I later 
decided that the change was actually just run to run noise. However, I 
already had the patch and I think it makes the code at least look 
simpler. IMHO, '$key_count' is easier to read than 'scalar(keys(%db))' 
and it is obviously trivial rather than relying on the compiler to be smart.

>
> Btw I was using Devel::NTYProf in HTML output mode to profile my 
> changes. It is quite easy to use and provided all the info I needed.
>
>> Also assert that the database does not magically change size after the
>> fixups.
>>
>> Signed-off-by: John Harrison <John.C.Harrison at intel.com>
>> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> ---
>>   scripts/trace.pl | 9 ++++++---
>>   1 file changed, 6 insertions(+), 3 deletions(-)
>>
>> diff --git a/scripts/trace.pl b/scripts/trace.pl
>> index cb93900d..7b8a920e 100755
>> --- a/scripts/trace.pl
>> +++ b/scripts/trace.pl
>> @@ -508,7 +508,9 @@ foreach my $key (keys %db) {
>>   }
>>     # Fix up incompletes
>> -foreach my $key (keys %db) {
>> +my @keys = keys(%db);
>
> This array is unused except for the query below so I'd suggest to not 
> have it.
>
>> +my $keyCount = scalar(@keys);
>
> About came case.. I won't complain too the max, since I'm happy you 
> are finding the tool useful and improving it, but it would be good to 
> stay within the same style of variable naming or we'll have a 
> mish-mash of styles which won't help readability.

Oops, I missed that. Habit and too many different style guides in too 
many different projects! I'll change it to $key_count instead.


>
> Regards,
>
> Tvrtko
>
>> +foreach my $key (@keys) {
>>       next unless exists $db{$key}->{'incomplete'};
>>         # End the incomplete batch at the time next one starts
>> @@ -522,7 +524,7 @@ foreach my $key (keys %db) {
>>           $next_key = db_key($ring, $ctx, $seqno + $i);
>>           $i++;
>>       } until ((exists $db{$next_key} and not exists 
>> $db{$next_key}->{'incomplete'})
>> -         or $i > scalar(keys(%db)));  # ugly stop hack
>> +         or $i > $keyCount);  # ugly stop hack
>>         if (exists $db{$next_key}) {
>>           $db{$key}->{'notify'} = $db{$next_key}->{'end'};
>> @@ -540,6 +542,7 @@ my $first_ts;
>>     my @sorted_keys = sort {$db{$a}->{'start'} <=> 
>> $db{$b}->{'start'}} keys %db;
>>   my $re_sort = 0;
>> +die "Database changed size?!" unless scalar(@sorted_keys) == $keyCount;
>>     foreach my $key (@sorted_keys) {
>>       my $ring = $db{$key}->{'ring'};
>> @@ -565,7 +568,7 @@ foreach my $key (@sorted_keys) {
>>           do {
>>               $next_key = db_key($ring, $ctx, $seqno + $i);
>>               $i++;
>> -        } until (exists $db{$next_key} or $i > scalar(keys(%db)));  
>> # ugly stop hack
>> +        } until (exists $db{$next_key} or $i > $keyCount); # ugly 
>> stop hack
>>             # 20us tolerance
>>           if (exists $db{$next_key} and $db{$next_key}->{'start'} < 
>> $start + 20) {
>>



More information about the Intel-gfx mailing list