massif_max.pl 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env perl
  2. # Parse a massif.out.xxx file and output peak total memory usage
  3. #
  4. # Copyright The Mbed TLS Contributors
  5. # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  6. #
  7. # This file is provided under the Apache License 2.0, or the
  8. # GNU General Public License v2.0 or later.
  9. #
  10. # **********
  11. # Apache License 2.0:
  12. #
  13. # Licensed under the Apache License, Version 2.0 (the "License"); you may
  14. # not use this file except in compliance with the License.
  15. # You may obtain a copy of the License at
  16. #
  17. # http://www.apache.org/licenses/LICENSE-2.0
  18. #
  19. # Unless required by applicable law or agreed to in writing, software
  20. # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  21. # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  22. # See the License for the specific language governing permissions and
  23. # limitations under the License.
  24. #
  25. # **********
  26. #
  27. # **********
  28. # GNU General Public License v2.0 or later:
  29. #
  30. # This program is free software; you can redistribute it and/or modify
  31. # it under the terms of the GNU General Public License as published by
  32. # the Free Software Foundation; either version 2 of the License, or
  33. # (at your option) any later version.
  34. #
  35. # This program is distributed in the hope that it will be useful,
  36. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  37. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  38. # GNU General Public License for more details.
  39. #
  40. # You should have received a copy of the GNU General Public License along
  41. # with this program; if not, write to the Free Software Foundation, Inc.,
  42. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  43. #
  44. # **********
  45. use warnings;
  46. use strict;
  47. use utf8;
  48. use open qw(:std utf8);
  49. die unless @ARGV == 1;
  50. my @snaps;
  51. open my $fh, '<', $ARGV[0] or die;
  52. { local $/ = 'snapshot='; @snaps = <$fh>; }
  53. close $fh or die;
  54. my ($max, $max_heap, $max_he, $max_stack) = (0, 0, 0, 0);
  55. for (@snaps)
  56. {
  57. my ($heap, $heap_extra, $stack) = m{
  58. mem_heap_B=(\d+)\n
  59. mem_heap_extra_B=(\d+)\n
  60. mem_stacks_B=(\d+)
  61. }xm;
  62. next unless defined $heap;
  63. my $total = $heap + $heap_extra + $stack;
  64. if( $total > $max ) {
  65. ($max, $max_heap, $max_he, $max_stack) = ($total, $heap, $heap_extra, $stack);
  66. }
  67. }
  68. printf "$max (heap $max_heap+$max_he, stack $max_stack)\n";