blob: 4e9e92d68e6d1a8b145259853995557aab3ebb1c [file] [log] [blame]
#!/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]);
}