File: freelist_diff.pl

package info (click to toggle)
trafficserver 9.2.5%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 53,008 kB
  • sloc: cpp: 345,484; ansic: 31,134; python: 24,200; sh: 7,271; makefile: 3,045; perl: 2,261; java: 277; pascal: 119; sql: 94; xml: 2
file content (74 lines) | stat: -rwxr-xr-x 2,346 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env perl

#   Licensed to the Apache Software Foundation (ASF) under one
#   or more contributor license agreements.  See the NOTICE file
#   distributed with this work for additional information
#   regarding copyright ownership.  The ASF licenses this file
#   to you under the Apache License, Version 2.0 (the
#   "License"); you may not use this file except in compliance
#   with the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

sub usage
{
    print "Usage: freelist_diff.pl dump1.txt dump2.txt\n";
}

sub int_meg
{
    my $bytes = shift;
    return $bytes / (1024 * 1024);
}

sub load_file
{
    my $file = shift;
    my %data;

    open(DATA, $file) || return undef;
    while (<DATA>) {
        my @items = split;
        chomp @items;

        if ($#items == 6) {
            $data{$items[6]} = [int_meg($items[0]), int_meg($items[2]), int_meg($items[4])];
        }
    }
    close(DATA);

    return \%data;
}

my $data1 = load_file($ARGV[0]) || die usage();
my $data2 = load_file($ARGV[1]) || die usage();
my %diff;

while (my ($key, $value) = each(%{$data1})) {
    # before alloc [0], after alloc [1], before in-use [2], after in-use [3]
    $diff{$key} = [
        $value->[0], $data2->{$key}->[0], $value->[1], $data2->{$key}->[1],
        # diff alloc [4], diff in-use [5]
        $data2->{$key}->[0] - $value->[0], $data2->{$key}->[1] - $value->[1],
        # type size [6]
        $value->[2]
    ];
}

print "Sorted by in-use growth\n";
print "=======================\n";
foreach (sort {$diff{$b}->[5] <=> $diff{$a}->[5]} keys %diff) {
    printf("%s (%.3fM): %.1fM -> %.1fM == %.1fM\n", $_, $diff{$_}->[6], $diff{$_}->[2], $diff{$_}->[3], $diff{$_}->[5]);
}

print "\n\nSorted by allocated growth\n";
print "==========================\n";
foreach (sort {$diff{$b}->[4] <=> $diff{$a}->[4]} keys %diff) {
    printf("%s (%.3fM): %.1fM -> %.1fM == %.1fM\n", $_, $diff{$_}->[6], $diff{$_}->[0], $diff{$_}->[1], $diff{$_}->[4]);
}