fio-test

#!/usr/bin/perl
use strict ;
use warnings ;
use feature qw(say switch state) ;
use Data::Dumper;
my %global = (
# Don't change the parameter sequence. If the sequence is changed, the parser will not work.
#    blocksize => [ "4k", "8k", "16k", "32k", "64k", "128k", "256k", "512k", "1m" ],
    blocksize => [ "4k", "1m" ],
# mixed workflows
#    rwmixread => [ "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" ],
    rw        => [ "rw", "randrw" ],
    rwmixread => [ "0", "30", "50", "70", "100" ],
#direct
    direct    => [ 1 ],
#    size      => [ "1T" ],
    ioengine  => [ "libaio" ],
#    iodepth   => [ "1", "4", "8", "32", "64" ],
    iodepth   => [ "64" ],
    runtime   => [ 60 ],
#    numjobs   => [ "1", "8", "32" ],
    numjobs   => [ "32" ],
    bwavgtime => [ 100000 ],
#    write_bw_log => [ "results" ],
#    write_iops_log => [ "results" ],
#    write_lat_log => [ "results"],
);

my @config_name = qw( blocksize rw iodepth numjobs );

my $device1 = $ARGV[0];
#my $device2 = $ARGV[1];
#my $device3 = $ARGV[2];
#my $device4 = $ARGV[3];


sub cartesian {
    my @C = map { [ $_ ] } @{ shift @_ };
    foreach (@_) {
        my @A = @$_;
        @C = map { my $n = $_; map { [ $n, @$_ ] } @C } @A;
    }
    return @C;
}

my @keys = sort keys %global ;
my @global = map { $global{$_} } @keys ;

foreach ( cartesian( @global ) ) {
    my $config .= "[global]\n" ;
    my $parameters .= "" ;
    my $template = "";
    my @params = reverse @$_ ;
    foreach (@keys) {
        $template = shift( @params ) ;

        $config .= "$_=" ;
        $config .= $template ;
        $config .= "\n" ;

            if ($_ ~~ @config_name) {
              $parameters .= "$_-" ;
              $parameters .= $template ;
              $parameters .= "_" ;
            }
    }
    $config .= "group_reporting\n" ;
    $config .= "[job]\n" ;
    $config .= "filename=$device1\n" ;
#    $config .= "filename=$device2\n" ;
#    $config .= "filename=$device3\n" ;
#    $config .= "filename=$device4\n" ;
    print "-----------------\n" ;
    print "Start new test:\n" ;
    print "-----------------\n" ;
    my $time = localtime;
    print "$time\n";
    print $config ;
    print "-----------------\n" ;
#    system( "echo \"$config\" | fio --output-format=normal --output=results_$parameters.txt -" ) ;
    system( "echo \"$config\" | fio --output-format=normal -" ) ;
    sleep 1 ;
}