From patchwork Sun Jun 21 01:10:46 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 6651911 Return-Path: X-Original-To: patchwork-linux-kbuild@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id EB82D9F402 for ; Sun, 21 Jun 2015 01:11:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 34265206BA for ; Sun, 21 Jun 2015 01:11:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0C30D206AF for ; Sun, 21 Jun 2015 01:11:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754437AbbFUBLe (ORCPT ); Sat, 20 Jun 2015 21:11:34 -0400 Received: from mail-lb0-f176.google.com ([209.85.217.176]:35529 "EHLO mail-lb0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755612AbbFUBLJ (ORCPT ); Sat, 20 Jun 2015 21:11:09 -0400 Received: by lbbwc1 with SMTP id wc1so90878004lbb.2 for ; Sat, 20 Jun 2015 18:11:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yjTfBK5Quks53QyyzXr+gLOQfk/aRWhLkM2lmzPlDNs=; b=UsoqIysSPJHFBpxGIiucvJB4O9LfOipUe2PYRxgVGNOLGJ6EHQcykqcQMPaoNJ55uu ByX8fqYnasyg7B0XfLTsf/CEi8oy6h6gIXu1LJuDd9ZC7yGEmtYdlMwrxjsZOKcwKeeW ovKJbO65PVq7l4+gm6o6JZ/S827xceiMvYZps= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=yjTfBK5Quks53QyyzXr+gLOQfk/aRWhLkM2lmzPlDNs=; b=kGZ7FJh3AJqp0RuE6ioQ2vqCRaG50smh8XYtuc8Wac6Ku6c35Yz1Ij2shZJoYkDofz tYgIYTThUOdque7NUzO56WcdpBs+qBRtWqCB2Ba8v/EDnz8RaiVcL4Tps7IB3KUeYqCl XYLyoiDsXo2bBRQslkM4VVAN6oOYX6HU73fZokt1k7HtjbfoNbg7Gxz6c7IGgk5JzrHu 8cF44yEwsx1OZ4ZYLAXxqWdFe5wk+8Kuchpx5OmkuebgG2quRZfVCrxLaEMDtH0CQuX5 RYpHy21bcUcPAcjX1d6ybGL5Bo1+OKYAwQ92BguVPk32pHrmX+P+H35MLKMp7koP5meT ERKg== X-Gm-Message-State: ALoCoQnsFOKWtGPl1c5zndIs3JxBFE9pju+gj0juWc0Jy+fTlofZWCnQ+Iym6hgQy6+bg+i1NiC/ X-Received: by 10.112.105.104 with SMTP id gl8mr24331100lbb.81.1434849068162; Sat, 20 Jun 2015 18:11:08 -0700 (PDT) Received: from spencer.imf.au.dk ([130.225.20.51]) by mx.google.com with ESMTPSA id k10sm3602165lbq.9.2015.06.20.18.11.07 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 20 Jun 2015 18:11:07 -0700 (PDT) From: Rasmus Villemoes To: Michal Marek Cc: linux-kbuild@vger.kernel.org, Rasmus Villemoes , linux-kernel@vger.kernel.org Subject: [RFC 4/4] scripts: add stackdelta script Date: Sun, 21 Jun 2015 03:10:46 +0200 Message-Id: <1434849046-19920-5-git-send-email-linux@rasmusvillemoes.dk> X-Mailer: git-send-email 2.1.3 In-Reply-To: <1434849046-19920-1-git-send-email-linux@rasmusvillemoes.dk> References: <1434849046-19920-1-git-send-email-linux@rasmusvillemoes.dk> Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This adds a simple perl script for reading two files as produced by the stackusage script and computing the changes in stack usage. For example: $ scripts/stackusage -o /tmp/old.su -- CC=gcc-4.7 -j8 fs/ext4/ $ scripts/stackusage -o /tmp/new.su -- CC=gcc-5.0 -j8 fs/ext4/ $ scripts/stackdelta /tmp/{old,new}.su | sort -k5,5g shows that gcc 5.0 generally produces less stack-hungry code than gcc 4.7. Obviously, the script can also be used for measuring the effect of commits, .config tweaks or whatnot. Signed-off-by: Rasmus Villemoes --- scripts/stackdelta | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 scripts/stackdelta diff --git a/scripts/stackdelta b/scripts/stackdelta new file mode 100755 index 000000000000..18417098a378 --- /dev/null +++ b/scripts/stackdelta @@ -0,0 +1,55 @@ +#!/usr/bin/perl + +# Read two files producesd by the stackusage script, and show the +# delta between them. +# +# Currently, only shows changes for functions listed in both files. We +# could add an option to show also functions which have vanished or +# appeared (which would often be due to gcc making other inlining +# decisions). +# +# Another possible option would be a minimum absolute value for the +# delta. + +sub read_stack_usage_file { + my %su; + my $f = shift; + open(my $fh, '<', $f) + or die "cannot open $f: $!"; + while (<$fh>) { + chomp; + my ($file, $func, $size, $type) = split; + # Old versions of gcc (at least 4.7) have an annoying quirk in + # that a (static) function whose name has been changed into + # for example ext4_find_unwritten_pgoff.isra.11 will show up + # in the .su file with a name of just "11". Since such a + # numeric suffix is likely to change across different + # commits/compilers/.configs or whatever else we're trying to + # tweak, we can't really track those functions, so we just + # silently skip them. + # + # Newer gcc (at least 5.0) report the full name, so again, + # since the suffix is likely to change, we strip it. + next if $func =~ m/^[0-9]+$/; + $func =~ s/\..*$//; + $su{"${file}\t${func}"} = {size => $size, type => $type}; + } + close($fh); + return \%su; +} + +@ARGV == 2 + or die "usage: $0 "; + +my $old = read_stack_usage_file($ARGV[0]); +my $new = read_stack_usage_file($ARGV[1]); +my @common = grep {exists $new->{$_}} keys %$old; +print join(",", keys %old) . "\n"; +for (@common) { + my $x = $old->{$_}{size}; + my $y = $new->{$_}{size}; + my $delta = $y - $x; + if ($delta) { + printf "%s\t%d\t%d\t%+d\n", $_, $x, $y, $delta; + } +}