#!/usr/bin/perl -w
use strict;
use Cwd;
use File::Path;
use IO::File;
use List::Util qw( first );
sub get_devname {
my $cwd = cwd;
print("cwd=$cwd\n");
my $devname = (
first { $cwd =~ m%^$_->[1]% }
sort { $b->[2] <=> $a->[2] } map {
my ( $dev,$mp) = @{ [split] }[0,2];
[$dev,$mp,length( $mp)];
} `mount`
)->[0];
print("devname=$devname\n");
$devname =~ s%.*/%% ;
$devname;
}
sub diskstat {
my ( $devname) = @_;
@{ [split(' ',`grep $devname < /proc/diskstats`)] }[7 .. 9];
}
sub f_a {
my $fh = IO::File->new( &genfn(),'>') || die( $!);
$fh->autoflush( 0);
$fh->print('h') foreach 0 .. 16383;
$fh->close;
}
sub f_b {
my $fh = IO::File->new( &genfn(),'>') || die( $!);
$fh->autoflush( 1);
$fh->print('h') foreach 0 .. 16383;
$fh->close;
}
sub f_c {
my $fn = &genfn();
foreach ( 0 .. 16383) {
my $fh = IO::File->new( $fn,'>>') || die( $!);
$fh->print('h');
$fh->close;
}
}
{
my $devname = &get_devname();
my @conf_a = (
[\&f_a,'f_a'],
[\&f_b,'f_b'],
[\&f_c,'f_c'],
);
foreach my $dir ( map { $_->[1] } @conf_a) {
rmtree( $dir);
mkpath( $dir);
}
my $sno = 0;
system('sync');
my @last_a = &diskstat( $devname);
print("name completed merged written\n");
foreach my $item ( @conf_a) {
local *genfn = sub { $item->[1] . '/' . $sno++ };
$item->[0]->();
system('sync');
my @cur_a = &diskstat( $devname);
printf(
"%-8s %10u %10u %10u\n",
$item->[1],
map { $cur_a[$_] - $last_a[$_] } 0 .. 2
);
@last_a = @cur_a;
}
}
IyEvdXNyL2Jpbi9wZXJsIC13Cgp1c2Ugc3RyaWN0Owp1c2UgQ3dkOwp1c2UgRmlsZTo6UGF0aDsKdXNlIElPOjpGaWxlOwp1c2UgTGlzdDo6VXRpbCBxdyggZmlyc3QgKTsKCnN1YiBnZXRfZGV2bmFtZSB7CiAgbXkgJGN3ZCA9IGN3ZDsKICBwcmludCgiY3dkPSRjd2RcbiIpOwogIG15ICRkZXZuYW1lID0gKAogICAgZmlyc3QgeyAkY3dkID1+IG0lXiRfLT5bMV0lIH0KICAgIHNvcnQgeyAkYi0+WzJdIDw9PiAkYS0+WzJdIH0gbWFwIHsKICAgICAgbXkgKCAkZGV2LCRtcCkgPSBAeyBbc3BsaXRdIH1bMCwyXTsKICAgICAgWyRkZXYsJG1wLGxlbmd0aCggJG1wKV07CiAgICB9IGBtb3VudGAKICAgKS0+WzBdOwogIHByaW50KCJkZXZuYW1lPSRkZXZuYW1lXG4iKTsKICAkZGV2bmFtZSA9fiBzJS4qLyUlIDsKICAkZGV2bmFtZTsKfQoKc3ViIGRpc2tzdGF0IHsKICBteSAoICRkZXZuYW1lKSA9IEBfOwogIEB7IFtzcGxpdCgnICcsYGdyZXAgJGRldm5hbWUgPCAvcHJvYy9kaXNrc3RhdHNgKV0gfVs3IC4uIDldOwp9CgpzdWIgZl9hIHsKICBteSAkZmggPSBJTzo6RmlsZS0+bmV3KCAmZ2VuZm4oKSwnPicpIHx8IGRpZSggJCEpOwogICRmaC0+YXV0b2ZsdXNoKCAwKTsKICAkZmgtPnByaW50KCdoJykgZm9yZWFjaCAwIC4uIDE2MzgzOwogICRmaC0+Y2xvc2U7Cn0KCnN1YiBmX2IgewogIG15ICRmaCA9IElPOjpGaWxlLT5uZXcoICZnZW5mbigpLCc+JykgfHwgZGllKCAkISk7CiAgJGZoLT5hdXRvZmx1c2goIDEpOwogICRmaC0+cHJpbnQoJ2gnKSBmb3JlYWNoIDAgLi4gMTYzODM7CiAgJGZoLT5jbG9zZTsKfQoKc3ViIGZfYyB7CiAgbXkgJGZuID0gJmdlbmZuKCk7CiAgZm9yZWFjaCAoIDAgLi4gMTYzODMpIHsKICAgIG15ICRmaCA9IElPOjpGaWxlLT5uZXcoICRmbiwnPj4nKSB8fCBkaWUoICQhKTsKICAgICRmaC0+cHJpbnQoJ2gnKTsKICAgICRmaC0+Y2xvc2U7CiAgfQp9Cgp7CiAgbXkgJGRldm5hbWUgPSAmZ2V0X2Rldm5hbWUoKTsKICBteSBAY29uZl9hID0gKAogICAgW1wmZl9hLCdmX2EnXSwKICAgIFtcJmZfYiwnZl9iJ10sCiAgICBbXCZmX2MsJ2ZfYyddLAogICApOwogIGZvcmVhY2ggbXkgJGRpciAoIG1hcCB7ICRfLT5bMV0gfSBAY29uZl9hKSB7CiAgICBybXRyZWUoICRkaXIpOwogICAgbWtwYXRoKCAkZGlyKTsKICB9CiAgbXkgJHNubyA9IDA7CiAgc3lzdGVtKCdzeW5jJyk7CiAgbXkgQGxhc3RfYSA9ICZkaXNrc3RhdCggJGRldm5hbWUpOwogIHByaW50KCJuYW1lICAgICAgY29tcGxldGVkICAgICBtZXJnZWQgICAgd3JpdHRlblxuIik7CiAgZm9yZWFjaCBteSAkaXRlbSAoIEBjb25mX2EpIHsKICAgIGxvY2FsICpnZW5mbiA9IHN1YiB7ICRpdGVtLT5bMV0gLiAnLycgLiAkc25vKysgfTsKICAgICRpdGVtLT5bMF0tPigpOwogICAgc3lzdGVtKCdzeW5jJyk7CiAgICBteSBAY3VyX2EgPSAmZGlza3N0YXQoICRkZXZuYW1lKTsKICAgIHByaW50ZigKICAgICAgIiUtOHMgJTEwdSAlMTB1ICUxMHVcbiIsCiAgICAgICRpdGVtLT5bMV0sCiAgICAgIG1hcCB7ICRjdXJfYVskX10gLSAkbGFzdF9hWyRfXSB9IDAgLi4gMgogICAgICk7CiAgICBAbGFzdF9hID0gQGN1cl9hOwogIH0KfQo=