darshan-gather-mpi-posix-usage.pl 2.23 KB
Newer Older
Philip Carns's avatar
Philip Carns committed
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
#!/usr/bin/perl -w

# This script will go through all of the darshan logs in a given
# subdirectory and summarize a few basic statistics about data usage and
# performance, producing a text file with text in columns

#<jobid> <version> <start ascii> <end ascii> <start unix> <end unix> <nprocs> <bytes read> <bytes written> <perf estimate> 

use strict;
use File::Find;

sub wanted
{
    my $file = $_;
    my $line;
    my $version = 0.0;
    my $nprocs = 0;
    my $start = 0;
    my $end = 0;
    my $start_a = "";
    my $end_a = "";
    my $jobid = 0;
    my $bytes_r = 0;
    my $bytes_w = 0;
    my $perf = 0.0;
    my @fields;
    my $mpi_coll_count = 0;
    my $mpi_indep_count = 0;
    my $posix_count = 0;

    # only operate on darshan log files
    $file =~ /\.darshan\.gz$/ or return;    

    # grab jobid from name, old logs don't store it in the file
    if($file =~ /_id(\d+)_/) {
        $jobid = $1;
    }

    if(!(open(SUMMARY, "darshan-parser --file-list-detailed $file |")))
    {
        print(STDERR "Failed to parse $File::Find::name\n");
        return;
    }

    while ($line = <SUMMARY>) {
        if($line =~ /^#/) {
            next;
        }
        if($line =~ /^\s/) {
            next;
        }

        @fields = split(/\s/, $line);

        if($#fields == 34)
        {
Philip Carns's avatar
bug fix    
Philip Carns committed
57
            if($fields[13] > 0){
Philip Carns's avatar
Philip Carns committed
58
59
                $mpi_coll_count ++;
            }
Philip Carns's avatar
bug fix    
Philip Carns committed
60
            elsif($fields[12] > 0){
Philip Carns's avatar
Philip Carns committed
61
62
                $mpi_indep_count ++;
            }
Philip Carns's avatar
bug fix    
Philip Carns committed
63
            elsif($fields[14] > 0){
Philip Carns's avatar
Philip Carns committed
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
                $posix_count ++;
            }

        }
    }

    print(STDOUT "$jobid\t$mpi_coll_count\t$mpi_indep_count\t$posix_count\n");
    close(SUMMARY);
}

sub main
{
    my @paths;

    if($#ARGV < 0) {
        die("usage: darshan-gather-stats.pl <one or more log directories>\n");
    }

    @paths = @ARGV;

Philip Carns's avatar
Philip Carns committed
84
85
    print("# <jobid>\t<#files_using_collectives>\t<#files_using_indep>\t<#files_using_posix>\n"); 
    print("# NOTE: a given file will only show up in one category, with preference in the order shown above (i.e. a file that used collective I/O will not show up in the indep or posix category).\n");
Philip Carns's avatar
Philip Carns committed
86
87
88
89
90
91
92
93
94
95
96
97
98

    find(\&wanted, @paths);

}

main();

# Local variables:
#  c-indent-level: 4
#  c-basic-offset: 4
# End:
#  
# vim: ts=8 sts=4 sw=4 expandtab