You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2016/03/24 22:53:15 UTC

trafficserver git commit: TS-4297 Adds a script to diff freelist memory dumps

Repository: trafficserver
Updated Branches:
  refs/heads/master 0dde77e35 -> 797651e89


TS-4297 Adds a script to diff freelist memory dumps

This closes #538


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/797651e8
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/797651e8
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/797651e8

Branch: refs/heads/master
Commit: 797651e8919c9818b80c46fe2b447554f3882778
Parents: 0dde77e
Author: Leif Hedstrom <zw...@apache.org>
Authored: Thu Mar 24 13:50:51 2016 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Thu Mar 24 15:00:12 2016 -0600

----------------------------------------------------------------------
 tools/freelist_diff.pl | 69 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/797651e8/tools/freelist_diff.pl
----------------------------------------------------------------------
diff --git a/tools/freelist_diff.pl b/tools/freelist_diff.pl
new file mode 100755
index 0000000..8f15a93
--- /dev/null
+++ b/tools/freelist_diff.pl
@@ -0,0 +1,69 @@
+#!/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]);
+}