seekmaniac: Show number of seeks averaged over time.
This commit is contained in:
parent
1111353240
commit
9efd18d0fc
|
@ -122,6 +122,24 @@ sub die_bug($) {
|
|||
exit(255);
|
||||
}
|
||||
|
||||
sub now() {
|
||||
# Returns time since epoch as in seconds with 3 decimals
|
||||
# Uses:
|
||||
# @Global::use
|
||||
# Returns:
|
||||
# $time = time now with millisecond accuracy
|
||||
if(not $Global::use{"Time::HiRes"}) {
|
||||
if(eval "use Time::HiRes qw ( time );") {
|
||||
eval "sub TimeHiRestime { return Time::HiRes::time };";
|
||||
} else {
|
||||
eval "sub TimeHiRestime { return time() };";
|
||||
}
|
||||
$Global::use{"Time::HiRes"} = 1;
|
||||
}
|
||||
|
||||
return (int(TimeHiRestime()*1000))/1000;
|
||||
}
|
||||
|
||||
$Global::version = 20200301;
|
||||
$Global::progname = "seekmaniac";
|
||||
my $dev = shift;
|
||||
|
@ -129,12 +147,20 @@ my $size = size_of_block_dev($dev);
|
|||
my ($buf,$t);
|
||||
if(open(my $fh, "<", $dev)) {
|
||||
$| = 1;
|
||||
my @spin = qw(/ - \ |);
|
||||
my @spin = split//,q[\|/-\|/-\|/-\|/-].
|
||||
q[>)|(<-<(|)>->)|(<-<(|)>->)|(<-<(|].
|
||||
q[!:.oOo.oOo.oOo.oOo.,;'"';,:=-];
|
||||
my $start = now() - 0.0001;
|
||||
my $avg = 1;
|
||||
my $seeks = 1;
|
||||
while(1) {
|
||||
my $s = $size*rand();
|
||||
seek($fh,$s,SEEK_SET) || ::die_bug("cannot seek $dev");
|
||||
read($fh,$buf,1);
|
||||
print $spin[($t++/10)%@spin],"\r";
|
||||
$seeks++;
|
||||
# Exponential moving average
|
||||
$avg = 0.9 * $avg + 0.1 * $seeks/(now()-$start);
|
||||
print $spin[($seeks/$avg*4)%@spin]," ",int($avg)," seeks per seconds \r";
|
||||
}
|
||||
} else {
|
||||
::error("cannot open $dev");
|
||||
|
|
Loading…
Reference in a new issue