… | |
… | |
7 | use File::Glob qw(); |
7 | use File::Glob qw(); |
8 | |
8 | |
9 | my $START = time; |
9 | my $START = time; |
10 | my $SELECT; |
10 | my $SELECT; |
11 | |
11 | |
12 | for(File::Glob::glob "/fs/anime/eps/*Basara/*") { |
12 | for(File::Glob::glob "/root/anime/eps/Crest*/*") { |
13 | my $fh; |
13 | my $fh; |
14 | print "$_\n"; |
14 | print "$_\n"; |
15 | open $fh, "<", $_ or die "$_: $!"; |
15 | open $fh, "<", $_ or die "$_: $!"; |
16 | push @fh, $fh; |
16 | push @fh, $fh; |
17 | } |
17 | } |
18 | |
18 | |
19 | Linux::AIO::min_parallel 4; |
19 | Linux::AIO::min_parallel 2; |
20 | $nreqs = 8; |
20 | $nreqs = 64; |
21 | |
21 | |
22 | my $lat; |
22 | my $lat; |
23 | my $cnt = 1e-36; |
23 | my $cnt = 1e-36; |
24 | |
24 | |
25 | $|=1; |
25 | $|=1; |
… | |
… | |
28 | my $fh = @fh[rand @fh]; |
28 | my $fh = @fh[rand @fh]; |
29 | my $offset = int rand 75000000; |
29 | my $offset = int rand 75000000; |
30 | my $data; |
30 | my $data; |
31 | my $start = time; |
31 | my $start = time; |
32 | #print "starting new req ($fh, $offset)\n"; |
32 | #print "starting new req ($fh, $offset)\n"; |
33 | aio_read($fh, $offset, 16*1024, $data, 0, sub { |
33 | aio_read ($fh, $offset, 16*1024, $data, 0, sub { |
34 | $start = time - $start; |
34 | $start = time - $start; |
35 | $lat += $start; |
35 | $lat += $start; |
36 | $cnt++; |
36 | $cnt++; |
37 | #print "io returned ($fh, $offset, $start)\n"; |
37 | #print "io returned ($fh, $offset, $start)\n"; |
38 | }); |
38 | }); |
… | |
… | |
45 | while(1) { |
45 | while(1) { |
46 | if (Linux::AIO::nreqs < $nreqs) { |
46 | if (Linux::AIO::nreqs < $nreqs) { |
47 | gen_request; |
47 | gen_request; |
48 | } else { |
48 | } else { |
49 | $SELECT -= time; |
49 | $SELECT -= time; |
|
|
50 | Linux::AIO::poll_wait; |
50 | my $r; |
51 | my $r; |
51 | select $r = $sr, undef, undef, undef; |
52 | select $r = $sr, undef, undef, undef; |
52 | $SELECT += time; |
53 | $SELECT += time; |
53 | } |
54 | } |
54 | Linux::AIO::poll_cb; |
55 | Linux::AIO::poll_cb; |
55 | printf "\r$lat $cnt %.2f %.3f ", $lat / $cnt, $SELECT/(time - $START); |
56 | printf "\r$lat $cnt %.4f %.3f ", $lat / $cnt, $SELECT/(time - $START); |
56 | } |
57 | } |
57 | |
58 | |