fork download
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use Cwd;
  5. use File::Path;
  6. use IO::File;
  7. use List::Util qw( first );
  8.  
  9. sub get_devname {
  10. my $cwd = cwd;
  11. print("cwd=$cwd\n");
  12. my $devname = (
  13. first { $cwd =~ m%^$_->[1]% }
  14. sort { $b->[2] <=> $a->[2] } map {
  15. my ( $dev,$mp) = @{ [split] }[0,2];
  16. [$dev,$mp,length( $mp)];
  17. } `mount`
  18. )->[0];
  19. print("devname=$devname\n");
  20. $devname =~ s%.*/%% ;
  21. $devname;
  22. }
  23.  
  24. sub diskstat {
  25. my ( $devname) = @_;
  26. @{ [split(' ',`grep $devname < /proc/diskstats`)] }[7 .. 9];
  27. }
  28.  
  29. sub f_a {
  30. my $fh = IO::File->new( &genfn(),'>') || die( $!);
  31. $fh->autoflush( 0);
  32. $fh->print('h') foreach 0 .. 16383;
  33. $fh->close;
  34. }
  35.  
  36. sub f_b {
  37. my $fh = IO::File->new( &genfn(),'>') || die( $!);
  38. $fh->autoflush( 1);
  39. $fh->print('h') foreach 0 .. 16383;
  40. $fh->close;
  41. }
  42.  
  43. sub f_c {
  44. my $fn = &genfn();
  45. foreach ( 0 .. 16383) {
  46. my $fh = IO::File->new( $fn,'>>') || die( $!);
  47. $fh->print('h');
  48. $fh->close;
  49. }
  50. }
  51.  
  52. {
  53. my $devname = &get_devname();
  54. my @conf_a = (
  55. [\&f_a,'f_a'],
  56. [\&f_b,'f_b'],
  57. [\&f_c,'f_c'],
  58. );
  59. foreach my $dir ( map { $_->[1] } @conf_a) {
  60. rmtree( $dir);
  61. mkpath( $dir);
  62. }
  63. my $sno = 0;
  64. system('sync');
  65. my @last_a = &diskstat( $devname);
  66. print("name completed merged written\n");
  67. foreach my $item ( @conf_a) {
  68. local *genfn = sub { $item->[1] . '/' . $sno++ };
  69. $item->[0]->();
  70. system('sync');
  71. my @cur_a = &diskstat( $devname);
  72. printf(
  73. "%-8s %10u %10u %10u\n",
  74. $item->[1],
  75. map { $cur_a[$_] - $last_a[$_] } 0 .. 2
  76. );
  77. @last_a = @cur_a;
  78. }
  79. }
  80.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty