mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-14 15:33:49 +00:00
Work in progress v2: Redesign pt-diskstats in Perl.
This commit is contained in:
761
lib/Diskstats.pm
761
lib/Diskstats.pm
@@ -19,7 +19,7 @@
|
||||
# ###########################################################################
|
||||
{
|
||||
# Package: Diskstats
|
||||
#
|
||||
#
|
||||
|
||||
package Diskstats;
|
||||
|
||||
@@ -31,47 +31,118 @@ use constant MKDEBUG => $ENV{MKDEBUG} || 0;
|
||||
use IO::Handle;
|
||||
use List::Util qw( max first );
|
||||
|
||||
sub new {
|
||||
my ( $class, %args ) = @_;
|
||||
|
||||
my $self = {
|
||||
filename => '/proc/diskstats',
|
||||
column_regex => qr/cnc|rt|mb|busy|prg/,
|
||||
device_regex => qr/(?=)/,
|
||||
block_size => 512,
|
||||
stats_for => {},
|
||||
out_fh => \*STDOUT,
|
||||
%args,
|
||||
_sorted_devs => [],
|
||||
_save_curr_as_prev => 1, # Internal for now
|
||||
_first => 1,
|
||||
};
|
||||
BEGIN {
|
||||
# This BEGIN block checks if we can use Storable::dclone: If we can't,
|
||||
# it clobbers this package's dclone glob (*{ __PACKAGE__ . "::dclone" })
|
||||
# with an anonymous function that provides more or less what we need.
|
||||
my $have_storable = eval { require Storable };
|
||||
|
||||
return bless $self, $class;
|
||||
if ( $have_storable ) {
|
||||
Storable->import(qw(dclone));
|
||||
}
|
||||
else {
|
||||
# An extrenely poor man's dclone.
|
||||
require Scalar::Util;
|
||||
|
||||
# Nevermind the prototype. dclone has it, so it's here only it for
|
||||
# the sake of completeness.
|
||||
*dclone = sub ($) {
|
||||
my ($ref) = @_;
|
||||
my $reftype = Scalar::Util::reftype($ref) || '';
|
||||
|
||||
if ( $reftype eq ref({}) ) {
|
||||
# Only one level of depth. Not worth making it any deeper/recursive, I think.
|
||||
return { map { $_ => {%{$ref->{$_}}} } keys %$ref };
|
||||
}
|
||||
else {
|
||||
die "This basic dclone does not support [$reftype]";
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
sub new {
|
||||
my ( $class, %args ) = @_;
|
||||
|
||||
my $self = {
|
||||
filename => '/proc/diskstats',
|
||||
column_regex => qr/cnc|rt|mb|busy|prg/,
|
||||
device_regex => qr/(?=)/,
|
||||
block_size => 512,
|
||||
out_fh => \*STDOUT,
|
||||
filter_zeroed_rows => 0,
|
||||
samples_to_gather => 0,
|
||||
interval => 0,
|
||||
interactive => 0,
|
||||
%args,
|
||||
_stats_for => {},
|
||||
_sorted_devs => [],
|
||||
_ts => {},
|
||||
_save_curr_as_prev => 1, # Internal for now
|
||||
_first => 1,
|
||||
};
|
||||
|
||||
return bless $self, $class;
|
||||
}
|
||||
|
||||
sub _ts_common {
|
||||
my ($self, $key, $val) = @_;
|
||||
if ($val) {
|
||||
$self->{_ts}->{$key} = $val;
|
||||
}
|
||||
return $self->{_ts}->{$key};
|
||||
}
|
||||
|
||||
sub current_ts {
|
||||
my ($self, $val) = @_;
|
||||
return $self->_ts_common("current", $val);
|
||||
}
|
||||
|
||||
sub previous_ts {
|
||||
my ($self, $val) = @_;
|
||||
return $self->_ts_common("previous", $val);
|
||||
}
|
||||
|
||||
sub first_ts {
|
||||
my ($self, $val) = @_;
|
||||
return $self->_ts_common("first", $val);
|
||||
}
|
||||
|
||||
sub filter_zeroed_rows {
|
||||
my ($self, $new_val) = @_;
|
||||
if ( $new_val ) {
|
||||
$self->{filter_zeroed_rows} = $new_val;
|
||||
}
|
||||
return $self->{filter_zeroed_rows};
|
||||
}
|
||||
|
||||
sub interactive {
|
||||
my ($self) = @_;
|
||||
return $self->{interactive};
|
||||
}
|
||||
|
||||
sub out_fh {
|
||||
my ($self, $new_fh) = @_;
|
||||
my ( $self, $new_fh ) = @_;
|
||||
|
||||
if ($new_fh && ref($new_fh) && $new_fh->opened) {
|
||||
if ( $new_fh && ref($new_fh) && $new_fh->opened ) {
|
||||
$self->{out_fh} = $new_fh;
|
||||
}
|
||||
if (!$self->{out_fh} || !$self->{out_fh}->opened) {
|
||||
if ( !$self->{out_fh} || !$self->{out_fh}->opened ) {
|
||||
$self->{out_fh} = \*STDOUT;
|
||||
}
|
||||
return $self->{out_fh};
|
||||
}
|
||||
|
||||
sub column_regex {
|
||||
my ($self, $new_re) = @_;
|
||||
my ( $self, $new_re ) = @_;
|
||||
if ($new_re) {
|
||||
return $self->{column_regex} = $new_re;
|
||||
}
|
||||
return $self->{device_regex};
|
||||
return $self->{column_regex};
|
||||
}
|
||||
|
||||
sub device_regex {
|
||||
my ($self, $new_re) = @_;
|
||||
my ( $self, $new_re ) = @_;
|
||||
if ($new_re) {
|
||||
return $self->{device_regex} = $new_re;
|
||||
}
|
||||
@@ -79,7 +150,7 @@ sub device_regex {
|
||||
}
|
||||
|
||||
sub filename {
|
||||
my ($self, $new_filename) = @_;
|
||||
my ( $self, $new_filename ) = @_;
|
||||
if ($new_filename) {
|
||||
return $self->{filename} = $new_filename;
|
||||
}
|
||||
@@ -92,31 +163,48 @@ sub block_size {
|
||||
}
|
||||
|
||||
sub sorted_devs {
|
||||
my ($self, $new_dev) = @_;
|
||||
if ( $new_dev && !first { $new_dev eq $_ } @{$self->{_sorted_devs}} ) {
|
||||
push @{$self->{_sorted_devs}}, $new_dev;
|
||||
my ( $self, $new_dev ) = @_;
|
||||
if ( $new_dev && ref($new_dev) eq ref( [] ) ) {
|
||||
$self->{_sorted_devs} = $new_dev;
|
||||
}
|
||||
return $self->{_sorted_devs};
|
||||
return @{ $self->{_sorted_devs} };
|
||||
}
|
||||
|
||||
sub add_sorted_devs {
|
||||
my ( $self, $new_dev ) = @_;
|
||||
if ( !$self->{_seen_devs}->{$new_dev}++ ) {
|
||||
push @{ $self->{_sorted_devs} }, $new_dev;
|
||||
}
|
||||
}
|
||||
|
||||
# clear_stuff methods. LIke the name says, they clear state stored inside
|
||||
# the object.
|
||||
|
||||
sub clear_state {
|
||||
my ($self) = @_;
|
||||
$self->{_first} = 1;
|
||||
$self->clear_current_stats();
|
||||
$self->clear_previous_stats();
|
||||
$self->clear_first_stats();
|
||||
$self->clear_ts();
|
||||
$self->clear_sorted_devs();
|
||||
}
|
||||
|
||||
sub clear_ts {
|
||||
my ($self) = @_;
|
||||
$self->{_ts} = {};
|
||||
}
|
||||
|
||||
sub clear_sorted_devs {
|
||||
my $self = shift;
|
||||
$self->{_sorted_devs} = [];
|
||||
$self->{_seen_devs} = {};
|
||||
$self->sorted_devs( [] );
|
||||
}
|
||||
|
||||
sub _clear_stats_common {
|
||||
my ($self, $key, @args) = @_;
|
||||
my ( $self, $key, @args ) = @_;
|
||||
if (@args) {
|
||||
for my $dev (@_) {
|
||||
for my $dev (@args) {
|
||||
$self->{$key}->{$dev} = {};
|
||||
}
|
||||
}
|
||||
@@ -126,103 +214,49 @@ sub _clear_stats_common {
|
||||
}
|
||||
|
||||
sub clear_current_stats {
|
||||
my ($self, @args) = @_;
|
||||
$self->_clear_stats_common("stats_for", @args);
|
||||
my ( $self, @args ) = @_;
|
||||
$self->_clear_stats_common( "_stats_for", @args );
|
||||
}
|
||||
|
||||
sub clear_previous_stats {
|
||||
my ($self, @args) = @_;
|
||||
$self->_clear_stats_common("previous_stats_for", @args);
|
||||
my ( $self, @args ) = @_;
|
||||
$self->_clear_stats_common( "_previous_stats_for", @args );
|
||||
}
|
||||
|
||||
sub clear_first_stats {
|
||||
my ($self, @args) = @_;
|
||||
$self->_clear_stats_common("first_stats_for", @args);
|
||||
my ( $self, @args ) = @_;
|
||||
$self->_clear_stats_common( "_first_stats_for", @args );
|
||||
}
|
||||
|
||||
sub _stats_for_common {
|
||||
my ($self, $dev, $key) = @_;
|
||||
my ( $self, $dev, $key ) = @_;
|
||||
$self->{$key} ||= {};
|
||||
if ($dev) {
|
||||
return $self->{$key}->{$dev};
|
||||
}
|
||||
return $self->{$key};
|
||||
return $self->{$key};
|
||||
}
|
||||
|
||||
sub stats_for {
|
||||
my ($self, $dev) = @_;
|
||||
$self->_stats_for_common($dev, 'stats_for');
|
||||
my ( $self, $dev ) = @_;
|
||||
$self->_stats_for_common( $dev, '_stats_for' );
|
||||
}
|
||||
|
||||
sub previous_stats_for {
|
||||
my ($self, $dev) = @_;
|
||||
$self->_stats_for_common($dev, 'previous_stats_for');
|
||||
my ( $self, $dev ) = @_;
|
||||
$self->_stats_for_common( $dev, '_previous_stats_for' );
|
||||
}
|
||||
|
||||
sub first_stats_for {
|
||||
my ($self, $dev) = @_;
|
||||
$self->_stats_for_common($dev, 'first_stats_for');
|
||||
my ( $self, $dev ) = @_;
|
||||
$self->_stats_for_common( $dev, '_first_stats_for' );
|
||||
}
|
||||
|
||||
sub has_stats {
|
||||
my ($self) = @_;
|
||||
# XXX TODO Greh. The stats_for hash has a bunch of stuff that shouldn't
|
||||
# be public. Implementation detail showing through, FIX.
|
||||
|
||||
return $self->stats_for
|
||||
&& scalar grep 1, @{ $self->stats_for }{ @{$self->sorted_devs} };
|
||||
}
|
||||
|
||||
my @columns_in_order = (
|
||||
# Colum # Format # Key name
|
||||
[ " rd_s" => "%7.1f", "reads_sec", ],
|
||||
[ "rd_avkb" => "%7.1f", "avg_read_sz", ],
|
||||
[ "rd_mb_s" => "%7.1f", "mbytes_read_sec", ],
|
||||
[ "rd_mrg" => "%5.0f%%", "read_merge_pct", ],
|
||||
[ "rd_cnc" => "%6.1f", "read_conc", ],
|
||||
[ " rd_rt" => "%7.1f", "read_rtime", ],
|
||||
[ " wr_s" => "%7.1f", "writes_sec", ],
|
||||
[ "wr_avkb" => "%7.1f", "avg_write_sz", ],
|
||||
[ "wr_mb_s" => "%7.1f", "mbytes_written_sec", ],
|
||||
[ "wr_mrg" => "%5.0f%%", "write_merge_pct", ],
|
||||
[ "wr_cnc" => "%6.1f", "write_conc", ],
|
||||
[ " wr_rt" => "%7.1f", "write_rtime", ],
|
||||
[ "busy" => "%3.0f%%", "busy", ],
|
||||
[ "in_prg" => "%6d", "in_progress", ],
|
||||
);
|
||||
|
||||
my %format_for = (
|
||||
map { ( $_->[0] => $_->[1] ) } @columns_in_order,
|
||||
);
|
||||
|
||||
{
|
||||
|
||||
my %column_to_key = (
|
||||
map { ( $_->[0] => $_->[2] ) } @columns_in_order,
|
||||
);
|
||||
|
||||
sub _column_to_key {
|
||||
my ($self, $col) = @_;
|
||||
return $column_to_key{$col};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub design_print_formats {
|
||||
my $self = shift;
|
||||
my ($dev_length, @columns) = @_;
|
||||
my ($header, $format);
|
||||
# For each device, print out the following: The timestamp offset and
|
||||
# device name.
|
||||
$header = $format = qq{%5s %-${dev_length}s };
|
||||
|
||||
if ( !@columns ) {
|
||||
@columns = grep { $self->col_ok($_) } map { $_->[0] } @columns_in_order;
|
||||
}
|
||||
|
||||
$header .= join " ", @columns;
|
||||
$format .= join " ", @format_for{@columns};
|
||||
|
||||
return ($header, $format, \@columns);
|
||||
&& scalar grep 1, @{ $self->stats_for }{ $self->sorted_devs };
|
||||
}
|
||||
|
||||
sub trim {
|
||||
@@ -233,27 +267,92 @@ sub trim {
|
||||
}
|
||||
|
||||
sub col_ok {
|
||||
my ($self, $column) = @_;
|
||||
my $regex = $self->column_regex;
|
||||
my ( $self, $column ) = @_;
|
||||
my $regex = $self->column_regex;
|
||||
return $column =~ $regex || trim($column) =~ $regex;
|
||||
}
|
||||
|
||||
sub dev_ok {
|
||||
my ($self, $device) = @_;
|
||||
my $regex = $self->device_regex;
|
||||
my ( $self, $device ) = @_;
|
||||
my $regex = $self->device_regex;
|
||||
return $device =~ $regex;
|
||||
}
|
||||
|
||||
sub parse_diskstats_line {
|
||||
my ($self, $line) = @_;
|
||||
my @keys = qw(
|
||||
reads reads_merged read_sectors ms_spent_reading
|
||||
writes writes_merged written_sectors ms_spent_writing
|
||||
ios_in_progress ms_spent_doing_io ms_weighted
|
||||
);
|
||||
my ($dev, %dev_stats);
|
||||
my @columns_in_order = (
|
||||
# Column # Format # Key name
|
||||
[ " rd_s" => "%7.1f", "reads_sec", ],
|
||||
[ "rd_avkb" => "%7.1f", "avg_read_sz", ],
|
||||
[ "rd_mb_s" => "%7.1f", "mbytes_read_sec", ],
|
||||
[ "rd_mrg" => "%5.0f%%", "read_merge_pct", ],
|
||||
[ "rd_cnc" => "%6.1f", "read_conc", ],
|
||||
[ " rd_rt" => "%7.1f", "read_rtime", ],
|
||||
[ " wr_s" => "%7.1f", "writes_sec", ],
|
||||
[ "wr_avkb" => "%7.1f", "avg_write_sz", ],
|
||||
[ "wr_mb_s" => "%7.1f", "mbytes_written_sec", ],
|
||||
[ "wr_mrg" => "%5.0f%%", "write_merge_pct", ],
|
||||
[ "wr_cnc" => "%6.1f", "write_conc", ],
|
||||
[ " wr_rt" => "%7.1f", "write_rtime", ],
|
||||
[ "busy" => "%3.0f%%", "busy", ],
|
||||
[ "in_prg" => "%6d", "in_progress", ],
|
||||
);
|
||||
|
||||
if ((@dev_stats{qw( major minor )}, $dev, @dev_stats{@keys}) = $line =~ /^
|
||||
{
|
||||
|
||||
my %format_for = ( map { ( $_->[0] => $_->[1] ) } @columns_in_order, );
|
||||
|
||||
sub _format_for {
|
||||
my ( $self, $col ) = @_;
|
||||
return $format_for{$col};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
my %column_to_key = ( map { ( $_->[0] => $_->[2] ) } @columns_in_order, );
|
||||
|
||||
sub _column_to_key {
|
||||
my ( $self, $col ) = @_;
|
||||
return $column_to_key{$col};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub design_print_formats {
|
||||
my ( $self, %args ) = @_;
|
||||
my ( $dev_length, $columns ) = @args{qw( max_device_length columns )};
|
||||
$dev_length ||= max 6, map length, $self->sorted_devs;
|
||||
my ( $header, $format );
|
||||
|
||||
# For each device, print out the following: The timestamp offset and
|
||||
# device name.
|
||||
$header = $format = qq{%5s %-${dev_length}s };
|
||||
|
||||
if ( !$columns ) {
|
||||
@$columns = grep { $self->col_ok($_) } map { $_->[0] } @columns_in_order;
|
||||
}
|
||||
elsif ( !ref($columns) || ref($columns) ne ref([]) ) {
|
||||
die "The columns argument to design_print_formats should be an arrayref";
|
||||
}
|
||||
|
||||
$header .= join " ", @$columns;
|
||||
$format .= join " ", map $self->_format_for($_), @$columns;
|
||||
|
||||
return ( $header, $format, $columns );
|
||||
}
|
||||
|
||||
sub parse_diskstats_line {
|
||||
my ( $self, $line, $block_size ) = @_;
|
||||
my @keys = qw(
|
||||
reads reads_merged read_sectors ms_spent_reading
|
||||
writes writes_merged written_sectors ms_spent_writing
|
||||
ios_in_progress ms_spent_doing_io ms_weighted
|
||||
);
|
||||
my ( $dev, %dev_stats );
|
||||
|
||||
if ( ( @dev_stats{qw( major minor )}, $dev, @dev_stats{@keys} ) =
|
||||
$line =~ /^
|
||||
# Disk format
|
||||
\s* (\d+) # major
|
||||
\s+ (\d+) # minor
|
||||
\s+ (.+?) # Device name
|
||||
@@ -268,284 +367,408 @@ sub parse_diskstats_line {
|
||||
\s+ (\d+) # # of IOs currently in progress
|
||||
\s+ (\d+) # # of milliseconds spent doing IOs
|
||||
\s+ (\d+) # weighted # of milliseconds spent doing IOs
|
||||
\s*$/x)
|
||||
{
|
||||
$dev_stats{read_bytes} = $dev_stats{read_sectors} * $self->block_size;
|
||||
$dev_stats{written_bytes} = $dev_stats{written_sectors} * $self->block_size;
|
||||
$dev_stats{read_kbs} = $dev_stats{read_bytes} / 1024;
|
||||
$dev_stats{written_kbs} = $dev_stats{written_bytes} / 1024;
|
||||
$dev_stats{ttreq} += $dev_stats{reads} + $dev_stats{writes};
|
||||
$dev_stats{ttbyt} += $dev_stats{read_bytes} + $dev_stats{written_bytes};
|
||||
\s*$/x
|
||||
)
|
||||
{
|
||||
$dev_stats{read_bytes} = $dev_stats{read_sectors} * $block_size;
|
||||
$dev_stats{written_bytes} =
|
||||
$dev_stats{written_sectors} * $block_size;
|
||||
$dev_stats{read_kbs} = $dev_stats{read_bytes} / 1024;
|
||||
$dev_stats{written_kbs} = $dev_stats{written_bytes} / 1024;
|
||||
$dev_stats{ttreq} += $dev_stats{reads} + $dev_stats{writes};
|
||||
$dev_stats{ttbyt} += $dev_stats{read_bytes} + $dev_stats{written_bytes};
|
||||
|
||||
return ($dev, \%dev_stats);
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
return ( $dev, \%dev_stats );
|
||||
}
|
||||
elsif ((@dev_stats{qw( major minor )}, $dev, @dev_stats{ qw( reads read_sectors writes written_sectors ) }) = $line =~ /^
|
||||
# Partition format
|
||||
\s* (\d+) # major
|
||||
\s+ (\d+) # minor
|
||||
\s+ (.+?) # Device name
|
||||
\s+ (\d+) # # of reads issued
|
||||
\s+ (\d+) # # of sectors read
|
||||
\s+ (\d+) # # of writes issued
|
||||
\s+ (\d+) # # of sectors written
|
||||
\s*$/x) {
|
||||
for my $key ( @keys ) {
|
||||
$dev_stats{$key} ||= 0;
|
||||
}
|
||||
# Copypaste from above, abstract?
|
||||
$dev_stats{read_bytes} = $dev_stats{read_sectors} * $block_size;
|
||||
$dev_stats{written_bytes} =
|
||||
$dev_stats{written_sectors} * $block_size;
|
||||
$dev_stats{read_kbs} = $dev_stats{read_bytes} / 1024;
|
||||
$dev_stats{written_kbs} = $dev_stats{written_bytes} / 1024;
|
||||
$dev_stats{ttreq} += $dev_stats{reads} + $dev_stats{writes};
|
||||
$dev_stats{ttbyt} += $dev_stats{read_bytes} + $dev_stats{written_bytes};
|
||||
|
||||
return ( $dev, \%dev_stats );
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sub _save_current_as_previous {
|
||||
my ($self, $dev) = @_;
|
||||
my ( $self, $curr_hashref ) = @_;
|
||||
|
||||
if ( $self->{_save_curr_as_prev} ) {
|
||||
if ( $dev ) {
|
||||
my $curr = $self->stats_for($dev);
|
||||
return unless $curr;
|
||||
while ( my ($k, $v) = each %$curr ) {
|
||||
$self->{previous_stats_for}->{$dev}{$k} = $v;
|
||||
}
|
||||
$self->previous_stats_for($dev)->{sum_ios_in_progress} += $curr->{ios_in_progress};
|
||||
$self->previous_stats_for->{_ts} = $self->stats_for->{_ts};
|
||||
$self->{_previous_stats_for} = $curr_hashref;
|
||||
for my $dev (keys %$curr_hashref) {
|
||||
$self->{_previous_stats_for}->{$dev}->{sum_ios_in_progress} +=
|
||||
$curr_hashref->{$dev}->{ios_in_progress};
|
||||
}
|
||||
else {
|
||||
for my $dev ( grep { $_ ne '_ts' } keys %{$self->stats_for} ) {
|
||||
$self->previous_stats_for->{$dev} = \%{$self->stats_for->{$dev}};
|
||||
}
|
||||
$self->previous_stats_for->{_ts} = $self->stats_for->{_ts};
|
||||
}
|
||||
}
|
||||
$self->previous_ts($self->current_ts());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub _save_current_as_first {
|
||||
my ($self) = @_;
|
||||
my ($self, $curr_hashref) = @_;
|
||||
|
||||
if ( $self->{_first} ) {
|
||||
for my $dev ( grep { $_ ne '_ts' } keys %{$self->stats_for} ) {
|
||||
$self->first_stats_for->{$dev} = \%{$self->stats_for->{$dev}};
|
||||
}
|
||||
$self->first_stats_for->{_ts} = $self->stats_for->{_ts};
|
||||
$self->{_first_stats_for} = $curr_hashref;
|
||||
$self->first_ts($self->current_ts());
|
||||
$self->{_first} = undef;
|
||||
}
|
||||
}
|
||||
|
||||
sub parse_from {
|
||||
my ($self, %args) = @_;
|
||||
sub _save_stats {
|
||||
my ( $self, $hashref ) = @_;
|
||||
$self->{_stats_for} = $hashref;
|
||||
}
|
||||
|
||||
if ($args{filehandle}) {
|
||||
$self->parse_from_filehandle(@args{ qw( filehandle ts_callback ) });
|
||||
}
|
||||
elsif ($args{data}) {
|
||||
open my $fh, "<", \$args{data}
|
||||
or die "Couldn't open scalar as filehandle: $OS_ERROR";
|
||||
$self->parse_from_filehandle($fh, $args{ts_callback});
|
||||
close($fh);
|
||||
}
|
||||
else {
|
||||
$self->parse_from_filename(@args{ qw( filename ts_callback ) });
|
||||
}
|
||||
return;
|
||||
# Method: parse_from()
|
||||
# Parses data from one of the sources.
|
||||
#
|
||||
# Parameters:
|
||||
# %args - Arguments
|
||||
#
|
||||
# Optional Arguments:
|
||||
# filehandle - Reads data from a filehandle by calling readline() on it.
|
||||
# data - Reads data one line at a time.
|
||||
# filename - Opens a filehandle to the file and reads it one line at a time.
|
||||
# sample_callback - Called each time a sample is processed, passed the latest timestamp.
|
||||
#
|
||||
|
||||
sub parse_from {
|
||||
my ( $self, %args ) = @_;
|
||||
|
||||
my $lines_read = $args{filehandle}
|
||||
? $self->parse_from_filehandle( @args{qw( filehandle sample_callback )} ) :
|
||||
$args{data}
|
||||
? $self->parse_from_data( @args{qw( data sample_callback )} ) :
|
||||
$self->parse_from_filename( @args{qw( filename sample_callback )} );
|
||||
return $lines_read;
|
||||
}
|
||||
|
||||
sub parse_from_filename {
|
||||
my ($self, $filename, $ts_callback) = @_;
|
||||
my ( $self, $filename, $sample_callback ) = @_;
|
||||
|
||||
$filename ||= $self->filename;
|
||||
|
||||
open my $fh, "<", $filename
|
||||
or die "Couldn't open ", $filename, ": $OS_ERROR";
|
||||
|
||||
$self->parse_from_filehandle($fh, $ts_callback);
|
||||
|
||||
or die "Couldn't open ", $filename, ": $OS_ERROR";
|
||||
my $lines_read = $self->parse_from_filehandle( $fh, $sample_callback );
|
||||
close($fh) or die "Couldn't close: $OS_ERROR";
|
||||
return;
|
||||
|
||||
return $lines_read;
|
||||
}
|
||||
# Method: parse_from_filehandle()
|
||||
# Parses data received from using readline() on the filehandle. This is
|
||||
# particularly useful, as you could pass in a filehandle to a pipe, or
|
||||
# a tied filehandle, or a PerlIO::Scalar handle. Or your normal
|
||||
# run of the mill filehandle.
|
||||
#
|
||||
# Parameters:
|
||||
# $filehandle -
|
||||
# sample_callback - Called each time a sample is processed, passed the latest timestamp.
|
||||
#
|
||||
|
||||
sub parse_from_filehandle {
|
||||
my ($self, $filehandle, $ts_callback) = @_;
|
||||
$self->_load($filehandle, $ts_callback);
|
||||
return;
|
||||
my ( $self, $filehandle, $sample_callback ) = @_;
|
||||
return $self->_load( $filehandle, $sample_callback );;
|
||||
}
|
||||
|
||||
# Reads from the filehandle, either saving the data as needed if dealing
|
||||
# with a diskstats-formatted line, or if it finds a TS line and has a
|
||||
# callback, defering to that.
|
||||
sub parse_from_data {
|
||||
my ( $self, $data, $sample_callback ) = @_;
|
||||
|
||||
open my $fh, "<", \$data
|
||||
or die "Couldn't open scalar as filehandle: $OS_ERROR";
|
||||
my $lines_read = $self->parse_from_filehandle( $fh, $sample_callback );
|
||||
close($fh);
|
||||
|
||||
return $lines_read;
|
||||
}
|
||||
|
||||
# Method: parse_from()
|
||||
# Reads from the filehandle, either saving the data as needed if dealing
|
||||
# with a diskstats-formatted line, or if it finds a TS line and has a
|
||||
# callback, defering to that.
|
||||
|
||||
sub _load {
|
||||
my ($self, $fh, $ts_callback) = @_;
|
||||
my ( $self, $fh, $sample_callback ) = @_;
|
||||
my $lines_read = 0;
|
||||
my $block_size = $self->block_size;
|
||||
|
||||
while (my $line = <$fh>) {
|
||||
if ( my ($dev, $dev_stats) = $self->parse_diskstats_line($line) ) {
|
||||
$self->_save_current_as_previous($dev);
|
||||
$self->clear_current_stats($dev);
|
||||
my $new_cur = {};
|
||||
|
||||
@{$self->stats_for($dev)}{ keys %$dev_stats } = values %$dev_stats;
|
||||
$self->sorted_devs($dev);
|
||||
while ( my $line = <$fh> ) {
|
||||
if ( my ( $dev, $dev_stats ) = $self->parse_diskstats_line($line, $block_size) ) {
|
||||
$new_cur->{$dev} = $dev_stats;
|
||||
$self->add_sorted_devs($dev);
|
||||
}
|
||||
elsif ( my ($ts) = $line =~ /TS\s+([0-9]+(?:\.[0-9]+)?)/ ) {
|
||||
if ( $self->has_stats() ) {
|
||||
$self->stats_for->{_ts} = $ts;
|
||||
$self->_save_current_as_first;
|
||||
if ( %{$new_cur} ) {
|
||||
$self->_save_current_as_previous( $self->stats_for() );
|
||||
$self->_save_stats($new_cur);
|
||||
$self->current_ts($ts);
|
||||
$self->_save_current_as_first( dclone($self->stats_for) );
|
||||
$new_cur = {};
|
||||
}
|
||||
if ( $ts_callback ) {
|
||||
$self->$ts_callback($ts);
|
||||
# XXX TODO Ugly hack for interactive mode
|
||||
my $ret = 0;
|
||||
if ($sample_callback) {
|
||||
$ret = $self->$sample_callback($ts);
|
||||
}
|
||||
$lines_read = $NR;
|
||||
last if $ret;
|
||||
}
|
||||
else {
|
||||
chomp($line);
|
||||
die "Line [$line] isn't in the diskstats format";
|
||||
}
|
||||
}
|
||||
$self->_save_current_as_first;
|
||||
return;
|
||||
|
||||
if ( %{$new_cur} ) {
|
||||
#$self->_save_stats($new_cur);
|
||||
$self->_save_current_as_first( dclone($self->stats_for) );
|
||||
}
|
||||
return $lines_read;
|
||||
}
|
||||
|
||||
sub _calc_read_stats {
|
||||
my $self = shift;
|
||||
my ($delta_for, $elapsed, $devs_in_group) = @_;
|
||||
my ( $self, $delta_for, $elapsed, $devs_in_group ) = @_;
|
||||
|
||||
my %read_stats = (
|
||||
reads_sec => $delta_for->{reads} / $elapsed,
|
||||
read_requests => $delta_for->{reads_merged} + $delta_for->{reads},
|
||||
# mbytes_read_sec => $delta_for->{read_kbs} / $elapsed / 2048,
|
||||
mbytes_read_sec => $delta_for->{read_sectors} / $elapsed / 2048,
|
||||
read_conc => $delta_for->{ms_spent_reading} / $elapsed / 1000 / $devs_in_group,
|
||||
mbytes_read_sec => $delta_for->{read_kbs} / $elapsed / 1024,
|
||||
read_conc => $delta_for->{ms_spent_reading} /
|
||||
$elapsed / 1000 / $devs_in_group,
|
||||
);
|
||||
|
||||
if ( $delta_for->{reads} > 0 ) {
|
||||
$read_stats{read_rtime} = $delta_for->{ms_spent_reading} / $delta_for->{reads};
|
||||
$read_stats{avg_read_sz} = $delta_for->{read_sectors} / $delta_for->{reads};
|
||||
$read_stats{read_rtime} =
|
||||
$delta_for->{ms_spent_reading} / $delta_for->{reads};
|
||||
$read_stats{avg_read_sz} =
|
||||
$delta_for->{read_kbs} / $delta_for->{reads};
|
||||
}
|
||||
else {
|
||||
$read_stats{read_rtime} = 0;
|
||||
$read_stats{avg_read_sz} = 0;
|
||||
$read_stats{read_rtime} = 0;
|
||||
$read_stats{avg_read_sz} = 0;
|
||||
}
|
||||
|
||||
$read_stats{read_merge_pct} = $read_stats{read_requests} > 0
|
||||
? 100 * $delta_for->{reads_merged} / $read_stats{read_requests}
|
||||
: 0;
|
||||
$read_stats{read_merge_pct} =
|
||||
$read_stats{read_requests} > 0
|
||||
? 100 * $delta_for->{reads_merged} / $read_stats{read_requests}
|
||||
: 0;
|
||||
|
||||
return %read_stats;
|
||||
}
|
||||
|
||||
sub _calc_write_stats {
|
||||
my $self = shift;
|
||||
my ($delta_for, $elapsed, $devs_in_group) = @_;
|
||||
my ( $self, $delta_for, $elapsed, $devs_in_group ) = @_;
|
||||
|
||||
my %write_stats = (
|
||||
writes_sec => $delta_for->{writes} / $elapsed,
|
||||
write_requests => $delta_for->{writes_merged} + $delta_for->{writes},
|
||||
# mbytes_written_sec => $delta_for->{written_kbs} / $elapsed / 2048,
|
||||
mbytes_written_sec => $delta_for->{written_sectors} / $elapsed / 2048,
|
||||
write_conc => $delta_for->{ms_spent_writing} / $elapsed / 1000 / $devs_in_group,
|
||||
writes_sec => $delta_for->{writes} / $elapsed,
|
||||
write_requests => $delta_for->{writes_merged} + $delta_for->{writes},
|
||||
|
||||
mbytes_written_sec => $delta_for->{written_kbs} / $elapsed / 1024,
|
||||
write_conc => $delta_for->{ms_spent_writing} /
|
||||
$elapsed / 1000 /
|
||||
$devs_in_group,
|
||||
);
|
||||
|
||||
if ( $delta_for->{writes} > 0 ) {
|
||||
$write_stats{write_rtime} = $delta_for->{ms_spent_writing} / $delta_for->{writes};
|
||||
$write_stats{avg_write_sz} = $delta_for->{written_sectors} / $delta_for->{writes};
|
||||
$write_stats{write_rtime} =
|
||||
$delta_for->{ms_spent_writing} / $delta_for->{writes};
|
||||
$write_stats{avg_write_sz} =
|
||||
$delta_for->{written_kbs} / $delta_for->{writes};
|
||||
}
|
||||
else {
|
||||
$write_stats{write_rtime} = 0;
|
||||
$write_stats{avg_write_sz} = 0;
|
||||
}
|
||||
|
||||
$write_stats{write_merge_pct} = $write_stats{write_requests} > 0 ? 100 * $delta_for->{writes_merged} / $write_stats{write_requests} : 0;
|
||||
$write_stats{write_merge_pct} =
|
||||
$write_stats{write_requests} > 0
|
||||
? 100 * $delta_for->{writes_merged} / $write_stats{write_requests}
|
||||
: 0;
|
||||
|
||||
return %write_stats;
|
||||
}
|
||||
|
||||
sub _calc_delta_for {
|
||||
my ($self, $current, $against) = @_;
|
||||
return {
|
||||
map { ($_ => $current->{$_} - $against->{$_}) }
|
||||
qw(
|
||||
reads reads_merged read_sectors ms_spent_reading
|
||||
writes writes_merged written_sectors ms_spent_writing
|
||||
read_kbs written_kbs
|
||||
ms_spent_doing_io ms_weighted
|
||||
)
|
||||
};
|
||||
|
||||
# Compute the numbers for reads and writes together, the things for
|
||||
# which we do not have separate statistics.
|
||||
# Busy is what iostat calls %util. This is the percent of
|
||||
# wall-clock time during which the device has I/O happening.
|
||||
|
||||
sub _calc_misc_stats {
|
||||
my ( $self, $delta_for, $elapsed, $devs_in_group, $stats ) = @_;
|
||||
my %extra_stats;
|
||||
|
||||
$extra_stats{busy} =
|
||||
100 *
|
||||
$delta_for->{ms_spent_doing_io} /
|
||||
( 1000 * $elapsed * $devs_in_group );
|
||||
|
||||
my $number_of_ios = $stats->{write_requests} + $stats->{read_requests};
|
||||
my $total_ms_spent_on_io = $delta_for->{ms_spent_reading} + $delta_for->{ms_spent_writing};
|
||||
|
||||
$extra_stats{qtime} = $number_of_ios ? $total_ms_spent_on_io / $number_of_ios : 0;
|
||||
$extra_stats{stime} = $number_of_ios ? $delta_for->{ms_spent_doing_io} / $number_of_ios : 0;
|
||||
|
||||
$extra_stats{line_ts} = $self->compute_line_ts(
|
||||
first_ts => $self->first_ts(),
|
||||
current_ts => $self->current_ts(),
|
||||
);
|
||||
|
||||
return %extra_stats;
|
||||
}
|
||||
|
||||
sub _calc_deltas {
|
||||
my $self = shift;
|
||||
my ($callback) = @_;
|
||||
sub _calc_delta_for {
|
||||
my ( $self, $current, $against ) = @_;
|
||||
return {
|
||||
map { ( $_ => $current->{$_} - $against->{$_} ) }
|
||||
qw(
|
||||
reads reads_merged read_sectors ms_spent_reading
|
||||
writes writes_merged written_sectors ms_spent_writing
|
||||
read_kbs written_kbs
|
||||
ms_spent_doing_io ms_weighted
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
my $elapsed = $self->stats_for->{_ts} - $self->delta_against->{_ts};
|
||||
die "Time elapsed is 0" unless $elapsed;
|
||||
sub _calc_stats_for_deltas {
|
||||
my ( $self, $elapsed ) = @_;
|
||||
my @end_stats;
|
||||
|
||||
for my $dev ( grep { $self->dev_ok($_) } @{$self->sorted_devs} ) {
|
||||
for my $dev ( grep { $self->dev_ok($_) && $self->stats_for($_) } $self->sorted_devs ) {
|
||||
my $curr = $self->stats_for($dev);
|
||||
my $against = $self->delta_against($dev);
|
||||
|
||||
my $delta_for = $self->_calc_delta_for($curr, $against);
|
||||
my $delta_for = $self->_calc_delta_for( $curr, $against );
|
||||
|
||||
my $in_progress = $curr->{"ios_in_progress"};
|
||||
my $tot_in_progress = $against->{"sum_ios_in_progress"} || 0;
|
||||
my $in_progress = $curr->{"ios_in_progress"};
|
||||
my $tot_in_progress = $against->{"sum_ios_in_progress"} || 0;
|
||||
|
||||
my $devs_in_group = $self->compute_devs_in_group;
|
||||
my $devs_in_group = $self->compute_devs_in_group;
|
||||
|
||||
# Compute the per-second stats for reads, writes, and overall.
|
||||
my %stats = (
|
||||
$self->_calc_read_stats($delta_for, $elapsed, $devs_in_group),
|
||||
$self->_calc_write_stats($delta_for, $elapsed, $devs_in_group),
|
||||
in_progress => $self->compute_in_progress($in_progress, $tot_in_progress),
|
||||
$self->_calc_read_stats( $delta_for, $elapsed, $devs_in_group ),
|
||||
$self->_calc_write_stats( $delta_for, $elapsed, $devs_in_group ),
|
||||
in_progress =>
|
||||
$self->compute_in_progress( $in_progress, $tot_in_progress ),
|
||||
);
|
||||
|
||||
# Compute the numbers for reads and writes together, the things for
|
||||
# which we do not have separate statistics.
|
||||
# Busy is what iostat calls %util. This is the percent of
|
||||
# wall-clock time during which the device has I/O happening.
|
||||
$stats{busy} = 100 * $delta_for->{ms_spent_doing_io} / (1000 * $elapsed * $devs_in_group);
|
||||
$stats{line_ts} = $self->compute_line_ts(
|
||||
first_ts => $self->first_stats_for->{_ts},
|
||||
current_ts => $self->stats_for->{_ts},
|
||||
);
|
||||
|
||||
my %extras = $self->_calc_misc_stats( $delta_for, $elapsed, $devs_in_group, \%stats );
|
||||
while ( my ($k, $v) = each %extras ) {
|
||||
$stats{$k} = $v;
|
||||
}
|
||||
|
||||
$stats{dev} = $dev;
|
||||
|
||||
if ($callback) {
|
||||
$self->$callback( \%stats );
|
||||
}
|
||||
push @end_stats, \%stats;
|
||||
}
|
||||
return @end_stats;
|
||||
}
|
||||
|
||||
sub _calc_deltas {
|
||||
my ( $self, $callback ) = @_;
|
||||
|
||||
my $elapsed = $self->current_ts() - $self->delta_against_ts();
|
||||
die "Time elapsed is [$elapsed]" unless $elapsed;
|
||||
|
||||
return $self->_calc_stats_for_deltas($elapsed);
|
||||
}
|
||||
|
||||
sub print_header {
|
||||
my ($self, $header, @args) = @_;
|
||||
printf { $self->out_fh } $header . "\n", @args;
|
||||
}
|
||||
|
||||
sub print_rest {
|
||||
my ($self, $format, $cols, $stat) = @_;
|
||||
if ( $self->filter_zeroed_rows ) {
|
||||
return unless grep $_, @{$stat}{ @$cols };
|
||||
}
|
||||
printf { $self->out_fh } $format . "\n",
|
||||
@{$stat}{ qw( line_ts dev ), @$cols };
|
||||
}
|
||||
|
||||
sub print_deltas {
|
||||
my ($self, %args) = @_;
|
||||
my $longest_dev = $args{dev_length} || max 6, map length, @{$self->sorted_devs};
|
||||
my ($header, $format, $cols) = $self->design_print_formats($longest_dev);
|
||||
my ( $self, %args ) = @_;
|
||||
my ( $header, $format, $cols ) = $self->design_print_formats(
|
||||
max_device_length => $args{max_device_length},
|
||||
columns => $args{columns},
|
||||
);
|
||||
|
||||
return unless $self->delta_against_ts();
|
||||
|
||||
@$cols = map { $self->_column_to_key($_) } @$cols;
|
||||
my ( $header_cb, $rest_cb ) = @args{qw( header_cb rest_cb )};
|
||||
|
||||
my ($header_cb, $rest_cb) = @args{ qw( header_cb rest_cb ) };
|
||||
|
||||
return unless $self->delta_against->{_ts};
|
||||
|
||||
if ($header_cb) {
|
||||
$self->$header_cb($header, "#ts", "device");
|
||||
if ( $header_cb ) {
|
||||
$self->$header_cb( $header, "#ts", "device" );
|
||||
}
|
||||
else {
|
||||
printf { $self->out_fh } $header."\n", "#ts", "device";
|
||||
$self->print_header( $header, "#ts", "device" );
|
||||
}
|
||||
|
||||
if ($rest_cb) {
|
||||
$self->_calc_deltas( sub { shift->$rest_cb($format, $cols, shift) } );
|
||||
}
|
||||
else {
|
||||
for my $stat ( $self->_calc_deltas() ) {
|
||||
printf { $self->out_fh } $format."\n", @{$stat}{ qw( line_ts dev ), @$cols };
|
||||
for my $stat ( $self->_calc_deltas() ) {
|
||||
if ($rest_cb) {
|
||||
$self->$rest_cb( $format, $cols, $stat );
|
||||
}
|
||||
else {
|
||||
$self->print_rest( $format, $cols, $stat );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub compute_line_ts {
|
||||
... # $self->first_stats_for->{"ts"} > 0 ? sprintf("%5.1f", $curr->{ts} - $self->first_stats_for->{ts}) : sprintf("%5.1f", 0);
|
||||
my ( $self, %args ) = @_;
|
||||
return $args{first_ts} > 0
|
||||
? sprintf( "%5.1f", $args{current_ts} - $args{first_ts} )
|
||||
: sprintf( "%5.1f", 0 );
|
||||
}
|
||||
|
||||
sub compute_in_progress {
|
||||
...
|
||||
my ( $self, $in_progress, $tot_in_progress ) = @_;
|
||||
return $in_progress;
|
||||
}
|
||||
|
||||
sub compute_devs_in_group {
|
||||
1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub delta_against {
|
||||
... # previous_stats_for or first_stats_for
|
||||
die 'You must override delta_against() in a subclass';
|
||||
}
|
||||
|
||||
sub delta_against_ts {
|
||||
die 'You must override delta_against_ts() in a subclass';
|
||||
}
|
||||
|
||||
sub group_by {
|
||||
die 'You must override group_by() in a subclass';
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
}
|
||||
# ###########################################################################
|
||||
# End Diskstats package
|
||||
|
@@ -30,25 +30,44 @@ use constant MKDEBUG => $ENV{MKDEBUG} || 0;
|
||||
|
||||
use base qw( Diskstats );
|
||||
|
||||
sub group_by_all {
|
||||
my ($self, %args) = @_;
|
||||
$self->clear_state();
|
||||
$self->parse_from(
|
||||
ts_callback => sub {
|
||||
$self->print_deltas(
|
||||
map { ( $_ => $args{$_} ) } qw( header_cb rest_cb ),
|
||||
);
|
||||
},
|
||||
map( { ($_ => $args{$_}) } qw(filehandle filename data) ),
|
||||
);
|
||||
$self->clear_state();
|
||||
sub group_by {
|
||||
my $self = shift;
|
||||
$self->group_by_all(@_);
|
||||
}
|
||||
|
||||
sub compute_line_ts {
|
||||
sub group_by_all {
|
||||
my ($self, %args) = @_;
|
||||
return $args{first_ts} > 0
|
||||
? sprintf("%5.1f", $args{current_ts} - $args{first_ts})
|
||||
: sprintf("%5.1f", 0);
|
||||
|
||||
$self->clear_state();
|
||||
|
||||
if (!$self->interactive) {
|
||||
$self->parse_from(
|
||||
sample_callback => sub {
|
||||
$self->print_deltas(
|
||||
map { ( $_ => $args{$_} ) } qw( header_cb rest_cb ),
|
||||
);
|
||||
},
|
||||
map( { ($_ => $args{$_}) } qw(filehandle filename data) ),
|
||||
);
|
||||
|
||||
$self->clear_state();
|
||||
}
|
||||
else {
|
||||
my $orig = tell $args{filehandle};
|
||||
$self->parse_from(
|
||||
sample_callback => sub {
|
||||
$self->print_deltas(
|
||||
header_cb => sub { CORE::state $x = 0; my $self = shift; $self->print_header(@_) unless $x++; },
|
||||
);
|
||||
#map { ( $_ => $args{$_} ) } qw( header_cb rest_cb ),
|
||||
},
|
||||
map( { ($_ => $args{$_}) } qw(filehandle filename data) ),
|
||||
);
|
||||
if (!$self->previous_ts) {
|
||||
seek $args{filehandle}, $orig, 0;
|
||||
}
|
||||
$self->clear_state();
|
||||
}
|
||||
}
|
||||
|
||||
sub delta_against {
|
||||
@@ -56,9 +75,9 @@ sub delta_against {
|
||||
return $self->previous_stats_for($dev);
|
||||
}
|
||||
|
||||
sub compute_in_progress {
|
||||
my ($self, $in_progress, $tot_in_progress) = @_;
|
||||
return $in_progress;
|
||||
sub delta_against_ts {
|
||||
my ($self) = @_;
|
||||
return $self->previous_ts();
|
||||
}
|
||||
|
||||
1;
|
||||
|
@@ -33,44 +33,89 @@ use base qw( Diskstats );
|
||||
sub new {
|
||||
my ($class, %args) = @_;
|
||||
my $self = $class->SUPER::new(%args);
|
||||
$self->{iterations} = 0;
|
||||
$self->{_iterations} = 0;
|
||||
$self->{_print_header} = 1;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub group_by {
|
||||
my $self = shift;
|
||||
$self->group_by_disk(@_);
|
||||
}
|
||||
|
||||
# Prints out one line for each disk, summing over the interval from first to
|
||||
# last sample.
|
||||
sub group_by_disk {
|
||||
my ($self, %args) = @_;
|
||||
my ($header_cb, $rest_cb) = $args{ qw( header_cb rest_cb ) };
|
||||
|
||||
$self->clear_state;
|
||||
if (!$self->interactive()) {
|
||||
$self->clear_state();
|
||||
}
|
||||
|
||||
my $original_offset = $args{filehandle} ? tell($args{filehandle}) : undef;
|
||||
|
||||
my $lines_read = $self->parse_from(
|
||||
sample_callback => sub {
|
||||
my ($self, $ts) = @_;
|
||||
|
||||
$self->parse_from(
|
||||
ts_callback => sub {
|
||||
if ( $self->has_stats ) {
|
||||
$self->{iterations}++
|
||||
$self->{_iterations}++;
|
||||
if ($self->interactive() && $self->{_iterations} >= 2) {
|
||||
my $elapsed =
|
||||
( $self->current_ts() || 0 ) -
|
||||
( $self->first_ts() || 0 );
|
||||
if ( $ts > 0 && $elapsed >= $self->{interval} ) {
|
||||
$self->print_deltas(
|
||||
header_cb => sub {
|
||||
my ($self, @args) = @_;
|
||||
|
||||
if ( $self->{_print_header} ) {
|
||||
my $meth = $args{header_cb} || "print_header";
|
||||
$self->$meth(@args);
|
||||
}
|
||||
$self->{_print_header} = undef;
|
||||
},
|
||||
rest_cb => $args{rest_cb},
|
||||
);
|
||||
|
||||
$self->{_iterations} = -1;
|
||||
return "Stop interactive reading";
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
map({ ($_ => $args{$_}) } qw(filehandle filename data)),
|
||||
);
|
||||
|
||||
if ( $self->{iterations} < 2 ) {
|
||||
if ($self->interactive) {
|
||||
if ($self->{_iterations} == -1 && defined($original_offset) && eof($args{filehandle})) {
|
||||
$self->clear_state;
|
||||
seek $args{filehandle}, $original_offset, 0;
|
||||
}
|
||||
return $lines_read;
|
||||
}
|
||||
|
||||
if ( $self->{_iterations} < 2 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$self->print_deltas( map( { ( $_ => $args{$_} ) } qw( header_cb rest_cb ) ) );
|
||||
|
||||
$self->clear_state;
|
||||
|
||||
return $lines_read;
|
||||
}
|
||||
|
||||
sub clear_state {
|
||||
my ($self, @args) = @_;
|
||||
$self->{iterations} = 0;
|
||||
my ($self, @args) = @_;
|
||||
$self->{_iterations} = 0;
|
||||
$self->SUPER::clear_state(@args);
|
||||
}
|
||||
|
||||
sub compute_line_ts {
|
||||
my ($self, %args) = @_;
|
||||
return "{" . ($self->{iterations} - 1) . "}";
|
||||
return "{" . ($self->{_iterations} - 1) . "}";
|
||||
}
|
||||
|
||||
sub delta_against {
|
||||
@@ -78,9 +123,14 @@ sub delta_against {
|
||||
return $self->first_stats_for($dev);
|
||||
}
|
||||
|
||||
sub delta_against_ts {
|
||||
my ($self) = @_;
|
||||
return $self->first_ts();
|
||||
}
|
||||
|
||||
sub compute_in_progress {
|
||||
my ($self, $in_progress, $tot_in_progress) = @_;
|
||||
return $tot_in_progress / ($self->{iterations} - 1);
|
||||
return $tot_in_progress / ($self->{_iterations} - 1);
|
||||
}
|
||||
|
||||
1;
|
||||
|
@@ -19,7 +19,7 @@
|
||||
# ###########################################################################
|
||||
{
|
||||
# Package: DiskstatsGroupBySample
|
||||
#
|
||||
#
|
||||
|
||||
package DiskstatsGroupBySample;
|
||||
|
||||
@@ -31,157 +31,155 @@ use constant MKDEBUG => $ENV{MKDEBUG} || 0;
|
||||
use base qw( Diskstats );
|
||||
|
||||
sub new {
|
||||
my ($class, %args) = @_;
|
||||
my ( $class, %args ) = @_;
|
||||
my $self = $class->SUPER::new(%args);
|
||||
$self->{_iterations} = 0;
|
||||
$self->{_interval} = 0;
|
||||
$self->{_save_curr_as_prev} = 0;
|
||||
$self->{_print_header} = 1;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub group_by {
|
||||
my $self = shift;
|
||||
$self->group_by_sample(@_);
|
||||
}
|
||||
|
||||
# Prints out one line for each disk, summing over the interval from first to
|
||||
# last sample.
|
||||
sub group_by_sample {
|
||||
my ($self, %args) = @_;
|
||||
my ($header_cb, $rest_cb) = $args{ qw( header_cb rest_cb ) };
|
||||
my ( $self, %args ) = @_;
|
||||
my ( $header_cb, $rest_cb ) = $args{qw( header_cb rest_cb )};
|
||||
|
||||
$self->clear_state;
|
||||
|
||||
my $print_header = 1;
|
||||
my $printed_a_line = 0;
|
||||
$self->parse_from(
|
||||
ts_callback => sub {
|
||||
my ($self, $ts) = @_;
|
||||
my $printed_a_line = 0;
|
||||
|
||||
if ( $self->has_stats ) {
|
||||
$self->{_iterations}++;
|
||||
}
|
||||
my $elapsed = ($self->stats_for->{_ts} || 0) - ($self->previous_stats_for->{_ts} || 0);
|
||||
if ( $ts > 0 && $elapsed >= $self->{_interval} ) {
|
||||
|
||||
$self->print_deltas(
|
||||
dev_length => 6,
|
||||
header_cb => sub {
|
||||
my ($self, $header, @args) = @_;
|
||||
if ( $print_header ) {
|
||||
$print_header = 0;
|
||||
if ( my $cb = $args{header_cb} ) {
|
||||
$self->$cb($header, @args);
|
||||
}
|
||||
else {
|
||||
printf { $self->out_fh } $header."\n", @args;
|
||||
}
|
||||
}
|
||||
},
|
||||
rest_cb => sub {
|
||||
my ($self, $format, $cols, $stat) = @_;
|
||||
printf { $self->out_fh } $format."\n", @{$stat}{ qw( line_ts dev ), @$cols };
|
||||
$printed_a_line = 1;
|
||||
}
|
||||
);
|
||||
}
|
||||
if ( $self->{_iterations} == 1 || $printed_a_line == 1 ) {
|
||||
local $self->{_save_curr_as_prev} = 1;
|
||||
$self->_save_current_as_previous();
|
||||
}
|
||||
},
|
||||
map({ ($_ => $args{$_}) } qw(filehandle filename data)),
|
||||
sample_callback =>
|
||||
sub { my ( $self, $ts ) = @_; $self->_sample_callback( $ts, %args ) },
|
||||
map( { ( $_ => $args{$_} ) } qw(filehandle filename data) ),
|
||||
);
|
||||
|
||||
$self->clear_state;
|
||||
}
|
||||
|
||||
sub _sample_callback {
|
||||
my ( $self, $ts, %args ) = @_;
|
||||
my $printed_a_line = 0;
|
||||
|
||||
if ( $self->has_stats ) {
|
||||
$self->{_iterations}++;
|
||||
}
|
||||
|
||||
my $elapsed =
|
||||
( $self->current_ts() || 0 ) -
|
||||
( $self->previous_ts() || 0 );
|
||||
|
||||
if ( $ts > 0 && $elapsed >= $self->{interval} ) {
|
||||
|
||||
$self->print_deltas(
|
||||
max_device_length => 6,
|
||||
header_cb => sub {
|
||||
my ( $self, $header, @args ) = @_;
|
||||
if ( $self->{_print_header} ) {
|
||||
$self->{_print_header} = 0;
|
||||
if ( my $cb = $args{header_cb} ) {
|
||||
$self->$cb( $header, @args );
|
||||
}
|
||||
else {
|
||||
printf { $self->out_fh } $header . "\n", @args;
|
||||
}
|
||||
}
|
||||
},
|
||||
rest_cb => sub {
|
||||
my ( $self, $format, $cols, $stat ) = @_;
|
||||
if ( my $callback = $args{rest_cb} ) {
|
||||
$self->$callback( $format, $cols, $stat );
|
||||
}
|
||||
else {
|
||||
printf { $self->out_fh } $format . "\n",
|
||||
@{$stat}{ qw( line_ts dev ), @$cols };
|
||||
}
|
||||
$printed_a_line = 1;
|
||||
}
|
||||
);
|
||||
}
|
||||
if ( $self->{_iterations} == 1 || $printed_a_line == 1 ) {
|
||||
$self->{_save_curr_as_prev} = 1;
|
||||
$self->_save_current_as_previous( $self->stats_for() );
|
||||
$self->{_save_curr_as_prev} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
sub delta_against {
|
||||
my ($self, $dev) = @_;
|
||||
my ( $self, $dev ) = @_;
|
||||
return $self->previous_stats_for($dev);
|
||||
}
|
||||
|
||||
sub clear_state {
|
||||
my ($self, @args) = @_;
|
||||
$self->{_iterations} = 0;
|
||||
$self->{_save_curr_as_prev} = 0;
|
||||
$self->SUPER::clear_state(@args);
|
||||
sub delta_against_ts {
|
||||
my ( $self ) = @_;
|
||||
return $self->previous_ts();
|
||||
}
|
||||
|
||||
sub compute_line_ts {
|
||||
my ($self, %args) = @_;
|
||||
return $args{first_ts} > 0
|
||||
? sprintf("%5.1f", $args{current_ts} - $args{first_ts})
|
||||
: sprintf("%5.1f", 0);;
|
||||
sub clear_state {
|
||||
my ( $self, @args ) = @_;
|
||||
$self->{_iterations} = 0;
|
||||
$self->{_save_curr_as_prev} = 0;
|
||||
$self->{_print_header} = 1;
|
||||
$self->SUPER::clear_state(@args);
|
||||
}
|
||||
|
||||
sub compute_devs_in_group {
|
||||
my ($self) = @_;
|
||||
return scalar grep 1, @{ $self->stats_for }{ @{$self->sorted_devs} };
|
||||
}
|
||||
|
||||
sub compute_in_progress {
|
||||
my ($self, $in_progress, $tot_in_progress) = @_;
|
||||
return $in_progress;
|
||||
return scalar grep 1, @{ $self->stats_for }{ $self->sorted_devs };
|
||||
}
|
||||
|
||||
sub compute_dev {
|
||||
my ($self, $dev) = @_;
|
||||
my ( $self, $dev ) = @_;
|
||||
return $self->compute_devs_in_group() > 1
|
||||
? "{" . $self->compute_devs_in_group() . "}"
|
||||
: $self->sorted_devs->[0];
|
||||
? "{" . $self->compute_devs_in_group() . "}"
|
||||
: ( $self->sorted_devs )[0];
|
||||
}
|
||||
|
||||
# Terrible breach of encapsulation, but it'll have to do for the moment.
|
||||
sub _calc_deltas {
|
||||
my $self = shift;
|
||||
my ($callback) = @_;
|
||||
|
||||
my $elapsed = $self->stats_for->{_ts} - $self->delta_against->{_ts};
|
||||
die "Time elapsed is 0" unless $elapsed;
|
||||
my @end_stats;
|
||||
sub _calc_stats_for_deltas {
|
||||
my ( $self, $elapsed ) = @_;
|
||||
|
||||
my $delta_for;
|
||||
|
||||
for my $dev ( grep { $self->dev_ok($_) } @{$self->sorted_devs} ) {
|
||||
for my $dev ( grep { $self->dev_ok($_) } $self->sorted_devs ) {
|
||||
my $curr = $self->stats_for($dev);
|
||||
my $against = $self->delta_against($dev);
|
||||
|
||||
my $delta = $self->_calc_delta_for($curr, $against);
|
||||
|
||||
my $delta = $self->_calc_delta_for( $curr, $against );
|
||||
$delta->{ios_in_progress} = $curr->{ios_in_progress};
|
||||
while ( my ($k, $v) = each %$delta ) {
|
||||
while ( my ( $k, $v ) = each %$delta ) {
|
||||
$delta_for->{$k} += $v;
|
||||
}
|
||||
}
|
||||
|
||||
my $in_progress = $delta_for->{ios_in_progress}; #$curr->{"ios_in_progress"};
|
||||
my $tot_in_progress = 0; #$against->{"sum_ios_in_progress"} || 0;
|
||||
my $in_progress = $delta_for->{ios_in_progress}; #$curr->{"ios_in_progress"};
|
||||
my $tot_in_progress = 0; #$against->{"sum_ios_in_progress"} || 0;
|
||||
|
||||
my $devs_in_group = $self->compute_devs_in_group;
|
||||
my $devs_in_group = $self->compute_devs_in_group;
|
||||
|
||||
# Compute the per-second stats for reads, writes, and overall.
|
||||
my %stats = (
|
||||
$self->_calc_read_stats($delta_for, $elapsed, $devs_in_group),
|
||||
$self->_calc_write_stats($delta_for, $elapsed, $devs_in_group),
|
||||
in_progress => $self->compute_in_progress($in_progress, $tot_in_progress),
|
||||
$self->_calc_read_stats( $delta_for, $elapsed, $devs_in_group ),
|
||||
$self->_calc_write_stats( $delta_for, $elapsed, $devs_in_group ),
|
||||
in_progress =>
|
||||
$self->compute_in_progress( $in_progress, $tot_in_progress ),
|
||||
);
|
||||
|
||||
# Compute the numbers for reads and writes together, the things for
|
||||
# which we do not have separate statistics.
|
||||
# Busy is what iostat calls %util. This is the percent of
|
||||
# wall-clock time during which the device has I/O happening.
|
||||
$stats{busy} = 100 * $delta_for->{ms_spent_doing_io} / (1000 * $elapsed * $devs_in_group);
|
||||
$stats{line_ts} = $self->compute_line_ts(
|
||||
first_ts => $self->first_stats_for->{_ts},
|
||||
current_ts => $self->stats_for->{_ts},
|
||||
);
|
||||
|
||||
$stats{dev} = $self->compute_dev(\%stats);
|
||||
|
||||
if ($callback) {
|
||||
$self->$callback( \%stats );
|
||||
my %extras = $self->_calc_misc_stats( $delta_for, $elapsed, $devs_in_group, \%stats );
|
||||
while ( my ($k, $v) = each %extras ) {
|
||||
$stats{$k} = $v;
|
||||
}
|
||||
|
||||
$stats{dev} = $self->compute_dev( \%stats );
|
||||
|
||||
return \%stats;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
}
|
||||
# ###########################################################################
|
||||
# End DiskstatsGroupBySample package
|
||||
|
@@ -27,12 +27,19 @@ use strict;
|
||||
use English qw(-no_match_vars);
|
||||
use constant MKDEBUG => $ENV{MKDEBUG} || 0;
|
||||
|
||||
use re qw( regexp_pattern );
|
||||
|
||||
use IO::Handle;
|
||||
use IO::Select;
|
||||
use Scalar::Util qw( looks_like_number );
|
||||
use File::Temp qw( tempfile tempdir );
|
||||
|
||||
use ReadKeyMini qw( ReadMode );
|
||||
|
||||
use DiskstatsGroupByAll;
|
||||
use DiskstatsGroupByDisk;
|
||||
use DiskstatsGroupBySample;
|
||||
|
||||
our $VERSION = '0.01';
|
||||
|
||||
my %actions = (
|
||||
@@ -43,31 +50,120 @@ my %actions = (
|
||||
'c' => get_new_x_regex("column_re", "Enter a column pattern: "),
|
||||
'd' => get_new_x_regex("disk_re", "Enter a disk/device pattern: "),
|
||||
'q' => sub { return 'last' },
|
||||
'p' => sub { print "Paused\n"; $_[0]->can_read() },
|
||||
'p' => \&pause,
|
||||
'?' => \&help,
|
||||
);
|
||||
|
||||
sub run {
|
||||
STDOUT->autoflush;
|
||||
STDIN->blocking(0);
|
||||
|
||||
my $sel = IO::Select->new(\*STDIN);
|
||||
my ($self, %args) = @_;
|
||||
|
||||
my %opts = (
|
||||
interval => 1.5,
|
||||
keep_file => undef,
|
||||
samples_to_gather => undef,
|
||||
sample_interval => 3,
|
||||
interval => 0.5,
|
||||
device_regex => qr/sda/,
|
||||
interactive => 1,
|
||||
);
|
||||
|
||||
ReadMode("cbreak");
|
||||
my $dir = tempdir( CLEANUP => 1 );
|
||||
my ($tmp_fh, $filename) = tempfile(
|
||||
"diskstats-samples.XXXXXXXX",
|
||||
DIR => $dir,
|
||||
UNLINK => 1,
|
||||
OPEN => 1,
|
||||
);
|
||||
my $pid = open my $child_fh, "|-";
|
||||
|
||||
if (not defined $pid) {
|
||||
die "Couldn't fork: $OS_ERROR";
|
||||
}
|
||||
|
||||
if ( !$pid ) {
|
||||
# Child
|
||||
|
||||
# Bit of helpful magic: Changes how the program's name is displayed,
|
||||
# so it's easier to track in things like ps.
|
||||
local $PROGRAM_NAME = "$PROGRAM_NAME (data-gathering daemon)";
|
||||
|
||||
close($tmp_fh);
|
||||
|
||||
open my $fh, ">>", $filename or die $!;
|
||||
|
||||
while ( getppid() ) {
|
||||
sleep($opts{sample_interval});
|
||||
open my $diskstats_fh, "<", "/proc/diskstats"
|
||||
or die $!;
|
||||
|
||||
my @to_print = <$diskstats_fh>;
|
||||
push @to_print, `date +'TS %s.%N %F %T'`;
|
||||
|
||||
# Lovely little method from IO::Handle: turns on autoflush,
|
||||
# prints, and then restores the original autoflush state.
|
||||
$fh->printflush(@to_print);
|
||||
|
||||
close $diskstats_fh or die $!;
|
||||
}
|
||||
close $fh or die $!;
|
||||
unlink $filename unless $opts{keep_file};
|
||||
exit(0);
|
||||
}
|
||||
|
||||
STDOUT->autoflush;
|
||||
STDIN->blocking(0);
|
||||
|
||||
my $sel = IO::Select->new(\*STDIN);
|
||||
|
||||
my $lines_read = 0;
|
||||
|
||||
$opts{obj} = DiskstatsGroupByDisk->new(%opts);
|
||||
|
||||
ReadKeyMini::cbreak();
|
||||
warn $filename;
|
||||
MAIN_LOOP:
|
||||
while (1) {
|
||||
if ( $sel->can_read( $opts{interval} ) ) {
|
||||
while (my $got = <STDIN>) { # Should probably be sysread
|
||||
if ($actions{$got}) {
|
||||
last MAIN_LOOP unless $actions{$got}->($sel, \%opts) eq 'last';
|
||||
my $ret = $actions{$got}->(
|
||||
select_obj => $sel,
|
||||
options => \%opts,
|
||||
got => $got,
|
||||
filehandle => $tmp_fh,
|
||||
) || '';
|
||||
last MAIN_LOOP if $ret eq 'last';
|
||||
}
|
||||
}
|
||||
}
|
||||
$lines_read += $opts{obj}->group_by( filehandle => $tmp_fh ) || 0;
|
||||
$tmp_fh->clearerr if eof $tmp_fh;
|
||||
}
|
||||
ReadKeyMini::cooked();
|
||||
kill 9, $pid;
|
||||
close($tmp_fh);
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
my %objects = (
|
||||
D => "DiskstatsGroupByDisk",
|
||||
A => "DiskstatsGroupByAll",
|
||||
S => "DiskstatsGroupBySample",
|
||||
);
|
||||
|
||||
sub group_by {
|
||||
my (%args) = @_;
|
||||
|
||||
my $got = $args{got};
|
||||
|
||||
if ( ref( $args{options}->{obj} ) ne $objects{$got} ) {
|
||||
delete $args{options}->{obj};
|
||||
# This would fail on a stricter constructor, so it probably
|
||||
# needs fixing.
|
||||
$args{options}->{obj} = $objects{$got}->new( %{$args{options}} );
|
||||
}
|
||||
seek $args{filehandle}, 0, 0;
|
||||
}
|
||||
ReadMode("normal");
|
||||
|
||||
}
|
||||
|
||||
@@ -75,22 +171,24 @@ sub get_input {
|
||||
my ($message) = @_;
|
||||
|
||||
STDIN->blocking(1);
|
||||
ReadMode("normal");
|
||||
ReadKeyMini::cooked();
|
||||
|
||||
print $message;
|
||||
chomp(my $new_opt = <STDIN>);
|
||||
|
||||
ReadMode("cbreak");
|
||||
ReadKeyMini::cbreak();
|
||||
STDIN->blocking(0);
|
||||
return $new_opt;
|
||||
}
|
||||
|
||||
sub get_new_interval {
|
||||
my ($args) = @_;
|
||||
my (%args) = @_;
|
||||
my $new_interval = get_input("Enter a redisplay interval: ");
|
||||
|
||||
$new_interval ||= 0;
|
||||
|
||||
if ( looks_like_number($new_interval) ) {
|
||||
$args->{interval} = $new_interval;
|
||||
return $args{options}->{interval} = $new_interval;
|
||||
}
|
||||
else {
|
||||
die("invalid timeout specification");
|
||||
@@ -100,18 +198,18 @@ sub get_new_interval {
|
||||
sub get_new_x_regex {
|
||||
my ($looking_for, $message) = @_;
|
||||
return sub {
|
||||
my ($args) = @_;
|
||||
my (%args) = @_;
|
||||
my $new_regex = get_input($message);
|
||||
|
||||
if ( $new_regex && (my $re = eval { qr/$new_regex/ }) ) {
|
||||
$args->{$looking_for} = $re;
|
||||
if ( $new_regex && (my $re = eval { qr/$new_regex/i }) ) {
|
||||
$args{options}->{$looking_for} = $re;
|
||||
}
|
||||
elsif (!$EVAL_ERROR && !$new_regex) {
|
||||
# This might seem weird, but an empty pattern is
|
||||
# somewhat magical, and basically just asking for trouble.
|
||||
# Instead we give them what awk would, a pattern that always
|
||||
# matches.
|
||||
$args->{$looking_for} = qr/(?=)/;
|
||||
$args{options}->{$looking_for} = qr/(?=)/;
|
||||
}
|
||||
else {
|
||||
die("invalid regex specification: $EVAL_ERROR");
|
||||
@@ -121,7 +219,7 @@ sub get_new_x_regex {
|
||||
|
||||
sub help {
|
||||
# XXX: TODO
|
||||
print <<'HELP'
|
||||
print <<'HELP';
|
||||
You can control this program by key presses:
|
||||
------------------- Key ------------------- ---- Current Setting ----
|
||||
A, D, S) Set the group-by mode \$opt{OPT_g}
|
||||
@@ -133,9 +231,23 @@ sub help {
|
||||
q) Quit the program
|
||||
------------------- Press any key to continue -----------------------
|
||||
HELP
|
||||
pause(@_);
|
||||
}
|
||||
|
||||
sub pause {
|
||||
my (%args) = @_;
|
||||
STDIN->blocking(1);
|
||||
$args{select_obj}->can_read();
|
||||
STDIN->blocking(0);
|
||||
scalar <STDIN>;
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__PACKAGE__->run(@ARGV) unless caller;
|
||||
|
||||
}
|
||||
# ###########################################################################
|
||||
# End DiskstatsMenu package
|
||||
# ###########################################################################
|
||||
# ###########################################################################
|
@@ -111,6 +111,25 @@ my %modes = (
|
||||
|
||||
}
|
||||
|
||||
sub readkey {
|
||||
my $key = '';
|
||||
cbreak();
|
||||
sysread(STDIN, $key, 1);
|
||||
my $timeout = 0.1;
|
||||
if ( $key eq "\033" ) { # Ugly and broken hack, but good enough for the two minutes it took to write.
|
||||
{
|
||||
my $x = '';
|
||||
STDIN->blocking(0);
|
||||
sysread(STDIN, $x, 2);
|
||||
STDIN->blocking(1);
|
||||
$key .= $x;
|
||||
redo if $key =~ /\[[0-2](?:[0-9];)?$/
|
||||
}
|
||||
}
|
||||
cooked();
|
||||
return $key;
|
||||
}
|
||||
|
||||
# As per perlfaq8:
|
||||
|
||||
sub _GetTerminalSize {
|
||||
|
258
t/lib/Diskstats.t
Normal file
258
t/lib/Diskstats.t
Normal file
@@ -0,0 +1,258 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More qw( no_plan );
|
||||
|
||||
use PerconaTest;
|
||||
|
||||
use File::Spec;
|
||||
|
||||
BEGIN {
|
||||
use_ok "Diskstats";
|
||||
use_ok "DiskstatsGroupByAll";
|
||||
use_ok "DiskstatsGroupByDisk";
|
||||
use_ok "DiskstatsGroupBySample";
|
||||
}
|
||||
|
||||
my $obj = new_ok("Diskstats");
|
||||
|
||||
can_ok( $obj, qw(
|
||||
out_fh column_regex device_regex filename
|
||||
block_size sorted_devs clear_state clear_sorted_devs
|
||||
stats_for previous_stats_for first_stats_for
|
||||
has_stats design_print_formats parse_diskstats_line
|
||||
parse_from print_deltas
|
||||
) );
|
||||
|
||||
my $line = "104 0 cciss/c0d0 2139885 162788 37361471 8034486 17999682 83425310 811400340 12711047 0 6869437 20744582";
|
||||
|
||||
my %expected_results = (
|
||||
'major' => 104,
|
||||
'minor' => 0,
|
||||
|
||||
'reads' => 2139885,
|
||||
'reads_merged' => 162788,
|
||||
'read_sectors' => 37361471,
|
||||
'ms_spent_reading' => 8034486,
|
||||
'read_bytes' => 19129073152,
|
||||
'read_kbs' => 18680735.5,
|
||||
|
||||
'writes' => 17999682,
|
||||
'writes_merged' => 83425310,
|
||||
'written_sectors' => 811400340,
|
||||
'ms_spent_writing' => 12711047,
|
||||
'written_bytes' => 415436974080,
|
||||
'written_kbs' => 405700170,
|
||||
|
||||
'ios_in_progress' => 0,
|
||||
'ms_spent_doing_io' => 6869437,
|
||||
'ms_weighted' => 20744582,
|
||||
|
||||
'ttbyt' => 434566047232,
|
||||
'ttreq' => 20139567,
|
||||
);
|
||||
|
||||
# Copypasted from Diskstats.pm. If the one in there changes so should this.
|
||||
my @columns_in_order = (
|
||||
# Colum # Format # Key name
|
||||
[ " rd_s" => "%7.1f", "reads_sec", ],
|
||||
[ "rd_avkb" => "%7.1f", "avg_read_sz", ],
|
||||
[ "rd_mb_s" => "%7.1f", "mbytes_read_sec", ],
|
||||
[ "rd_mrg" => "%5.0f%%", "read_merge_pct", ],
|
||||
[ "rd_cnc" => "%6.1f", "read_conc", ],
|
||||
[ " rd_rt" => "%7.1f", "read_rtime", ],
|
||||
[ " wr_s" => "%7.1f", "writes_sec", ],
|
||||
[ "wr_avkb" => "%7.1f", "avg_write_sz", ],
|
||||
[ "wr_mb_s" => "%7.1f", "mbytes_written_sec", ],
|
||||
[ "wr_mrg" => "%5.0f%%", "write_merge_pct", ],
|
||||
[ "wr_cnc" => "%6.1f", "write_conc", ],
|
||||
[ " wr_rt" => "%7.1f", "write_rtime", ],
|
||||
[ "busy" => "%3.0f%%", "busy", ],
|
||||
[ "in_prg" => "%6d", "in_progress", ],
|
||||
);
|
||||
|
||||
my ($dev, $res) = $obj->parse_diskstats_line($line, $obj->block_size);
|
||||
|
||||
is_deeply( $res, \%expected_results, "parse_diskstats_line works" );
|
||||
|
||||
$obj->column_regex(qr/./);
|
||||
my ($header, $rest, $cols) = $obj->design_print_formats();
|
||||
is($header, join(" ", q{%5s %-6s}, map { $_->[0] } @columns_in_order),
|
||||
"design_print_formats: sanity check for defaults");
|
||||
|
||||
($header, $rest, $cols) = $obj->design_print_formats(max_device_length => 10);
|
||||
my $all_columns_format = join(" ", q{%5s %-10s}, map { $_->[0] } @columns_in_order);
|
||||
is($header, $all_columns_format, "design_print_formats: max_device_length works");
|
||||
|
||||
$obj->column_regex(qr/(?!)/); # Will never match
|
||||
($header, $rest, $cols) = $obj->design_print_formats(max_device_length => 10);
|
||||
is($header, q{%5s %-10s }, "design_print_formats respects column_regex");
|
||||
|
||||
$obj->column_regex(qr//);
|
||||
($header, $rest, $cols) = $obj->design_print_formats(max_device_length => 10, columns => []);
|
||||
is($header, q{%5s %-10s }, "...unless we pass an explicit column array");
|
||||
|
||||
$obj->column_regex(qr/./);
|
||||
($header, $rest, $cols) = $obj->design_print_formats(
|
||||
max_device_length => 10,
|
||||
columns => [qw( busy )]
|
||||
);
|
||||
is($header, q{%5s %-10s busy}, "");
|
||||
|
||||
($header, $rest, $cols) = $obj->design_print_formats(
|
||||
max_device_length => 10,
|
||||
columns => [map { $_->[0] } @columns_in_order],
|
||||
);
|
||||
is($header, $all_columns_format, "");
|
||||
|
||||
throws_ok( sub { $obj->design_print_formats( columns => {} ) },
|
||||
qr/The columns argument to design_print_formats should be an arrayref/,
|
||||
"design_print_formats dies when passed an invalid columns argument");
|
||||
|
||||
for my $meth ( qw( current_ts previous_ts first_ts ) ) {
|
||||
ok(!$obj->$meth(), "Diskstats->$meth is initially false");
|
||||
|
||||
$obj->$meth(10);
|
||||
is($obj->$meth(), 10, "Diskstats->$meth(10) sets it to 10");
|
||||
|
||||
$obj->$meth(20);
|
||||
$obj->clear_ts();
|
||||
ok(!$obj->$meth(), "Diskstats->clear_ts does as advertized");
|
||||
}
|
||||
|
||||
is($obj->out_fh(), \*STDOUT, "by default, outputs to STDOUT");
|
||||
open my $fh, "<", \my $tmp;
|
||||
$obj->out_fh($fh);
|
||||
is($obj->out_fh(), $fh, "Changing it works");
|
||||
close($fh);
|
||||
is($obj->out_fh(), \*STDOUT, "and if we close the set filehandle, it reverts to STDOUT");
|
||||
|
||||
|
||||
is_deeply([$obj->sorted_devs()], [], "sorted_devs starts empty");
|
||||
|
||||
$obj->add_sorted_devs("sda");
|
||||
is_deeply([$obj->sorted_devs()], [qw(sda)], "We can add devices just fine,");
|
||||
|
||||
$obj->add_sorted_devs("sda");
|
||||
is_deeply([$obj->sorted_devs()], [qw(sda)], "...And duplicates get detected and discarded");
|
||||
|
||||
$obj->clear_sorted_devs();
|
||||
is_deeply([$obj->sorted_devs()], [], "clear_sorted_devs does as advertized,");
|
||||
$obj->add_sorted_devs("sda");
|
||||
is_deeply([$obj->sorted_devs()], [qw(sda)], "...And clears the internal duplicate-checking list");
|
||||
|
||||
|
||||
|
||||
# Common tests for all three subclasses
|
||||
for my $test (
|
||||
{
|
||||
class => "DiskstatsGroupByAll",
|
||||
method => "group_by_all",
|
||||
results_file_prefix => "all",
|
||||
},
|
||||
{
|
||||
class => "DiskstatsGroupByDisk",
|
||||
method => "group_by_disk",
|
||||
results_file_prefix => "disk",
|
||||
},
|
||||
{
|
||||
class => "DiskstatsGroupBySample",
|
||||
method => "group_by_sample",
|
||||
results_file_prefix => "sample",
|
||||
}) {
|
||||
my $obj = $test->{class}->new();
|
||||
my $method = $test->{method};
|
||||
my $prefix = $test->{results_file_prefix};
|
||||
|
||||
for my $filename ( map "diskstats-00$_.txt", 1..5 ) {
|
||||
my $file = File::Spec->catfile( "t", "pt-diskstats", "samples", $filename );
|
||||
my $file_with_trunk = File::Spec->catfile( $trunk, $file );
|
||||
|
||||
my $expected = load_file( File::Spec->catfile( "t", "pt-diskstats", "expected", "${prefix}_$filename" ) );
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->$method(
|
||||
filename => $file_with_trunk,
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$method: $filename via filename");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
open my $fh, "<", $file_with_trunk or die $!;
|
||||
$obj->$method(
|
||||
filehandle => $fh,
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$method: $filename via filehandle");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->$method(
|
||||
data => load_file( $file ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$method: $filename via data");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->$method(
|
||||
data => "TS 1298130002.073935000\n" . load_file( $file ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$method: $filename with an extra TS at the top");
|
||||
|
||||
$obj->filename( $file_with_trunk );
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->$method();
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$method: $filename via obj->filename()");
|
||||
|
||||
my $data = <<'EOF';
|
||||
TS 1297205887.156653000
|
||||
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
|
||||
TS 1297205888.161613000
|
||||
EOF
|
||||
|
||||
$got = output(
|
||||
sub{
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->$method(data => $data);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
ok(!$got, "$method: 1 line of data between two TS lines results in no output");
|
||||
|
||||
}
|
||||
}
|
@@ -1,36 +1,36 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
2.0 ram0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 23.0 53.2 0.6 85% 0.0 0.9 0% 0
|
||||
2.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 23.0 26.6 0.6 85% 0.0 0.9 0% 0
|
||||
2.0 cciss/c0d0p1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 23.0 53.2 0.6 85% 0.0 0.9 0% 0
|
||||
2.0 cciss/c0d1 466.5 44.6 10.2 0% 11.2 23.9 985.0 47.5 22.8 0% 0.1 0.1 92% 18
|
||||
2.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 23.0 26.6 0.6 85% 0.0 0.9 0% 0
|
||||
2.0 cciss/c0d1 466.5 22.3 10.2 0% 11.2 23.9 985.0 23.8 22.8 0% 0.1 0.1 92% 18
|
||||
2.0 cciss/c1d0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 dm-0 0.0 0.0 0.0 0% 0.0 0.0 153.0 8.0 0.6 0% 0.1 0.8 0% 0
|
||||
2.0 dm-0 0.0 0.0 0.0 0% 0.0 0.0 153.0 4.0 0.6 0% 0.1 0.8 0% 0
|
||||
2.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
4.0 ram0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 16.0 35.5 0.3 77% 0.0 0.4 0% 0
|
||||
4.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 16.0 17.8 0.3 77% 0.0 0.4 0% 0
|
||||
4.0 cciss/c0d0p1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 16.0 35.5 0.3 77% 0.0 0.4 0% 0
|
||||
4.0 cciss/c0d1 373.0 47.2 8.6 0% 10.2 27.4 560.0 46.2 12.6 0% 0.1 0.1 91% 17
|
||||
4.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 16.0 17.8 0.3 77% 0.0 0.4 0% 0
|
||||
4.0 cciss/c0d1 373.0 23.6 8.6 0% 10.2 27.4 560.0 23.1 12.6 0% 0.1 0.1 91% 17
|
||||
4.0 cciss/c1d0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.0 dm-0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
5.0 ram0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 4.0 62.0 0.1 87% 0.0 0.0 0% 0
|
||||
5.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 4.0 31.0 0.1 87% 0.0 0.0 0% 0
|
||||
5.0 cciss/c0d0p1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 4.0 62.0 0.1 87% 0.0 0.0 0% 0
|
||||
5.0 cciss/c0d1 848.0 42.6 17.7 0% 21.6 25.5 1979.0 49.7 48.0 0% 0.2 0.1 178% 9
|
||||
5.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 4.0 31.0 0.1 87% 0.0 0.0 0% 0
|
||||
5.0 cciss/c0d1 848.0 21.3 17.7 0% 21.6 25.5 1979.0 24.9 48.0 0% 0.2 0.1 178% 9
|
||||
5.0 cciss/c1d0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.0 dm-0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
7.0 ram0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
7.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 21.0 74.7 0.8 89% 0.0 0.5 0% 0
|
||||
7.0 cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 21.0 37.3 0.8 89% 0.0 0.5 0% 0
|
||||
7.0 cciss/c0d0p1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
7.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 21.0 74.7 0.8 89% 0.0 0.5 0% 0
|
||||
7.0 cciss/c0d1 340.0 36.6 6.1 0% 8.1 23.8 913.0 49.4 22.0 0% 0.1 0.1 86% 5
|
||||
7.0 cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 21.0 37.3 0.8 89% 0.0 0.5 0% 0
|
||||
7.0 cciss/c0d1 340.0 18.3 6.1 0% 8.1 23.8 913.0 24.7 22.0 0% 0.1 0.1 86% 5
|
||||
7.0 cciss/c1d0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
7.0 dm-0 0.0 0.0 0.0 0% 0.0 0.0 194.5 8.0 0.8 0% 0.1 0.6 0% 0
|
||||
7.0 dm-0 0.0 0.0 0.0 0% 0.0 0.0 194.5 4.0 0.8 0% 0.1 0.6 0% 0
|
||||
7.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -15,10 +15,10 @@
|
||||
1.0 ram13 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 ram14 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 ram15 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 sda 1406.0 32.0 21.9 1% 0.6 0.4 46.3 61.1 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sda 1406.0 16.0 21.9 1% 0.6 0.4 46.3 30.6 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sda1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 sda2 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 sda3 1406.0 32.0 21.9 1% 0.6 0.4 46.3 61.1 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sda3 1406.0 16.0 21.9 1% 0.6 0.4 46.3 30.6 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
1.0 loop0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
@@ -46,10 +46,10 @@
|
||||
2.0 ram13 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 ram14 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 ram15 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 sda 1580.1 31.9 24.6 1% 0.6 0.4 163.7 62.2 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sda 1580.1 16.0 24.6 1% 0.6 0.4 163.7 31.1 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sda1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 sda2 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 sda3 1580.1 31.9 24.6 1% 0.6 0.4 163.7 62.2 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sda3 1580.1 16.0 24.6 1% 0.6 0.4 163.7 31.1 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
2.0 loop0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
@@ -77,10 +77,10 @@
|
||||
3.0 ram13 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 ram14 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 ram15 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 sda 1296.7 32.0 20.2 1% 0.5 0.4 51.3 50.5 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sda 1296.7 16.0 20.2 1% 0.5 0.4 51.3 25.2 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sda1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 sda2 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 sda3 1296.7 32.0 20.2 1% 0.5 0.4 51.3 50.5 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sda3 1296.7 16.0 20.2 1% 0.5 0.4 51.3 25.2 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
3.0 loop0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
@@ -108,10 +108,10 @@
|
||||
4.1 ram13 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 ram14 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 ram15 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 sda 1429.7 32.0 22.3 1% 0.5 0.3 73.9 61.0 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sda 1429.7 16.0 22.3 1% 0.5 0.3 73.9 30.5 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sda1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 sda2 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 sda3 1429.7 32.0 22.3 1% 0.5 0.3 73.9 61.0 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sda3 1429.7 16.0 22.3 1% 0.5 0.3 73.9 30.5 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
4.1 loop0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
@@ -139,10 +139,10 @@
|
||||
5.1 ram13 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 ram14 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 ram15 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 sda 1258.1 32.0 19.6 1% 0.4 0.3 158.7 68.8 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sda 1258.1 16.0 19.6 1% 0.4 0.3 158.7 34.4 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sda1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 sda2 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 sda3 1258.1 32.0 19.6 1% 0.4 0.3 158.7 68.8 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sda3 1258.1 16.0 19.6 1% 0.4 0.3 158.7 34.4 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
5.1 loop0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
|
@@ -1,15 +1,15 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 sda3 1406.0 32.0 21.9 1% 0.6 0.4 46.3 61.1 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sda4 1406.0 32.0 21.9 1% 0.6 0.4 46.3 61.1 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sda3 1406.0 16.0 21.9 1% 0.6 0.4 46.3 30.6 1.4 67% 0.0 0.3 41% 0
|
||||
1.0 sda4 1406.0 16.0 21.9 1% 0.6 0.4 46.3 30.6 1.4 67% 0.0 0.3 41% 0
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
2.0 sda3 1580.1 31.9 24.6 1% 0.6 0.4 163.7 62.2 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sda4 1580.1 31.9 24.6 1% 0.6 0.4 163.7 62.2 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sda3 1580.1 16.0 24.6 1% 0.6 0.4 163.7 31.1 5.0 36% 0.1 0.3 46% 1
|
||||
2.0 sda4 1580.1 16.0 24.6 1% 0.6 0.4 163.7 31.1 5.0 36% 0.1 0.3 46% 1
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
3.0 sda3 1296.7 32.0 20.2 1% 0.5 0.4 51.3 50.5 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sda4 1296.7 32.0 20.2 1% 0.5 0.4 51.3 50.5 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sda3 1296.7 16.0 20.2 1% 0.5 0.4 51.3 25.2 1.3 62% 0.0 0.3 42% 1
|
||||
3.0 sda4 1296.7 16.0 20.2 1% 0.5 0.4 51.3 25.2 1.3 62% 0.0 0.3 42% 1
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
4.1 sda3 1429.7 32.0 22.3 1% 0.5 0.3 73.9 61.0 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sda4 1429.7 32.0 22.3 1% 0.5 0.3 73.9 61.0 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sda3 1429.7 16.0 22.3 1% 0.5 0.3 73.9 30.5 2.2 57% 0.0 0.3 40% 0
|
||||
4.1 sda4 1429.7 16.0 22.3 1% 0.5 0.3 73.9 30.5 2.2 57% 0.0 0.3 40% 0
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
5.1 sda3 1258.1 32.0 19.6 1% 0.4 0.3 158.7 68.8 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sda4 1258.1 32.0 19.6 1% 0.4 0.3 158.7 68.8 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sda3 1258.1 16.0 19.6 1% 0.4 0.3 158.7 34.4 5.3 36% 0.1 0.4 37% 0
|
||||
5.1 sda4 1258.1 16.0 19.6 1% 0.4 0.3 158.7 34.4 5.3 36% 0.1 0.4 37% 0
|
||||
|
@@ -1,9 +1,9 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
{4} ram0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{4} cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 17.7 56.2 0.5 86% 0.0 0.6 0% 0
|
||||
{4} cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 17.7 28.1 0.5 86% 0.0 0.6 0% 0
|
||||
{4} cciss/c0d0p1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{4} cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 17.7 56.2 0.5 86% 0.0 0.6 0% 0
|
||||
{4} cciss/c0d1 458.1 43.0 9.6 0% 11.5 25.1 985.0 48.4 23.3 0% 0.1 0.1 102% 0
|
||||
{4} cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 17.7 28.1 0.5 86% 0.0 0.6 0% 0
|
||||
{4} cciss/c0d1 458.1 21.5 9.6 0% 11.5 25.1 985.0 24.2 23.3 0% 0.1 0.1 102% 0
|
||||
{4} cciss/c1d0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{4} dm-0 0.0 0.0 0.0 0% 0.0 0.0 99.3 8.0 0.4 0% 0.1 0.7 0% 0
|
||||
{4} dm-0 0.0 0.0 0.0 0% 0.0 0.0 99.3 4.0 0.4 0% 0.1 0.7 0% 0
|
||||
{4} md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
|
@@ -24,15 +24,15 @@
|
||||
{101} sda6 2.4 0.0 0.0 2% 0.0 3.1 46.3 0.0 0.0 25% 0.0 0.3 1% 0
|
||||
{101} sdb 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} sdc 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} dm-0 0.1 13.3 0.0 0% 0.0 5.0 3.9 8.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} dm-1 0.0 8.0 0.0 0% 0.0 3.0 2.1 8.0 0.0 0% 0.0 0.1 0% 0
|
||||
{101} dm-2 0.0 0.0 0.0 0% 0.0 0.0 0.2 8.0 0.0 0% 0.0 0.4 0% 0
|
||||
{101} dm-3 0.0 0.0 0.0 0% 0.0 0.0 3.5 8.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} dm-4 0.1 36.3 0.0 0% 0.0 2.2 3.3 8.0 0.0 0% 0.0 0.4 0% 0
|
||||
{101} dm-5 0.0 0.0 0.0 0% 0.0 0.0 0.4 8.0 0.0 0% 0.0 0.1 0% 0
|
||||
{101} dm-6 2.3 19.7 0.0 0% 0.0 3.1 48.0 35.2 0.8 0% 0.0 0.3 1% 0
|
||||
{101} dm-0 0.1 6.7 0.0 0% 0.0 5.0 3.9 4.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} dm-1 0.0 4.0 0.0 0% 0.0 3.0 2.1 4.0 0.0 0% 0.0 0.1 0% 0
|
||||
{101} dm-2 0.0 0.0 0.0 0% 0.0 0.0 0.2 4.0 0.0 0% 0.0 0.4 0% 0
|
||||
{101} dm-3 0.0 0.0 0.0 0% 0.0 0.0 3.5 4.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} dm-4 0.1 18.2 0.0 0% 0.0 2.2 3.3 4.0 0.0 0% 0.0 0.4 0% 0
|
||||
{101} dm-5 0.0 0.0 0.0 0% 0.0 0.0 0.4 4.0 0.0 0% 0.0 0.1 0% 0
|
||||
{101} dm-6 2.3 9.9 0.0 0% 0.0 3.1 48.0 17.6 0.8 0% 0.0 0.3 1% 0
|
||||
{101} sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} sdd 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} sr1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{101} emcpowera 0.0 0.0 0.0 0% 0.0 0.0 0.6 33.8 0.0 76% 0.0 2.4 0% 0
|
||||
{101} emcpowera 0.0 0.0 0.0 0% 0.0 0.0 0.6 16.9 0.0 76% 0.0 2.4 0% 0
|
||||
|
@@ -24,14 +24,14 @@
|
||||
{279} sda6 0.0 0.0 0.0 47% 0.0 4.0 3.7 0.0 0.0 64% 0.0 0.2 0% 0
|
||||
{279} sdb 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} sdb1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} sdc 749.2 32.0 11.7 1% 1.0 1.3 261.4 31.7 4.0 0% 0.2 0.6 98% 0
|
||||
{279} sdc1 749.2 32.0 11.7 1% 1.0 1.3 261.4 31.7 4.0 0% 0.2 0.6 98% 0
|
||||
{279} dm-0 0.0 0.0 0.0 0% 0.0 0.0 2.4 8.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} dm-1 0.0 8.0 0.0 0% 0.0 4.0 2.1 8.0 0.0 0% 0.0 0.4 0% 0
|
||||
{279} dm-2 0.0 0.0 0.0 0% 0.0 0.0 0.1 8.0 0.0 0% 0.0 0.1 0% 0
|
||||
{279} dm-3 0.0 0.0 0.0 0% 0.0 0.0 3.3 8.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} dm-4 0.1 21.1 0.0 0% 0.0 3.9 1.9 8.0 0.0 0% 0.0 0.1 0% 0
|
||||
{279} dm-5 0.0 0.0 0.0 0% 0.0 0.0 0.2 8.0 0.0 0% 0.0 0.3 0% 0
|
||||
{279} sdc 749.2 16.0 11.7 1% 1.0 1.3 261.4 15.8 4.0 0% 0.2 0.6 98% 0
|
||||
{279} sdc1 749.2 16.0 11.7 1% 1.0 1.3 261.4 15.8 4.0 0% 0.2 0.6 98% 0
|
||||
{279} dm-0 0.0 0.0 0.0 0% 0.0 0.0 2.4 4.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} dm-1 0.0 4.0 0.0 0% 0.0 4.0 2.1 4.0 0.0 0% 0.0 0.4 0% 0
|
||||
{279} dm-2 0.0 0.0 0.0 0% 0.0 0.0 0.1 4.0 0.0 0% 0.0 0.1 0% 0
|
||||
{279} dm-3 0.0 0.0 0.0 0% 0.0 0.0 3.3 4.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} dm-4 0.1 10.6 0.0 0% 0.0 3.9 1.9 4.0 0.0 0% 0.0 0.1 0% 0
|
||||
{279} dm-5 0.0 0.0 0.0 0% 0.0 0.0 0.2 4.0 0.0 0% 0.0 0.3 0% 0
|
||||
{279} dm-6 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} sdd 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
@@ -39,4 +39,4 @@
|
||||
{279} md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} emcpowera 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} emcpowera1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{279} dm-7 755.0 31.7 11.7 0% 1.0 1.3 261.7 31.6 4.0 0% 0.2 0.6 98% 0
|
||||
{279} dm-7 755.0 15.9 11.7 0% 1.0 1.3 261.7 15.8 4.0 0% 0.2 0.6 98% 0
|
||||
|
@@ -15,10 +15,10 @@
|
||||
{5} ram13 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} ram14 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} ram15 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} sda 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda 1394.1 16.0 21.8 1% 0.5 0.4 98.8 31.4 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} sda2 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} sda3 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda3 1394.1 16.0 21.8 1% 0.5 0.4 98.8 31.4 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sr0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{5} loop0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
|
@@ -1,3 +1,3 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
{5} sda3 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda4 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda3 1394.1 16.0 21.8 1% 0.5 0.4 98.8 31.4 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda4 1394.1 16.0 21.8 1% 0.5 0.4 98.8 31.4 3.0 48% 0.0 0.3 41% 0
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
2.0 {8} 466.5 44.6 10.2 0% 1.4 23.9 1184.0 42.6 24.6 18% 0.0 0.2 12% 18
|
||||
4.0 {8} 373.0 47.2 8.6 0% 1.3 27.4 592.0 45.6 13.2 16% 0.0 0.1 11% 17
|
||||
5.0 {8} 848.0 42.6 17.7 0% 2.7 25.5 1987.0 49.8 48.3 3% 0.0 0.1 22% 9
|
||||
7.0 {8} 340.0 36.6 6.1 0% 1.0 23.8 1149.5 43.4 24.3 23% 0.0 0.2 11% 5
|
||||
2.0 {8} 466.5 22.3 10.2 0% 1.4 23.9 1184.0 21.3 24.6 18% 0.0 0.2 12% 18
|
||||
4.0 {8} 373.0 23.6 8.6 0% 1.3 27.4 592.0 22.8 13.2 16% 0.0 0.1 11% 17
|
||||
5.0 {8} 848.0 21.3 17.7 0% 2.7 25.5 1987.0 24.9 48.3 3% 0.0 0.1 22% 9
|
||||
7.0 {8} 340.0 18.3 6.1 0% 1.0 23.8 1149.5 21.7 24.3 23% 0.0 0.2 11% 5
|
||||
|
@@ -1,102 +1,102 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 {37} 9.0 2.7 0.0 0% 0.0 0.0 995.0 15.0 7.3 6% 0.0 1.7 2% 0
|
||||
2.0 {37} 6.0 6.7 0.0 0% 0.0 3.0 46.9 4.3 0.1 37% 0.0 0.1 0% 0
|
||||
3.0 {37} 29.9 9.1 0.1 0% 0.0 3.5 57.8 3.0 0.1 12% 0.0 0.2 0% 0
|
||||
4.0 {37} 3.0 2.7 0.0 0% 0.0 1.0 113.7 4.8 0.3 44% 0.0 0.0 0% 0
|
||||
5.0 {37} 30.9 1.5 0.0 24% 0.0 5.9 79.8 3.0 0.1 11% 0.0 0.1 0% 0
|
||||
6.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 20.9 7.2 0.1 32% 0.0 0.2 0% 0
|
||||
7.0 {37} 15.0 10.7 0.1 0% 0.0 6.2 36.9 3.2 0.1 18% 0.0 0.2 0% 0
|
||||
8.0 {37} 9.0 8.0 0.0 0% 0.0 3.7 39.9 4.0 0.1 33% 0.0 0.0 0% 0
|
||||
9.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 73.8 3.9 0.1 31% 0.0 0.1 0% 0
|
||||
10.0 {37} 3.0 2.7 0.0 0% 0.0 4.0 31.9 3.0 0.0 11% 0.0 0.1 0% 0
|
||||
11.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 830.4 17.6 7.2 5% 0.0 0.2 0% 0
|
||||
12.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 17.0 3.3 0.0 19% 0.0 0.2 0% 0
|
||||
13.0 {37} 35.9 14.0 0.2 25% 0.0 2.7 19.9 4.0 0.0 33% 0.0 0.3 0% 0
|
||||
14.0 {37} 9.0 2.7 0.0 0% 0.0 0.0 137.6 4.6 0.3 42% 0.0 0.1 0% 0
|
||||
15.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 37.9 2.9 0.1 10% 0.0 0.0 0% 0
|
||||
16.0 {37} 9.0 8.0 0.0 0% 0.0 4.3 55.8 5.0 0.1 34% 0.0 0.1 0% 0
|
||||
17.1 {37} 6.0 6.7 0.0 0% 0.0 3.0 62.8 3.4 0.1 22% 0.0 0.1 0% 0
|
||||
18.1 {37} 3.0 2.7 0.0 0% 0.0 0.0 25.9 3.7 0.0 28% 0.0 0.2 0% 0
|
||||
19.1 {37} 12.0 8.7 0.1 0% 0.0 4.0 97.7 3.8 0.2 29% 0.0 0.1 0% 0
|
||||
20.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 22.9 3.1 0.0 15% 0.0 0.1 0% 0
|
||||
21.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 769.6 19.1 7.2 6% 0.0 0.3 0% 0
|
||||
22.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 35.9 3.1 0.1 14% 0.0 0.2 0% 0
|
||||
23.1 {37} 3.0 2.7 0.0 0% 0.0 0.0 65.8 3.2 0.1 15% 0.0 0.0 0% 0
|
||||
24.1 {37} 3.0 2.7 0.0 0% 0.0 0.0 98.7 4.8 0.2 44% 0.0 0.0 0% 0
|
||||
25.1 {37} 9.0 2.7 0.0 0% 0.0 1.0 62.8 2.9 0.1 9% 0.0 0.3 0% 0
|
||||
26.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 85.7 4.9 0.2 38% 0.0 0.1 0% 0
|
||||
27.1 {37} 6.0 6.7 0.0 0% 0.0 5.5 55.8 3.1 0.1 15% 0.0 0.2 0% 0
|
||||
28.1 {37} 9.0 2.7 0.0 0% 0.0 0.3 76.7 3.0 0.1 11% 0.0 0.1 0% 0
|
||||
29.1 {37} 3.0 2.7 0.0 0% 0.0 0.0 62.8 4.7 0.1 43% 0.0 0.0 0% 0
|
||||
30.1 {37} 20.9 10.7 0.1 0% 0.0 5.6 16.9 3.3 0.0 19% 0.0 0.2 0% 0
|
||||
31.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 897.3 16.5 7.2 8% 0.0 0.2 0% 0
|
||||
32.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 14.0 3.4 0.0 22% 0.0 0.2 0% 0
|
||||
33.1 {37} 41.9 9.5 0.2 0% 0.0 4.4 62.8 3.9 0.1 32% 0.0 0.1 1% 0
|
||||
34.1 {37} 6.0 5.3 0.0 0% 0.0 5.5 82.8 5.1 0.2 48% 0.0 0.0 0% 0
|
||||
35.1 {37} 6.0 6.7 0.0 0% 0.0 1.5 36.9 3.2 0.1 18% 0.0 0.2 0% 0
|
||||
36.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 82.7 4.7 0.2 36% 0.0 0.7 0% 0
|
||||
37.1 {37} 29.9 8.0 0.1 0% 0.0 2.9 72.8 3.0 0.1 10% 0.0 0.1 0% 0
|
||||
38.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 26.9 3.3 0.0 18% 0.0 0.2 0% 0
|
||||
39.1 {37} 17.9 8.0 0.1 0% 0.0 4.7 104.7 4.2 0.2 36% 0.0 0.1 0% 0
|
||||
40.1 {37} 9.0 8.0 0.0 0% 0.0 4.0 45.9 3.1 0.1 15% 0.0 0.1 0% 0
|
||||
41.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 796.5 16.3 6.4 7% 0.0 0.2 0% 0
|
||||
42.1 {37} 6.0 2.7 0.0 0% 0.0 2.0 60.8 3.0 0.1 12% 0.0 0.1 0% 0
|
||||
43.1 {37} 9.0 8.0 0.0 0% 0.0 3.0 42.9 3.2 0.1 16% 0.0 0.1 0% 0
|
||||
44.1 {37} 6.0 10.7 0.0 0% 0.0 6.0 96.7 4.0 0.2 34% 0.0 0.0 0% 0
|
||||
45.1 {37} 3.0 2.7 0.0 0% 0.0 0.0 55.8 3.1 0.1 15% 0.0 0.1 0% 0
|
||||
46.1 {37} 3.0 2.7 0.0 0% 0.0 0.0 166.5 3.8 0.3 22% 0.0 0.3 0% 0
|
||||
47.1 {37} 3.0 2.7 0.0 0% 0.0 1.0 41.9 3.0 0.1 12% 0.0 0.1 0% 0
|
||||
48.1 {37} 6.0 2.7 0.0 0% 0.0 0.0 45.9 3.1 0.1 15% 0.0 0.2 0% 0
|
||||
49.2 {37} 15.0 10.7 0.1 0% 0.0 4.8 48.9 4.4 0.1 40% 0.0 0.0 0% 0
|
||||
50.2 {37} 9.0 10.7 0.0 0% 0.0 5.7 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
51.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 673.0 17.2 5.7 8% 0.0 0.3 0% 0
|
||||
52.2 {37} 6.0 2.7 0.0 0% 0.0 0.5 55.8 2.9 0.1 7% 0.0 0.1 0% 0
|
||||
53.2 {37} 26.9 7.1 0.1 0% 0.0 5.4 57.8 3.3 0.1 19% 0.0 0.1 0% 0
|
||||
54.2 {37} 3.0 2.7 0.0 0% 0.0 0.0 89.7 5.0 0.2 46% 0.0 0.1 0% 0
|
||||
55.2 {37} 15.0 9.1 0.1 0% 0.0 4.2 51.8 3.7 0.1 28% 0.0 0.1 0% 0
|
||||
56.2 {37} 26.9 9.8 0.1 0% 0.0 4.6 79.8 4.0 0.2 18% 0.0 0.4 0% 0
|
||||
57.2 {37} 15.0 7.5 0.1 0% 0.0 4.2 106.7 3.5 0.2 24% 0.0 0.1 0% 0
|
||||
58.2 {37} 9.0 2.7 0.0 0% 0.0 0.0 99.7 3.2 0.2 17% 0.0 0.1 0% 0
|
||||
59.2 {37} 3.0 2.7 0.0 0% 0.0 1.0 101.7 3.8 0.2 29% 0.0 0.0 0% 0
|
||||
60.2 {37} 6.0 2.7 0.0 0% 0.0 1.5 95.7 3.0 0.1 11% 0.0 0.1 0% 0
|
||||
61.2 {37} 26.9 7.1 0.1 0% 0.0 6.3 920.2 16.4 7.4 8% 0.0 0.3 1% 0
|
||||
62.2 {37} 9.0 8.0 0.0 0% 0.0 4.0 83.7 3.8 0.2 30% 0.0 0.1 0% 0
|
||||
63.2 {37} 3.0 10.7 0.0 0% 0.0 5.0 30.9 2.8 0.0 6% 0.0 0.1 0% 0
|
||||
64.2 {37} 3.0 2.7 0.0 0% 0.0 0.0 114.6 4.4 0.2 39% 0.0 0.1 0% 0
|
||||
65.2 {37} 9.0 2.7 0.0 0% 0.0 0.0 99.7 2.9 0.1 7% 0.0 0.2 0% 0
|
||||
66.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 7.0 17.1 0.1 63% 0.0 1.6 0% 0
|
||||
67.2 {37} 3.0 2.7 0.0 0% 0.0 1.0 123.6 4.3 0.3 37% 0.0 0.1 0% 0
|
||||
68.2 {37} 6.0 2.7 0.0 0% 0.0 0.0 114.7 2.9 0.2 7% 0.0 0.0 0% 0
|
||||
69.2 {37} 3.0 2.7 0.0 0% 0.0 1.0 76.7 4.1 0.2 34% 0.0 0.0 0% 0
|
||||
70.2 {37} 3.0 2.7 0.0 0% 0.0 0.0 42.9 2.8 0.1 4% 0.0 0.1 0% 0
|
||||
71.2 {37} 17.9 8.0 0.1 0% 0.0 7.3 843.6 18.7 7.7 7% 0.0 0.2 0% 0
|
||||
72.2 {37} 17.9 9.3 0.1 0% 0.0 5.2 72.7 3.8 0.1 30% 0.0 0.0 0% 0
|
||||
73.2 {37} 6.0 2.7 0.0 0% 0.0 2.0 74.8 3.7 0.1 29% 0.0 0.1 0% 0
|
||||
74.2 {37} 3.0 10.7 0.0 0% 0.0 7.0 84.7 4.8 0.2 44% 0.0 0.0 0% 0
|
||||
75.2 {37} 3.0 2.7 0.0 0% 0.0 0.0 26.9 3.3 0.0 18% 0.0 0.2 0% 0
|
||||
76.2 {37} 6.0 6.7 0.0 0% 0.0 3.5 132.6 3.7 0.2 20% 0.0 0.1 0% 0
|
||||
77.2 {37} 3.0 10.7 0.0 0% 0.0 6.0 83.8 4.4 0.2 39% 0.0 0.0 0% 0
|
||||
78.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 18.9 2.9 0.0 10% 0.0 0.1 0% 0
|
||||
79.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 135.6 6.7 0.4 60% 0.0 0.6 0% 0
|
||||
80.2 {37} 3.0 2.7 0.0 0% 0.0 0.0 44.9 3.0 0.1 12% 0.0 0.2 0% 0
|
||||
81.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 1065.8 14.5 7.5 8% 0.0 0.3 0% 0
|
||||
82.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 38.9 4.3 0.1 38% 0.0 0.2 0% 0
|
||||
83.3 {37} 3.0 2.7 0.0 0% 0.0 0.0 7.0 3.4 0.0 22% 0.0 0.6 0% 0
|
||||
84.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 77.8 4.9 0.2 46% 0.0 0.0 0% 0
|
||||
85.3 {37} 15.0 4.3 0.0 0% 0.0 1.2 102.7 3.0 0.2 12% 0.0 0.1 0% 0
|
||||
86.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 35.9 5.3 0.1 28% 0.0 0.4 0% 0
|
||||
87.3 {37} 3.0 10.7 0.0 0% 0.0 7.0 6.0 2.7 0.0 0% 0.0 0.0 0% 0
|
||||
88.3 {37} 12.0 2.7 0.0 0% 0.0 2.2 94.7 3.1 0.1 14% 0.0 0.1 0% 0
|
||||
89.3 {37} 3.0 2.7 0.0 0% 0.0 0.0 114.7 3.7 0.2 28% 0.0 0.1 0% 0
|
||||
90.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 31.9 4.5 0.1 41% 0.0 0.1 0% 0
|
||||
91.3 {37} 6.0 2.7 0.0 0% 0.0 0.5 775.5 18.9 7.2 6% 0.0 0.3 0% 0
|
||||
92.3 {37} 6.0 2.7 0.0 0% 0.0 0.0 71.7 3.1 0.1 14% 0.0 0.0 0% 0
|
||||
93.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 37.9 2.9 0.1 10% 0.0 0.1 0% 0
|
||||
94.3 {37} 9.0 5.3 0.0 0% 0.0 1.3 135.6 4.4 0.3 39% 0.0 0.0 0% 0
|
||||
95.3 {37} 3.0 2.7 0.0 0% 0.0 1.0 66.8 3.0 0.1 8% 0.0 0.0 0% 1
|
||||
96.3 {37} 3.0 2.7 0.0 0% 0.0 0.0 109.6 4.8 0.3 37% 0.0 0.1 0% 0
|
||||
97.3 {37} 9.0 2.7 0.0 0% 0.0 0.0 64.8 3.8 0.1 30% 0.0 0.1 0% 0
|
||||
98.3 {37} 35.9 2.7 0.0 0% 0.0 0.3 373.8 3.0 0.5 11% 0.0 0.1 0% 0
|
||||
99.3 {37} 12.0 6.7 0.0 0% 0.0 3.0 105.7 3.6 0.2 26% 0.0 0.1 0% 0
|
||||
100.3 {37} 9.0 2.7 0.0 0% 0.0 0.0 37.9 3.4 0.1 21% 0.0 0.0 0% 0
|
||||
101.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 789.5 19.1 7.4 13% 0.0 0.2 0% 0
|
||||
1.0 {37} 9.0 1.3 0.0 0% 0.0 0.0 995.0 7.5 7.3 6% 0.0 1.7 2% 0
|
||||
2.0 {37} 6.0 3.3 0.0 0% 0.0 3.0 46.9 2.1 0.1 37% 0.0 0.1 0% 0
|
||||
3.0 {37} 29.9 4.5 0.1 0% 0.0 3.5 57.8 1.5 0.1 12% 0.0 0.2 0% 0
|
||||
4.0 {37} 3.0 1.3 0.0 0% 0.0 1.0 113.7 2.4 0.3 44% 0.0 0.0 0% 0
|
||||
5.0 {37} 30.9 0.8 0.0 24% 0.0 5.9 79.8 1.5 0.1 11% 0.0 0.1 0% 0
|
||||
6.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 20.9 3.6 0.1 32% 0.0 0.2 0% 0
|
||||
7.0 {37} 15.0 5.3 0.1 0% 0.0 6.2 36.9 1.6 0.1 18% 0.0 0.2 0% 0
|
||||
8.0 {37} 9.0 4.0 0.0 0% 0.0 3.7 39.9 2.0 0.1 33% 0.0 0.0 0% 0
|
||||
9.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 73.8 1.9 0.1 31% 0.0 0.1 0% 0
|
||||
10.0 {37} 3.0 1.3 0.0 0% 0.0 4.0 31.9 1.5 0.0 11% 0.0 0.1 0% 0
|
||||
11.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 830.4 8.8 7.2 5% 0.0 0.2 0% 0
|
||||
12.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 17.0 1.6 0.0 19% 0.0 0.2 0% 0
|
||||
13.0 {37} 35.9 7.0 0.2 25% 0.0 2.7 19.9 2.0 0.0 33% 0.0 0.3 0% 0
|
||||
14.0 {37} 9.0 1.3 0.0 0% 0.0 0.0 137.6 2.3 0.3 42% 0.0 0.1 0% 0
|
||||
15.0 {37} 0.0 0.0 0.0 0% 0.0 0.0 37.9 1.5 0.1 10% 0.0 0.0 0% 0
|
||||
16.0 {37} 9.0 4.0 0.0 0% 0.0 4.3 55.8 2.5 0.1 34% 0.0 0.1 0% 0
|
||||
17.1 {37} 6.0 3.3 0.0 0% 0.0 3.0 62.8 1.7 0.1 22% 0.0 0.1 0% 0
|
||||
18.1 {37} 3.0 1.3 0.0 0% 0.0 0.0 25.9 1.8 0.0 28% 0.0 0.2 0% 0
|
||||
19.1 {37} 12.0 4.3 0.1 0% 0.0 4.0 97.7 1.9 0.2 29% 0.0 0.1 0% 0
|
||||
20.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 22.9 1.6 0.0 15% 0.0 0.1 0% 0
|
||||
21.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 769.6 9.5 7.2 6% 0.0 0.3 0% 0
|
||||
22.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 35.9 1.6 0.1 14% 0.0 0.2 0% 0
|
||||
23.1 {37} 3.0 1.3 0.0 0% 0.0 0.0 65.8 1.6 0.1 15% 0.0 0.0 0% 0
|
||||
24.1 {37} 3.0 1.3 0.0 0% 0.0 0.0 98.7 2.4 0.2 44% 0.0 0.0 0% 0
|
||||
25.1 {37} 9.0 1.3 0.0 0% 0.0 1.0 62.8 1.5 0.1 9% 0.0 0.3 0% 0
|
||||
26.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 85.7 2.5 0.2 38% 0.0 0.1 0% 0
|
||||
27.1 {37} 6.0 3.3 0.0 0% 0.0 5.5 55.8 1.6 0.1 15% 0.0 0.2 0% 0
|
||||
28.1 {37} 9.0 1.3 0.0 0% 0.0 0.3 76.7 1.5 0.1 11% 0.0 0.1 0% 0
|
||||
29.1 {37} 3.0 1.3 0.0 0% 0.0 0.0 62.8 2.3 0.1 43% 0.0 0.0 0% 0
|
||||
30.1 {37} 20.9 5.3 0.1 0% 0.0 5.6 16.9 1.6 0.0 19% 0.0 0.2 0% 0
|
||||
31.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 897.3 8.3 7.2 8% 0.0 0.2 0% 0
|
||||
32.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 14.0 1.7 0.0 22% 0.0 0.2 0% 0
|
||||
33.1 {37} 41.9 4.8 0.2 0% 0.0 4.4 62.8 2.0 0.1 32% 0.0 0.1 1% 0
|
||||
34.1 {37} 6.0 2.7 0.0 0% 0.0 5.5 82.8 2.6 0.2 48% 0.0 0.0 0% 0
|
||||
35.1 {37} 6.0 3.3 0.0 0% 0.0 1.5 36.9 1.6 0.1 18% 0.0 0.2 0% 0
|
||||
36.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 82.7 2.4 0.2 36% 0.0 0.7 0% 0
|
||||
37.1 {37} 29.9 4.0 0.1 0% 0.0 2.9 72.8 1.5 0.1 10% 0.0 0.1 0% 0
|
||||
38.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 26.9 1.6 0.0 18% 0.0 0.2 0% 0
|
||||
39.1 {37} 17.9 4.0 0.1 0% 0.0 4.7 104.7 2.1 0.2 36% 0.0 0.1 0% 0
|
||||
40.1 {37} 9.0 4.0 0.0 0% 0.0 4.0 45.9 1.6 0.1 15% 0.0 0.1 0% 0
|
||||
41.1 {37} 0.0 0.0 0.0 0% 0.0 0.0 796.5 8.2 6.4 7% 0.0 0.2 0% 0
|
||||
42.1 {37} 6.0 1.3 0.0 0% 0.0 2.0 60.8 1.5 0.1 12% 0.0 0.1 0% 0
|
||||
43.1 {37} 9.0 4.0 0.0 0% 0.0 3.0 42.9 1.6 0.1 16% 0.0 0.1 0% 0
|
||||
44.1 {37} 6.0 5.3 0.0 0% 0.0 6.0 96.7 2.0 0.2 34% 0.0 0.0 0% 0
|
||||
45.1 {37} 3.0 1.3 0.0 0% 0.0 0.0 55.8 1.6 0.1 15% 0.0 0.1 0% 0
|
||||
46.1 {37} 3.0 1.3 0.0 0% 0.0 0.0 166.5 1.9 0.3 22% 0.0 0.3 0% 0
|
||||
47.1 {37} 3.0 1.3 0.0 0% 0.0 1.0 41.9 1.5 0.1 12% 0.0 0.1 0% 0
|
||||
48.1 {37} 6.0 1.3 0.0 0% 0.0 0.0 45.9 1.6 0.1 15% 0.0 0.2 0% 0
|
||||
49.2 {37} 15.0 5.3 0.1 0% 0.0 4.8 48.9 2.2 0.1 40% 0.0 0.0 0% 0
|
||||
50.2 {37} 9.0 5.3 0.0 0% 0.0 5.7 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
51.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 673.0 8.6 5.7 8% 0.0 0.3 0% 0
|
||||
52.2 {37} 6.0 1.3 0.0 0% 0.0 0.5 55.8 1.4 0.1 7% 0.0 0.1 0% 0
|
||||
53.2 {37} 26.9 3.6 0.1 0% 0.0 5.4 57.8 1.7 0.1 19% 0.0 0.1 0% 0
|
||||
54.2 {37} 3.0 1.3 0.0 0% 0.0 0.0 89.7 2.5 0.2 46% 0.0 0.1 0% 0
|
||||
55.2 {37} 15.0 4.5 0.1 0% 0.0 4.2 51.8 1.8 0.1 28% 0.0 0.1 0% 0
|
||||
56.2 {37} 26.9 4.9 0.1 0% 0.0 4.6 79.8 2.0 0.2 18% 0.0 0.4 0% 0
|
||||
57.2 {37} 15.0 3.7 0.1 0% 0.0 4.2 106.7 1.8 0.2 24% 0.0 0.1 0% 0
|
||||
58.2 {37} 9.0 1.3 0.0 0% 0.0 0.0 99.7 1.6 0.2 17% 0.0 0.1 0% 0
|
||||
59.2 {37} 3.0 1.3 0.0 0% 0.0 1.0 101.7 1.9 0.2 29% 0.0 0.0 0% 0
|
||||
60.2 {37} 6.0 1.3 0.0 0% 0.0 1.5 95.7 1.5 0.1 11% 0.0 0.1 0% 0
|
||||
61.2 {37} 26.9 3.6 0.1 0% 0.0 6.3 920.2 8.2 7.4 8% 0.0 0.3 1% 0
|
||||
62.2 {37} 9.0 4.0 0.0 0% 0.0 4.0 83.7 1.9 0.2 30% 0.0 0.1 0% 0
|
||||
63.2 {37} 3.0 5.3 0.0 0% 0.0 5.0 30.9 1.4 0.0 6% 0.0 0.1 0% 0
|
||||
64.2 {37} 3.0 1.3 0.0 0% 0.0 0.0 114.6 2.2 0.2 39% 0.0 0.1 0% 0
|
||||
65.2 {37} 9.0 1.3 0.0 0% 0.0 0.0 99.7 1.4 0.1 7% 0.0 0.2 0% 0
|
||||
66.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 7.0 8.6 0.1 63% 0.0 1.6 0% 0
|
||||
67.2 {37} 3.0 1.3 0.0 0% 0.0 1.0 123.6 2.1 0.3 37% 0.0 0.1 0% 0
|
||||
68.2 {37} 6.0 1.3 0.0 0% 0.0 0.0 114.7 1.4 0.2 7% 0.0 0.0 0% 0
|
||||
69.2 {37} 3.0 1.3 0.0 0% 0.0 1.0 76.7 2.0 0.2 34% 0.0 0.0 0% 0
|
||||
70.2 {37} 3.0 1.3 0.0 0% 0.0 0.0 42.9 1.4 0.1 4% 0.0 0.1 0% 0
|
||||
71.2 {37} 17.9 4.0 0.1 0% 0.0 7.3 843.6 9.3 7.7 7% 0.0 0.2 0% 0
|
||||
72.2 {37} 17.9 4.7 0.1 0% 0.0 5.2 72.7 1.9 0.1 30% 0.0 0.0 0% 0
|
||||
73.2 {37} 6.0 1.3 0.0 0% 0.0 2.0 74.8 1.9 0.1 29% 0.0 0.1 0% 0
|
||||
74.2 {37} 3.0 5.3 0.0 0% 0.0 7.0 84.7 2.4 0.2 44% 0.0 0.0 0% 0
|
||||
75.2 {37} 3.0 1.3 0.0 0% 0.0 0.0 26.9 1.6 0.0 18% 0.0 0.2 0% 0
|
||||
76.2 {37} 6.0 3.3 0.0 0% 0.0 3.5 132.6 1.9 0.2 20% 0.0 0.1 0% 0
|
||||
77.2 {37} 3.0 5.3 0.0 0% 0.0 6.0 83.8 2.2 0.2 39% 0.0 0.0 0% 0
|
||||
78.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 18.9 1.5 0.0 10% 0.0 0.1 0% 0
|
||||
79.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 135.6 3.4 0.4 60% 0.0 0.6 0% 0
|
||||
80.2 {37} 3.0 1.3 0.0 0% 0.0 0.0 44.9 1.5 0.1 12% 0.0 0.2 0% 0
|
||||
81.2 {37} 0.0 0.0 0.0 0% 0.0 0.0 1065.8 7.2 7.5 8% 0.0 0.3 0% 0
|
||||
82.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 38.9 2.2 0.1 38% 0.0 0.2 0% 0
|
||||
83.3 {37} 3.0 1.3 0.0 0% 0.0 0.0 7.0 1.7 0.0 22% 0.0 0.6 0% 0
|
||||
84.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 77.8 2.5 0.2 46% 0.0 0.0 0% 0
|
||||
85.3 {37} 15.0 2.1 0.0 0% 0.0 1.2 102.7 1.5 0.2 12% 0.0 0.1 0% 0
|
||||
86.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 35.9 2.7 0.1 28% 0.0 0.4 0% 0
|
||||
87.3 {37} 3.0 5.3 0.0 0% 0.0 7.0 6.0 1.3 0.0 0% 0.0 0.0 0% 0
|
||||
88.3 {37} 12.0 1.3 0.0 0% 0.0 2.2 94.7 1.6 0.1 14% 0.0 0.1 0% 0
|
||||
89.3 {37} 3.0 1.3 0.0 0% 0.0 0.0 114.7 1.8 0.2 28% 0.0 0.1 0% 0
|
||||
90.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 31.9 2.2 0.1 41% 0.0 0.1 0% 0
|
||||
91.3 {37} 6.0 1.3 0.0 0% 0.0 0.5 775.5 9.4 7.2 6% 0.0 0.3 0% 0
|
||||
92.3 {37} 6.0 1.3 0.0 0% 0.0 0.0 71.7 1.6 0.1 14% 0.0 0.0 0% 0
|
||||
93.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 37.9 1.5 0.1 10% 0.0 0.1 0% 0
|
||||
94.3 {37} 9.0 2.7 0.0 0% 0.0 1.3 135.6 2.2 0.3 39% 0.0 0.0 0% 0
|
||||
95.3 {37} 3.0 1.3 0.0 0% 0.0 1.0 66.8 1.5 0.1 8% 0.0 0.0 0% 1
|
||||
96.3 {37} 3.0 1.3 0.0 0% 0.0 0.0 109.6 2.4 0.3 37% 0.0 0.1 0% 0
|
||||
97.3 {37} 9.0 1.3 0.0 0% 0.0 0.0 64.8 1.9 0.1 30% 0.0 0.1 0% 0
|
||||
98.3 {37} 35.9 1.3 0.0 0% 0.0 0.3 373.8 1.5 0.5 11% 0.0 0.1 0% 0
|
||||
99.3 {37} 12.0 3.3 0.0 0% 0.0 3.0 105.7 1.8 0.2 26% 0.0 0.1 0% 0
|
||||
100.3 {37} 9.0 1.3 0.0 0% 0.0 0.0 37.9 1.7 0.1 21% 0.0 0.0 0% 0
|
||||
101.3 {37} 0.0 0.0 0.0 0% 0.0 0.0 789.5 9.6 7.4 13% 0.0 0.2 0% 0
|
||||
|
@@ -1,280 +1,280 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 {41} 0.0 0.0 0.0 0% 0.0 0.0 7789.4 31.8 120.8 0% 0.1 0.4 7% 3
|
||||
2.0 {41} 0.0 0.0 0.0 0% 0.0 0.0 8473.2 31.7 131.2 0% 0.1 0.3 7% 0
|
||||
3.0 {41} 8272.4 31.8 128.6 1% 0.0 0.2 4179.1 31.7 64.8 0% 0.0 0.3 7% 3
|
||||
4.0 {41} 17777.7 31.9 277.1 1% 0.1 0.1 43.9 5.5 0.1 51% 0.0 0.0 6% 2
|
||||
5.0 {41} 18300.9 31.9 285.2 1% 0.1 0.1 52.8 5.9 0.2 55% 0.0 0.0 6% 3
|
||||
6.0 {41} 17281.0 31.9 269.3 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
7.0 {41} 17603.8 31.9 274.3 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
8.0 {41} 17619.4 31.9 274.5 1% 0.1 0.1 7.0 10.3 0.0 22% 0.0 0.0 6% 2
|
||||
9.0 {41} 17839.1 31.9 278.0 1% 0.1 0.1 33.9 4.7 0.1 43% 0.0 0.0 6% 3
|
||||
10.0 {41} 17781.0 31.9 277.1 1% 0.1 0.1 14.0 5.7 0.0 53% 0.0 0.0 6% 0
|
||||
11.0 {41} 18684.1 31.9 291.1 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 1
|
||||
12.0 {41} 18831.8 31.9 293.4 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 1
|
||||
13.0 {41} 18754.0 31.9 292.3 1% 0.1 0.1 7.0 10.3 0.0 22% 0.0 0.0 6% 2
|
||||
14.0 {41} 18092.7 31.9 281.9 1% 0.1 0.1 41.9 5.7 0.1 42% 0.0 0.1 6% 3
|
||||
15.0 {41} 18401.6 31.9 286.8 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 2
|
||||
16.0 {41} 18064.0 31.9 281.5 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
17.1 {41} 16559.3 31.9 258.1 1% 0.1 0.2 0.0 0.0 0.0 0% 0.0 0.0 6% 1
|
||||
18.1 {41} 16931.6 31.9 263.8 1% 0.1 0.2 60.8 5.9 0.2 55% 0.0 0.0 6% 2
|
||||
19.1 {41} 18161.7 31.9 283.0 1% 0.1 0.1 53.8 5.0 0.1 36% 0.0 0.0 6% 3
|
||||
20.1 {41} 18438.4 31.9 287.4 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
21.1 {41} 17784.3 31.9 277.1 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 0
|
||||
22.1 {41} 17303.6 31.9 269.6 1% 0.1 0.2 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
23.1 {41} 18677.5 31.9 291.0 1% 0.1 0.1 482.5 7.6 1.8 6% 0.0 1.7 6% 3
|
||||
24.1 {41} 18999.5 31.9 296.1 1% 0.1 0.1 46.9 5.6 0.1 42% 0.0 0.0 6% 3
|
||||
25.1 {41} 7754.9 31.9 120.9 1% 0.1 0.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
26.1 {41} 1183.4 31.9 18.5 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
27.1 {41} 1235.3 31.8 19.2 1% 0.1 2.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
28.1 {41} 1152.5 31.9 18.0 0% 0.1 2.6 78.8 3.3 0.1 20% 0.0 0.2 7% 0
|
||||
29.1 {41} 1162.4 31.9 18.1 1% 0.1 2.6 35.9 4.9 0.1 45% 0.0 0.0 7% 3
|
||||
30.1 {41} 1159.5 31.9 18.1 0% 0.1 2.6 7.0 10.3 0.0 22% 0.0 0.0 7% 2
|
||||
31.1 {41} 1168.5 31.9 18.2 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
32.1 {41} 1099.6 31.9 17.2 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
33.1 {41} 1147.6 31.8 17.8 1% 0.1 2.6 8.0 4.0 0.0 33% 0.0 1.0 7% 3
|
||||
34.1 {41} 1175.4 32.0 18.4 0% 0.1 2.5 51.8 4.6 0.1 42% 0.0 0.0 7% 3
|
||||
35.1 {41} 1160.5 32.0 18.1 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
36.1 {41} 1240.2 31.9 19.3 0% 0.1 2.4 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
37.1 {41} 1058.8 31.8 16.5 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
38.1 {41} 1109.6 31.9 17.3 1% 0.1 2.7 6.0 2.7 0.0 0% 0.0 3.0 7% 0
|
||||
39.1 {41} 1225.2 31.9 19.1 1% 0.1 2.4 48.9 5.1 0.1 47% 0.0 0.0 7% 3
|
||||
40.1 {41} 1175.4 31.9 18.3 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 0
|
||||
41.1 {41} 865.5 32.0 13.5 0% 0.1 2.7 2.0 8.0 0.0 50% 0.0 0.0 7% 7
|
||||
42.1 {41} 959.1 31.9 15.0 0% 0.1 3.7 5.0 11.2 0.0 0% 0.0 147.6 7% 3
|
||||
43.1 {41} 1062.8 31.9 16.5 1% 0.1 2.8 139.6 3.4 0.2 22% 0.0 0.0 7% 3
|
||||
44.1 {41} 1079.7 32.0 16.9 0% 0.1 2.7 53.8 4.7 0.1 44% 0.0 0.0 7% 3
|
||||
45.1 {41} 1099.6 31.9 17.2 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
46.1 {41} 1126.7 31.9 17.6 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
47.1 {41} 1033.8 31.9 16.1 0% 0.1 2.9 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
48.1 {41} 1049.8 31.8 16.3 1% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
49.1 {41} 1080.8 31.7 16.7 2% 0.1 2.8 83.7 5.3 0.2 50% 0.0 0.0 7% 3
|
||||
50.2 {41} 1067.7 32.0 16.7 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
51.2 {41} 1183.4 31.9 18.5 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
52.2 {41} 1109.7 32.0 17.3 0% 0.1 2.7 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
53.2 {41} 1116.6 31.9 17.4 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
54.2 {41} 1111.7 31.9 17.3 0% 0.1 2.7 93.7 5.3 0.2 49% 0.0 0.0 7% 3
|
||||
55.2 {41} 1125.6 31.9 17.5 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
56.2 {41} 1050.8 31.9 16.4 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
57.2 {41} 1134.7 31.7 17.6 2% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
58.2 {41} 1143.4 31.9 17.8 1% 0.1 2.6 13.0 6.8 0.0 13% 0.0 1.8 7% 3
|
||||
59.2 {41} 1170.5 31.9 18.2 1% 0.1 2.5 104.7 5.0 0.3 46% 0.0 0.0 7% 3
|
||||
60.2 {41} 1124.6 32.0 17.6 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
61.2 {41} 1127.6 31.8 17.5 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
62.2 {41} 1064.7 32.0 16.6 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
63.2 {41} 1132.7 31.9 17.7 0% 0.1 2.6 13.0 3.1 0.0 13% 0.0 0.5 7% 3
|
||||
64.2 {41} 1114.6 31.9 17.4 0% 0.1 2.7 56.8 5.8 0.2 46% 0.0 0.0 7% 3
|
||||
65.2 {41} 1141.5 31.9 17.8 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
66.2 {41} 1113.7 31.9 17.3 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
67.2 {41} 1169.4 31.8 18.2 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
68.2 {41} 1119.6 31.9 17.4 1% 0.1 2.7 5.0 4.8 0.0 44% 0.0 4.0 7% 3
|
||||
69.2 {41} 1130.5 32.0 17.7 0% 0.1 2.6 40.9 5.7 0.1 41% 0.0 0.0 7% 3
|
||||
70.2 {41} 1160.5 32.0 18.1 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
71.2 {41} 1111.7 31.9 17.3 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
72.2 {41} 1156.4 31.8 17.9 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
73.2 {41} 1145.4 31.8 17.8 1% 0.1 2.6 18.9 5.5 0.1 51% 0.0 1.6 7% 3
|
||||
74.2 {41} 1098.8 31.9 17.1 1% 0.1 2.7 36.9 4.1 0.1 35% 0.0 0.0 7% 3
|
||||
75.2 {41} 1071.7 31.9 16.7 1% 0.1 2.7 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
76.2 {41} 1111.6 31.9 17.3 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
77.2 {41} 1064.9 32.0 16.6 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
78.2 {41} 1001.0 31.9 15.6 0% 0.1 3.0 17.9 5.3 0.0 50% 0.0 0.7 7% 3
|
||||
79.2 {41} 1023.9 31.9 15.9 1% 0.1 2.9 38.9 4.3 0.1 38% 0.0 0.0 7% 3
|
||||
80.2 {41} 1098.7 31.9 17.1 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 1
|
||||
81.2 {41} 1078.7 31.9 16.8 0% 0.1 2.7 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
82.2 {41} 1064.8 32.0 16.6 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
83.3 {41} 1151.5 32.0 18.0 0% 0.1 2.5 18.9 5.5 0.1 51% 0.0 0.3 7% 3
|
||||
84.3 {41} 1114.6 31.9 17.4 0% 0.1 2.6 37.9 4.2 0.1 37% 0.0 0.0 7% 3
|
||||
85.3 {41} 1059.8 31.9 16.5 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
86.3 {41} 1072.7 31.9 16.7 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
87.3 {41} 1093.7 31.9 17.1 0% 0.1 2.7 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
88.3 {41} 1126.6 31.9 17.6 0% 0.1 2.6 21.9 5.1 0.1 48% 0.0 1.1 7% 3
|
||||
89.3 {41} 1161.5 31.9 18.1 1% 0.1 2.6 34.9 4.3 0.1 39% 0.0 0.0 7% 3
|
||||
90.3 {41} 1140.5 31.9 17.8 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
91.3 {41} 1149.6 31.9 17.9 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
92.3 {41} 1187.3 31.8 18.5 1% 0.1 2.5 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
93.3 {41} 1009.0 31.9 15.7 1% 0.1 2.9 12.0 2.7 0.0 0% 0.0 0.0 7% 3
|
||||
94.3 {41} 1193.4 31.8 18.6 1% 0.1 2.4 58.8 4.5 0.1 40% 0.0 0.0 7% 3
|
||||
95.3 {41} 1143.5 31.9 17.8 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
96.3 {41} 1164.4 31.9 18.1 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
97.3 {41} 1168.6 31.9 18.2 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
98.3 {41} 1139.5 31.8 17.7 1% 0.1 2.6 15.0 6.9 0.1 29% 0.0 1.6 7% 3
|
||||
99.3 {41} 1170.5 31.9 18.2 1% 0.1 2.5 53.8 4.4 0.1 40% 0.0 0.0 7% 3
|
||||
100.3 {41} 1145.5 32.0 17.9 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
101.3 {41} 1097.7 32.0 17.2 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
102.3 {41} 1158.4 31.9 18.0 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
103.3 {41} 1167.5 31.9 18.2 1% 0.1 2.5 12.0 8.0 0.0 33% 0.0 2.5 7% 3
|
||||
104.3 {41} 1268.2 31.8 19.7 1% 0.1 2.3 52.8 5.0 0.1 46% 0.0 0.0 7% 3
|
||||
105.3 {41} 1162.5 31.9 18.1 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
106.3 {41} 1219.3 31.9 19.0 0% 0.1 2.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
107.3 {41} 709.8 31.8 11.0 1% 0.1 4.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
108.3 {41} 983.8 32.0 15.4 0% 0.1 3.0 11.0 8.0 0.0 27% 0.0 1.5 7% 3
|
||||
109.3 {41} 989.0 31.7 15.3 1% 0.1 3.0 150.4 6.1 0.4 56% 0.0 0.1 7% 3
|
||||
110.3 {41} 972.2 32.0 15.2 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
111.3 {41} 1053.8 31.9 16.4 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
112.3 {41} 972.1 32.0 15.2 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
113.3 {41} 968.0 31.9 15.1 0% 0.1 3.0 16.9 3.3 0.0 19% 0.0 1.1 7% 3
|
||||
114.3 {41} 976.1 31.9 15.2 1% 0.1 3.0 66.8 5.9 0.2 48% 0.0 0.0 7% 3
|
||||
115.3 {41} 1030.9 31.9 16.1 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
116.4 {41} 1025.9 32.0 16.0 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
117.4 {41} 1013.8 32.0 15.8 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
118.4 {41} 1019.0 31.9 15.9 0% 0.1 2.9 5.0 4.8 0.0 44% 0.0 4.0 7% 3
|
||||
119.4 {41} 997.9 31.9 15.6 0% 0.1 2.9 91.7 5.6 0.2 52% 0.0 0.0 7% 3
|
||||
120.4 {41} 1062.8 31.9 16.5 1% 0.1 2.8 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
121.4 {41} 988.1 31.9 15.4 1% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
122.4 {41} 1048.8 31.9 16.4 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
123.4 {41} 970.1 31.7 15.0 2% 0.1 3.1 4.0 4.0 0.0 33% 0.0 2.0 7% 0
|
||||
124.4 {41} 1013.8 31.6 15.6 3% 0.1 2.9 56.8 4.4 0.1 39% 0.0 0.0 7% 3
|
||||
125.4 {41} 1049.9 32.0 16.4 0% 0.1 2.8 14.0 6.9 0.0 22% 0.0 0.0 7% 3
|
||||
126.4 {41} 1053.8 31.9 16.4 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
127.4 {41} 995.0 31.7 15.4 2% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
128.4 {41} 1026.8 31.9 16.0 1% 0.1 2.9 15.0 2.7 0.0 0% 0.0 1.2 7% 3
|
||||
129.4 {41} 1035.9 31.9 16.1 1% 0.1 2.8 37.9 4.2 0.1 37% 0.0 0.0 7% 3
|
||||
130.4 {41} 1045.8 31.9 16.3 0% 0.1 2.8 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
131.4 {41} 1020.9 31.9 15.9 1% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
132.4 {41} 1051.8 31.9 16.4 0% 0.1 2.8 83.7 3.0 0.1 12% 0.0 0.0 7% 3
|
||||
133.4 {41} 990.0 31.8 15.4 1% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
134.4 {41} 1032.7 31.9 16.1 1% 0.1 2.9 33.9 4.7 0.1 43% 0.0 0.0 7% 3
|
||||
135.4 {41} 1011.0 31.8 15.7 1% 0.1 2.9 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
136.4 {41} 957.2 32.0 15.0 0% 0.1 3.1 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
137.4 {41} 966.0 32.0 15.1 0% 0.1 3.0 133.6 3.6 0.2 26% 0.0 0.2 7% 3
|
||||
138.4 {41} 1098.7 31.9 17.1 1% 0.1 2.6 58.8 6.1 0.2 56% 0.0 0.0 7% 3
|
||||
139.4 {41} 903.3 32.0 14.1 0% 0.1 3.2 33.9 4.7 0.1 43% 0.0 0.0 7% 3
|
||||
140.4 {41} 969.0 32.0 15.1 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
141.4 {41} 997.0 31.9 15.5 1% 0.1 3.0 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
142.4 {41} 953.1 31.9 14.9 0% 0.1 3.1 8.0 4.0 0.0 33% 0.0 1.0 7% 3
|
||||
143.4 {41} 1047.8 31.8 16.3 1% 0.1 2.8 14.0 5.7 0.0 53% 0.0 0.0 7% 3
|
||||
144.4 {41} 983.0 31.9 15.3 0% 0.1 3.0 37.9 4.2 0.1 37% 0.0 0.0 7% 3
|
||||
145.4 {41} 1047.9 31.9 16.3 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
146.4 {41} 978.0 32.0 15.3 0% 0.1 3.0 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
147.4 {41} 1017.0 32.0 15.9 0% 0.1 2.9 4.0 4.0 0.0 33% 0.0 5.0 7% 3
|
||||
148.4 {41} 998.0 31.9 15.6 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
149.5 {41} 1111.6 31.9 17.3 0% 0.1 2.6 51.8 4.6 0.1 42% 0.0 0.0 7% 3
|
||||
150.5 {41} 983.0 31.9 15.3 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
151.5 {41} 1042.9 31.9 16.3 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
152.5 {41} 1078.7 31.9 16.8 0% 0.1 2.7 12.0 8.0 0.0 33% 0.0 0.4 7% 3
|
||||
153.5 {41} 969.0 31.9 15.1 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
154.5 {41} 995.1 31.9 15.5 0% 0.1 2.9 47.9 5.0 0.1 47% 0.0 0.0 7% 3
|
||||
155.5 {41} 1075.6 31.9 16.8 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
156.5 {41} 1115.7 31.8 17.3 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
157.5 {41} 1045.8 31.9 16.3 0% 0.1 2.8 35.9 4.4 0.1 14% 0.0 0.5 7% 3
|
||||
158.5 {41} 1017.0 31.8 15.8 1% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
159.5 {41} 1040.8 31.7 16.1 1% 0.1 2.8 33.9 4.7 0.1 43% 0.0 0.0 7% 3
|
||||
160.5 {41} 1048.8 31.9 16.4 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
161.5 {41} 943.2 31.9 14.7 1% 0.1 3.1 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
162.5 {41} 1039.9 31.9 16.2 0% 0.1 2.8 18.9 6.3 0.1 30% 0.0 1.3 7% 3
|
||||
163.5 {41} 1013.9 32.0 15.8 0% 0.1 2.9 19.9 4.8 0.0 44% 0.0 0.0 7% 3
|
||||
164.5 {41} 1078.7 31.8 16.7 1% 0.1 2.7 35.9 4.4 0.1 40% 0.0 0.0 7% 3
|
||||
165.5 {41} 1028.9 32.0 16.1 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
166.5 {41} 1134.7 31.9 17.7 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
167.5 {41} 900.2 32.0 14.1 0% 0.1 3.3 12.0 8.0 0.0 33% 0.0 1.7 7% 3
|
||||
168.5 {41} 1080.8 31.9 16.8 1% 0.1 2.7 14.0 5.7 0.0 53% 0.0 0.0 7% 3
|
||||
169.5 {41} 1079.7 32.0 16.9 0% 0.1 2.7 66.8 5.6 0.2 52% 0.0 0.0 7% 3
|
||||
170.5 {41} 1076.7 32.0 16.8 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
171.5 {41} 1016.9 32.0 15.9 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
172.5 {41} 628.1 32.0 9.8 0% 0.1 4.7 38.9 4.3 0.1 13% 0.0 1.0 7% 3
|
||||
173.5 {41} 945.2 32.0 14.8 0% 0.1 3.1 38.9 5.9 0.1 55% 0.0 0.0 7% 3
|
||||
174.5 {41} 888.2 31.9 13.8 0% 0.1 3.4 33.9 4.7 0.1 43% 0.0 0.0 7% 3
|
||||
175.5 {41} 935.2 31.9 14.6 0% 0.1 3.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
176.5 {41} 894.2 32.0 14.0 0% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
177.5 {41} 892.4 31.9 13.9 1% 0.1 3.3 23.9 5.3 0.1 20% 0.0 0.2 7% 3
|
||||
178.5 {41} 915.2 32.0 14.3 0% 0.1 3.2 19.9 5.6 0.1 52% 0.0 0.0 7% 3
|
||||
179.5 {41} 908.2 31.9 14.2 0% 0.1 3.2 66.8 4.7 0.2 43% 0.0 0.0 7% 3
|
||||
180.5 {41} 912.3 32.0 14.3 0% 0.1 3.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
181.5 {41} 892.3 31.9 13.9 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
182.6 {41} 909.3 31.8 14.1 1% 0.1 3.3 4.0 4.0 0.0 33% 0.0 1.0 7% 3
|
||||
183.6 {41} 890.3 31.9 13.9 0% 0.1 3.3 20.9 7.2 0.1 46% 0.0 0.0 7% 3
|
||||
184.6 {41} 927.2 32.0 14.5 0% 0.1 3.2 37.9 4.2 0.1 37% 0.0 0.0 7% 3
|
||||
185.6 {41} 954.1 31.8 14.8 1% 0.1 3.1 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
186.6 {41} 924.1 32.0 14.4 0% 0.1 3.2 7.0 3.4 0.0 22% 0.0 0.0 7% 2
|
||||
187.6 {41} 942.3 31.9 14.7 0% 0.1 3.2 25.9 3.7 0.0 28% 0.0 0.2 7% 3
|
||||
188.6 {41} 951.1 32.0 14.9 0% 0.1 3.1 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
189.6 {41} 939.2 31.9 14.6 1% 0.1 3.2 84.8 5.6 0.2 52% 0.0 0.0 7% 3
|
||||
190.6 {41} 929.2 31.9 14.5 0% 0.1 3.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
191.6 {41} 915.1 31.8 14.2 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
192.6 {41} 883.4 31.9 13.7 1% 0.1 3.4 17.9 3.6 0.0 25% 0.0 0.0 7% 3
|
||||
193.6 {41} 908.2 31.9 14.2 0% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
194.6 {41} 944.2 31.9 14.7 0% 0.1 3.1 70.8 5.3 0.2 42% 0.0 0.0 7% 3
|
||||
195.6 {41} 885.3 32.0 13.8 0% 0.1 3.3 19.9 3.2 0.0 17% 0.0 0.4 7% 3
|
||||
196.6 {41} 856.4 31.9 13.3 1% 0.1 3.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
197.6 {41} 936.1 32.0 14.6 0% 0.1 3.2 6.0 2.7 0.0 0% 0.0 2.0 7% 3
|
||||
198.6 {41} 876.4 32.0 13.7 0% 0.1 3.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
199.6 {41} 870.4 32.0 13.6 0% 0.1 3.4 138.6 5.0 0.3 43% 0.0 0.0 7% 3
|
||||
200.6 {41} 816.5 32.0 12.8 0% 0.1 3.6 14.0 3.4 0.0 22% 0.0 0.0 7% 3
|
||||
201.6 {41} 875.4 31.9 13.6 0% 0.1 3.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
202.6 {41} 861.4 32.0 13.5 0% 0.1 3.4 12.0 2.7 0.0 0% 0.0 0.0 7% 3
|
||||
203.6 {41} 880.3 31.9 13.7 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
204.6 {41} 889.3 31.9 13.8 1% 0.1 3.4 80.8 5.2 0.2 49% 0.0 0.0 7% 3
|
||||
205.6 {41} 890.3 31.8 13.8 0% 0.1 3.3 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
206.6 {41} 904.2 31.9 14.1 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
207.6 {41} 914.2 31.9 14.3 0% 0.1 3.2 140.6 2.9 0.2 8% 0.0 0.1 7% 3
|
||||
208.6 {41} 870.3 32.0 13.6 0% 0.1 3.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
209.6 {41} 915.3 32.0 14.3 0% 0.1 3.2 94.7 5.6 0.3 53% 0.0 0.0 7% 3
|
||||
210.6 {41} 910.2 31.9 14.2 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
211.6 {41} 840.5 32.0 13.1 0% 0.1 3.6 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
212.6 {41} 825.5 32.0 12.9 0% 0.1 3.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
213.6 {41} 902.3 31.9 14.1 0% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
214.6 {41} 867.3 32.0 13.6 0% 0.1 3.4 48.8 5.1 0.1 47% 0.0 0.0 7% 3
|
||||
215.7 {41} 470.6 31.9 7.3 1% 0.0 3.2 4699.9 31.7 72.7 0% 0.0 0.3 7% 3
|
||||
216.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 7156.8 31.8 111.2 0% 0.1 0.4 7% 3
|
||||
217.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8693.3 31.7 134.7 0% 0.1 0.3 7% 3
|
||||
218.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8380.8 31.7 129.6 0% 0.1 0.3 7% 3
|
||||
219.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8537.4 31.6 131.7 0% 0.1 0.3 7% 3
|
||||
220.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8527.5 31.8 132.4 0% 0.1 0.3 7% 3
|
||||
221.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8634.8 31.7 133.5 0% 0.1 0.3 7% 3
|
||||
222.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 7966.8 31.7 123.4 0% 0.1 0.4 7% 3
|
||||
223.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 7058.2 31.8 109.6 0% 0.1 0.4 7% 3
|
||||
224.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8259.4 31.5 127.2 0% 0.1 0.4 7% 2
|
||||
225.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 4491.6 31.7 69.5 0% 0.1 0.7 7% 2
|
||||
226.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 3500.2 31.8 54.3 0% 0.1 0.8 7% 3
|
||||
227.7 {41} 30.9 32.0 0.5 0% 0.1 81.8 3201.0 31.7 49.6 0% 0.1 0.9 7% 6
|
||||
228.7 {41} 38.9 32.0 0.6 0% 0.1 75.8 3117.3 31.5 48.0 1% 0.1 1.0 7% 4
|
||||
229.7 {41} 44.8 32.0 0.7 0% 0.1 67.7 3538.4 30.8 53.2 5% 0.1 0.8 7% 6
|
||||
230.7 {41} 50.8 32.0 0.8 0% 0.1 57.8 2264.2 31.8 35.2 0% 0.1 1.3 7% 6
|
||||
231.7 {41} 44.9 32.0 0.7 0% 0.1 68.1 2961.0 31.7 45.9 0% 0.1 1.0 7% 6
|
||||
232.7 {41} 46.9 30.6 0.7 8% 0.1 60.7 3194.0 31.8 49.6 0% 0.1 0.9 7% 6
|
||||
233.7 {41} 76.8 31.2 1.2 5% 0.1 38.5 2944.5 31.4 45.1 1% 0.1 1.0 7% 6
|
||||
234.7 {41} 76.8 31.2 1.2 5% 0.1 39.8 3111.4 31.0 47.1 1% 0.1 0.9 7% 6
|
||||
235.7 {41} 53.8 32.0 0.8 0% 0.1 58.5 3687.5 31.5 56.8 0% 0.1 0.8 7% 6
|
||||
236.7 {41} 41.9 32.0 0.7 0% 0.1 71.1 3751.2 31.7 58.1 0% 0.1 0.8 7% 6
|
||||
237.7 {41} 71.8 32.0 1.1 0% 0.1 40.9 3991.6 31.5 61.4 0% 0.1 0.7 7% 6
|
||||
238.7 {41} 50.8 29.2 0.7 0% 0.1 60.7 4059.9 31.8 63.0 1% 0.1 0.7 7% 5
|
||||
239.7 {41} 62.8 30.9 0.9 0% 0.1 45.7 3018.6 31.5 46.4 1% 0.1 0.9 7% 6
|
||||
240.7 {41} 41.9 32.0 0.7 0% 0.1 72.6 2635.0 31.7 40.8 0% 0.1 1.2 7% 6
|
||||
241.7 {41} 59.8 32.0 0.9 0% 0.1 50.7 6406.8 31.9 99.6 0% 0.1 0.5 7% 6
|
||||
242.7 {41} 50.8 32.0 0.8 0% 0.1 55.9 3674.9 31.2 56.0 0% 0.1 0.7 7% 6
|
||||
243.7 {41} 59.8 32.0 0.9 0% 0.1 50.5 4738.7 31.6 73.2 0% 0.1 0.7 7% 6
|
||||
244.7 {41} 44.9 32.0 0.7 0% 0.1 68.3 4191.3 31.4 64.2 1% 0.1 0.7 7% 6
|
||||
245.7 {41} 38.9 32.0 0.6 0% 0.1 74.2 4160.5 31.7 64.4 0% 0.1 0.7 7% 6
|
||||
246.7 {41} 38.9 32.0 0.6 0% 0.1 72.0 4094.8 31.9 63.8 0% 0.1 0.7 7% 6
|
||||
247.8 {41} 50.8 32.0 0.8 0% 0.1 63.6 4635.7 31.9 72.1 0% 0.1 0.6 7% 6
|
||||
248.8 {41} 26.9 32.0 0.4 0% 0.1 113.6 1671.9 31.8 25.9 0% 0.1 1.9 7% 6
|
||||
249.8 {41} 26.9 32.0 0.4 0% 0.0 64.0 4150.4 31.4 63.6 1% 0.1 0.6 7% 6
|
||||
250.8 {41} 41.9 32.0 0.7 0% 0.1 99.1 4569.9 31.8 70.9 0% 0.1 0.8 7% 6
|
||||
251.8 {41} 15.0 32.0 0.2 0% 0.1 170.2 4465.9 31.7 69.0 0% 0.1 0.7 7% 6
|
||||
252.8 {41} 29.9 32.0 0.5 0% 0.1 118.9 4021.6 31.8 62.4 0% 0.1 0.7 7% 6
|
||||
253.8 {41} 56.8 32.0 0.9 0% 0.1 52.0 4681.0 32.0 73.0 0% 0.1 0.6 7% 6
|
||||
254.8 {41} 74.8 32.0 1.2 0% 0.1 38.6 4723.6 31.3 72.3 1% 0.1 0.6 7% 6
|
||||
255.8 {41} 35.9 32.0 0.6 0% 0.1 86.6 4749.7 31.9 74.0 0% 0.1 0.6 7% 6
|
||||
256.8 {41} 47.9 32.0 0.7 0% 0.1 52.2 960.1 31.8 14.9 0% 0.1 3.2 7% 6
|
||||
257.8 {41} 78.8 32.0 1.2 0% 0.1 48.5 986.0 31.5 15.2 1% 0.1 2.3 7% 6
|
||||
258.8 {41} 767.6 31.9 12.0 1% 0.2 8.3 0.0 0.0 0.0 0% 0.0 0.0 7% 4
|
||||
259.8 {41} 929.2 31.9 14.5 0% 0.1 5.9 61.8 4.9 0.1 46% 0.0 0.0 7% 6
|
||||
260.8 {41} 1377.9 32.0 21.5 0% 0.2 4.7 0.0 0.0 0.0 0% 0.0 0.0 7% 6
|
||||
261.8 {41} 1251.2 31.9 19.5 1% 0.1 4.6 0.0 0.0 0.0 0% 0.0 0.0 7% 6
|
||||
262.8 {41} 1259.2 31.9 19.6 0% 0.1 4.8 29.9 10.7 0.2 38% 0.0 1.5 7% 6
|
||||
263.8 {41} 1462.7 31.9 22.8 1% 0.1 4.0 0.0 0.0 0.0 0% 0.0 0.0 7% 6
|
||||
264.8 {41} 1462.5 31.8 22.7 1% 0.1 2.7 56.8 4.4 0.1 39% 0.0 0.0 7% 3
|
||||
265.8 {41} 1906.1 31.9 29.7 0% 0.1 1.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
266.8 {41} 1368.0 31.9 21.3 1% 0.1 1.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
267.8 {41} 1260.2 31.9 19.6 1% 0.1 2.9 15.0 2.7 0.0 0% 0.0 1.2 7% 3
|
||||
268.8 {41} 1942.0 31.9 30.3 0% 0.1 1.5 18.9 16.4 0.2 51% 0.0 0.2 7% 3
|
||||
269.8 {41} 1828.6 31.9 28.5 0% 0.1 1.6 82.8 4.5 0.2 41% 0.0 0.0 7% 3
|
||||
270.8 {41} 1621.1 31.9 25.2 1% 0.1 1.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
271.8 {41} 1906.2 31.9 29.7 0% 0.1 1.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
272.8 {41} 1813.5 31.9 28.3 0% 0.1 1.6 4.0 4.0 0.0 33% 0.0 2.0 7% 3
|
||||
273.8 {41} 1923.2 31.9 30.0 1% 0.1 1.6 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
274.8 {41} 2060.7 31.9 32.1 1% 0.1 1.4 47.9 5.0 0.1 47% 0.0 0.0 7% 3
|
||||
275.8 {41} 1562.3 31.9 24.3 1% 0.1 1.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
276.8 {41} 1861.2 31.9 29.0 0% 0.1 1.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
277.8 {41} 1974.0 31.9 30.8 1% 0.1 1.5 134.6 3.6 0.2 26% 0.0 0.2 7% 3
|
||||
278.8 {41} 1882.3 31.9 29.3 0% 0.1 1.6 7.0 10.3 0.0 22% 0.0 0.0 7% 3
|
||||
279.8 {41} 2174.5 31.9 33.9 1% 0.1 1.4 33.9 4.7 0.1 43% 0.0 0.0 7% 3
|
||||
1.0 {41} 0.0 0.0 0.0 0% 0.0 0.0 7789.4 15.9 120.8 0% 0.1 0.4 7% 3
|
||||
2.0 {41} 0.0 0.0 0.0 0% 0.0 0.0 8473.2 15.9 131.2 0% 0.1 0.3 7% 0
|
||||
3.0 {41} 8272.4 15.9 128.6 1% 0.0 0.2 4179.1 15.9 64.8 0% 0.0 0.3 7% 3
|
||||
4.0 {41} 17777.7 16.0 277.1 1% 0.1 0.1 43.9 2.7 0.1 51% 0.0 0.0 6% 2
|
||||
5.0 {41} 18300.9 16.0 285.2 1% 0.1 0.1 52.8 2.9 0.2 55% 0.0 0.0 6% 3
|
||||
6.0 {41} 17281.0 16.0 269.3 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
7.0 {41} 17603.8 16.0 274.3 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
8.0 {41} 17619.4 16.0 274.5 1% 0.1 0.1 7.0 5.1 0.0 22% 0.0 0.0 6% 2
|
||||
9.0 {41} 17839.1 16.0 278.0 1% 0.1 0.1 33.9 2.4 0.1 43% 0.0 0.0 6% 3
|
||||
10.0 {41} 17781.0 16.0 277.1 1% 0.1 0.1 14.0 2.9 0.0 53% 0.0 0.0 6% 0
|
||||
11.0 {41} 18684.1 16.0 291.1 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 1
|
||||
12.0 {41} 18831.8 16.0 293.4 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 1
|
||||
13.0 {41} 18754.0 16.0 292.3 1% 0.1 0.1 7.0 5.1 0.0 22% 0.0 0.0 6% 2
|
||||
14.0 {41} 18092.7 16.0 281.9 1% 0.1 0.1 41.9 2.9 0.1 42% 0.0 0.1 6% 3
|
||||
15.0 {41} 18401.6 16.0 286.8 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 2
|
||||
16.0 {41} 18064.0 16.0 281.5 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
17.1 {41} 16559.3 16.0 258.1 1% 0.1 0.2 0.0 0.0 0.0 0% 0.0 0.0 6% 1
|
||||
18.1 {41} 16931.6 16.0 263.8 1% 0.1 0.2 60.8 3.0 0.2 55% 0.0 0.0 6% 2
|
||||
19.1 {41} 18161.7 16.0 283.0 1% 0.1 0.1 53.8 2.5 0.1 36% 0.0 0.0 6% 3
|
||||
20.1 {41} 18438.4 16.0 287.4 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
21.1 {41} 17784.3 16.0 277.1 1% 0.1 0.1 0.0 0.0 0.0 0% 0.0 0.0 6% 0
|
||||
22.1 {41} 17303.6 16.0 269.6 1% 0.1 0.2 0.0 0.0 0.0 0% 0.0 0.0 6% 3
|
||||
23.1 {41} 18677.5 16.0 291.0 1% 0.1 0.1 482.5 3.8 1.8 6% 0.0 1.7 6% 3
|
||||
24.1 {41} 18999.5 16.0 296.1 1% 0.1 0.1 46.9 2.8 0.1 42% 0.0 0.0 6% 3
|
||||
25.1 {41} 7754.9 16.0 120.9 1% 0.1 0.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
26.1 {41} 1183.4 16.0 18.5 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
27.1 {41} 1235.3 15.9 19.2 1% 0.1 2.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
28.1 {41} 1152.5 16.0 18.0 0% 0.1 2.6 78.8 1.7 0.1 20% 0.0 0.2 7% 0
|
||||
29.1 {41} 1162.4 15.9 18.1 1% 0.1 2.6 35.9 2.4 0.1 45% 0.0 0.0 7% 3
|
||||
30.1 {41} 1159.5 16.0 18.1 0% 0.1 2.6 7.0 5.1 0.0 22% 0.0 0.0 7% 2
|
||||
31.1 {41} 1168.5 16.0 18.2 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
32.1 {41} 1099.6 16.0 17.2 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
33.1 {41} 1147.6 15.9 17.8 1% 0.1 2.6 8.0 2.0 0.0 33% 0.0 1.0 7% 3
|
||||
34.1 {41} 1175.4 16.0 18.4 0% 0.1 2.5 51.8 2.3 0.1 42% 0.0 0.0 7% 3
|
||||
35.1 {41} 1160.5 16.0 18.1 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
36.1 {41} 1240.2 16.0 19.3 0% 0.1 2.4 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
37.1 {41} 1058.8 15.9 16.5 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
38.1 {41} 1109.6 15.9 17.3 1% 0.1 2.7 6.0 1.3 0.0 0% 0.0 3.0 7% 0
|
||||
39.1 {41} 1225.2 15.9 19.1 1% 0.1 2.4 48.9 2.5 0.1 47% 0.0 0.0 7% 3
|
||||
40.1 {41} 1175.4 15.9 18.3 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 0
|
||||
41.1 {41} 865.5 16.0 13.5 0% 0.1 2.7 2.0 4.0 0.0 50% 0.0 0.0 7% 7
|
||||
42.1 {41} 959.1 16.0 15.0 0% 0.1 3.7 5.0 5.6 0.0 0% 0.0 147.6 7% 3
|
||||
43.1 {41} 1062.8 15.9 16.5 1% 0.1 2.8 139.6 1.7 0.2 22% 0.0 0.0 7% 3
|
||||
44.1 {41} 1079.7 16.0 16.9 0% 0.1 2.7 53.8 2.4 0.1 44% 0.0 0.0 7% 3
|
||||
45.1 {41} 1099.6 16.0 17.2 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
46.1 {41} 1126.7 16.0 17.6 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
47.1 {41} 1033.8 16.0 16.1 0% 0.1 2.9 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
48.1 {41} 1049.8 15.9 16.3 1% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
49.1 {41} 1080.8 15.9 16.7 2% 0.1 2.8 83.7 2.7 0.2 50% 0.0 0.0 7% 3
|
||||
50.2 {41} 1067.7 16.0 16.7 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
51.2 {41} 1183.4 16.0 18.5 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
52.2 {41} 1109.7 16.0 17.3 0% 0.1 2.7 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
53.2 {41} 1116.6 15.9 17.4 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
54.2 {41} 1111.7 16.0 17.3 0% 0.1 2.7 93.7 2.6 0.2 49% 0.0 0.0 7% 3
|
||||
55.2 {41} 1125.6 15.9 17.5 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
56.2 {41} 1050.8 15.9 16.4 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
57.2 {41} 1134.7 15.9 17.6 2% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
58.2 {41} 1143.4 15.9 17.8 1% 0.1 2.6 13.0 3.4 0.0 13% 0.0 1.8 7% 3
|
||||
59.2 {41} 1170.5 15.9 18.2 1% 0.1 2.5 104.7 2.5 0.3 46% 0.0 0.0 7% 3
|
||||
60.2 {41} 1124.6 16.0 17.6 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
61.2 {41} 1127.6 15.9 17.5 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
62.2 {41} 1064.7 16.0 16.6 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
63.2 {41} 1132.7 16.0 17.7 0% 0.1 2.6 13.0 1.5 0.0 13% 0.0 0.5 7% 3
|
||||
64.2 {41} 1114.6 16.0 17.4 0% 0.1 2.7 56.8 2.9 0.2 46% 0.0 0.0 7% 3
|
||||
65.2 {41} 1141.5 16.0 17.8 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
66.2 {41} 1113.7 15.9 17.3 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
67.2 {41} 1169.4 15.9 18.2 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
68.2 {41} 1119.6 15.9 17.4 1% 0.1 2.7 5.0 2.4 0.0 44% 0.0 4.0 7% 3
|
||||
69.2 {41} 1130.5 16.0 17.7 0% 0.1 2.6 40.9 2.8 0.1 41% 0.0 0.0 7% 3
|
||||
70.2 {41} 1160.5 16.0 18.1 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
71.2 {41} 1111.7 16.0 17.3 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
72.2 {41} 1156.4 15.9 17.9 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
73.2 {41} 1145.4 15.9 17.8 1% 0.1 2.6 18.9 2.7 0.1 51% 0.0 1.6 7% 3
|
||||
74.2 {41} 1098.8 15.9 17.1 1% 0.1 2.7 36.9 2.1 0.1 35% 0.0 0.0 7% 3
|
||||
75.2 {41} 1071.7 15.9 16.7 1% 0.1 2.7 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
76.2 {41} 1111.6 16.0 17.3 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
77.2 {41} 1064.9 16.0 16.6 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
78.2 {41} 1001.0 16.0 15.6 0% 0.1 3.0 17.9 2.7 0.0 50% 0.0 0.7 7% 3
|
||||
79.2 {41} 1023.9 15.9 15.9 1% 0.1 2.9 38.9 2.2 0.1 38% 0.0 0.0 7% 3
|
||||
80.2 {41} 1098.7 15.9 17.1 1% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 1
|
||||
81.2 {41} 1078.7 16.0 16.8 0% 0.1 2.7 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
82.2 {41} 1064.8 16.0 16.6 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
83.3 {41} 1151.5 16.0 18.0 0% 0.1 2.5 18.9 2.7 0.1 51% 0.0 0.3 7% 3
|
||||
84.3 {41} 1114.6 16.0 17.4 0% 0.1 2.6 37.9 2.1 0.1 37% 0.0 0.0 7% 3
|
||||
85.3 {41} 1059.8 15.9 16.5 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
86.3 {41} 1072.7 16.0 16.7 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
87.3 {41} 1093.7 16.0 17.1 0% 0.1 2.7 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
88.3 {41} 1126.6 16.0 17.6 0% 0.1 2.6 21.9 2.5 0.1 48% 0.0 1.1 7% 3
|
||||
89.3 {41} 1161.5 15.9 18.1 1% 0.1 2.6 34.9 2.2 0.1 39% 0.0 0.0 7% 3
|
||||
90.3 {41} 1140.5 15.9 17.8 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
91.3 {41} 1149.6 15.9 17.9 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
92.3 {41} 1187.3 15.9 18.5 1% 0.1 2.5 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
93.3 {41} 1009.0 15.9 15.7 1% 0.1 2.9 12.0 1.3 0.0 0% 0.0 0.0 7% 3
|
||||
94.3 {41} 1193.4 15.9 18.6 1% 0.1 2.4 58.8 2.2 0.1 40% 0.0 0.0 7% 3
|
||||
95.3 {41} 1143.5 15.9 17.8 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
96.3 {41} 1164.4 15.9 18.1 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
97.3 {41} 1168.6 16.0 18.2 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
98.3 {41} 1139.5 15.9 17.7 1% 0.1 2.6 15.0 3.5 0.1 29% 0.0 1.6 7% 3
|
||||
99.3 {41} 1170.5 15.9 18.2 1% 0.1 2.5 53.8 2.2 0.1 40% 0.0 0.0 7% 3
|
||||
100.3 {41} 1145.5 16.0 17.9 0% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
101.3 {41} 1097.7 16.0 17.2 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
102.3 {41} 1158.4 15.9 18.0 1% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
103.3 {41} 1167.5 15.9 18.2 1% 0.1 2.5 12.0 4.0 0.0 33% 0.0 2.5 7% 3
|
||||
104.3 {41} 1268.2 15.9 19.7 1% 0.1 2.3 52.8 2.5 0.1 46% 0.0 0.0 7% 3
|
||||
105.3 {41} 1162.5 16.0 18.1 0% 0.1 2.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
106.3 {41} 1219.3 16.0 19.0 0% 0.1 2.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
107.3 {41} 709.8 15.9 11.0 1% 0.1 4.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
108.3 {41} 983.8 16.0 15.4 0% 0.1 3.0 11.0 4.0 0.0 27% 0.0 1.5 7% 3
|
||||
109.3 {41} 989.0 15.9 15.3 1% 0.1 3.0 150.4 3.0 0.4 56% 0.0 0.1 7% 3
|
||||
110.3 {41} 972.2 16.0 15.2 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
111.3 {41} 1053.8 15.9 16.4 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
112.3 {41} 972.1 16.0 15.2 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
113.3 {41} 968.0 16.0 15.1 0% 0.1 3.0 16.9 1.6 0.0 19% 0.0 1.1 7% 3
|
||||
114.3 {41} 976.1 15.9 15.2 1% 0.1 3.0 66.8 2.9 0.2 48% 0.0 0.0 7% 3
|
||||
115.3 {41} 1030.9 16.0 16.1 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
116.4 {41} 1025.9 16.0 16.0 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
117.4 {41} 1013.8 16.0 15.8 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
118.4 {41} 1019.0 16.0 15.9 0% 0.1 2.9 5.0 2.4 0.0 44% 0.0 4.0 7% 3
|
||||
119.4 {41} 997.9 16.0 15.6 0% 0.1 2.9 91.7 2.8 0.2 52% 0.0 0.0 7% 3
|
||||
120.4 {41} 1062.8 15.9 16.5 1% 0.1 2.8 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
121.4 {41} 988.1 15.9 15.4 1% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
122.4 {41} 1048.8 16.0 16.4 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
123.4 {41} 970.1 15.9 15.0 2% 0.1 3.1 4.0 2.0 0.0 33% 0.0 2.0 7% 0
|
||||
124.4 {41} 1013.8 15.8 15.6 3% 0.1 2.9 56.8 2.2 0.1 39% 0.0 0.0 7% 3
|
||||
125.4 {41} 1049.9 16.0 16.4 0% 0.1 2.8 14.0 3.4 0.0 22% 0.0 0.0 7% 3
|
||||
126.4 {41} 1053.8 15.9 16.4 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
127.4 {41} 995.0 15.9 15.4 2% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
128.4 {41} 1026.8 15.9 16.0 1% 0.1 2.9 15.0 1.3 0.0 0% 0.0 1.2 7% 3
|
||||
129.4 {41} 1035.9 15.9 16.1 1% 0.1 2.8 37.9 2.1 0.1 37% 0.0 0.0 7% 3
|
||||
130.4 {41} 1045.8 16.0 16.3 0% 0.1 2.8 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
131.4 {41} 1020.9 15.9 15.9 1% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
132.4 {41} 1051.8 16.0 16.4 0% 0.1 2.8 83.7 1.5 0.1 12% 0.0 0.0 7% 3
|
||||
133.4 {41} 990.0 15.9 15.4 1% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
134.4 {41} 1032.7 15.9 16.1 1% 0.1 2.9 33.9 2.4 0.1 43% 0.0 0.0 7% 3
|
||||
135.4 {41} 1011.0 15.9 15.7 1% 0.1 2.9 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
136.4 {41} 957.2 16.0 15.0 0% 0.1 3.1 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
137.4 {41} 966.0 16.0 15.1 0% 0.1 3.0 133.6 1.8 0.2 26% 0.0 0.2 7% 3
|
||||
138.4 {41} 1098.7 15.9 17.1 1% 0.1 2.6 58.8 3.1 0.2 56% 0.0 0.0 7% 3
|
||||
139.4 {41} 903.3 16.0 14.1 0% 0.1 3.2 33.9 2.4 0.1 43% 0.0 0.0 7% 3
|
||||
140.4 {41} 969.0 16.0 15.1 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
141.4 {41} 997.0 15.9 15.5 1% 0.1 3.0 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
142.4 {41} 953.1 16.0 14.9 0% 0.1 3.1 8.0 2.0 0.0 33% 0.0 1.0 7% 3
|
||||
143.4 {41} 1047.8 15.9 16.3 1% 0.1 2.8 14.0 2.9 0.0 53% 0.0 0.0 7% 3
|
||||
144.4 {41} 983.0 16.0 15.3 0% 0.1 3.0 37.9 2.1 0.1 37% 0.0 0.0 7% 3
|
||||
145.4 {41} 1047.9 15.9 16.3 1% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
146.4 {41} 978.0 16.0 15.3 0% 0.1 3.0 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
147.4 {41} 1017.0 16.0 15.9 0% 0.1 2.9 4.0 2.0 0.0 33% 0.0 5.0 7% 3
|
||||
148.4 {41} 998.0 16.0 15.6 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
149.5 {41} 1111.6 16.0 17.3 0% 0.1 2.6 51.8 2.3 0.1 42% 0.0 0.0 7% 3
|
||||
150.5 {41} 983.0 16.0 15.3 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
151.5 {41} 1042.9 16.0 16.3 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
152.5 {41} 1078.7 15.9 16.8 0% 0.1 2.7 12.0 4.0 0.0 33% 0.0 0.4 7% 3
|
||||
153.5 {41} 969.0 16.0 15.1 0% 0.1 3.0 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
154.5 {41} 995.1 16.0 15.5 0% 0.1 2.9 47.9 2.5 0.1 47% 0.0 0.0 7% 3
|
||||
155.5 {41} 1075.6 16.0 16.8 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
156.5 {41} 1115.7 15.9 17.3 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
157.5 {41} 1045.8 16.0 16.3 0% 0.1 2.8 35.9 2.2 0.1 14% 0.0 0.5 7% 3
|
||||
158.5 {41} 1017.0 15.9 15.8 1% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
159.5 {41} 1040.8 15.9 16.1 1% 0.1 2.8 33.9 2.4 0.1 43% 0.0 0.0 7% 3
|
||||
160.5 {41} 1048.8 16.0 16.4 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
161.5 {41} 943.2 15.9 14.7 1% 0.1 3.1 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
162.5 {41} 1039.9 16.0 16.2 0% 0.1 2.8 18.9 3.2 0.1 30% 0.0 1.3 7% 3
|
||||
163.5 {41} 1013.9 16.0 15.8 0% 0.1 2.9 19.9 2.4 0.0 44% 0.0 0.0 7% 3
|
||||
164.5 {41} 1078.7 15.9 16.7 1% 0.1 2.7 35.9 2.2 0.1 40% 0.0 0.0 7% 3
|
||||
165.5 {41} 1028.9 16.0 16.1 0% 0.1 2.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
166.5 {41} 1134.7 15.9 17.7 1% 0.1 2.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
167.5 {41} 900.2 16.0 14.1 0% 0.1 3.3 12.0 4.0 0.0 33% 0.0 1.7 7% 3
|
||||
168.5 {41} 1080.8 15.9 16.8 1% 0.1 2.7 14.0 2.9 0.0 53% 0.0 0.0 7% 3
|
||||
169.5 {41} 1079.7 16.0 16.9 0% 0.1 2.7 66.8 2.8 0.2 52% 0.0 0.0 7% 3
|
||||
170.5 {41} 1076.7 16.0 16.8 0% 0.1 2.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
171.5 {41} 1016.9 16.0 15.9 0% 0.1 2.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
172.5 {41} 628.1 16.0 9.8 0% 0.1 4.7 38.9 2.2 0.1 13% 0.0 1.0 7% 3
|
||||
173.5 {41} 945.2 16.0 14.8 0% 0.1 3.1 38.9 3.0 0.1 55% 0.0 0.0 7% 3
|
||||
174.5 {41} 888.2 15.9 13.8 0% 0.1 3.4 33.9 2.4 0.1 43% 0.0 0.0 7% 3
|
||||
175.5 {41} 935.2 16.0 14.6 0% 0.1 3.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
176.5 {41} 894.2 16.0 14.0 0% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
177.5 {41} 892.4 15.9 13.9 1% 0.1 3.3 23.9 2.7 0.1 20% 0.0 0.2 7% 3
|
||||
178.5 {41} 915.2 16.0 14.3 0% 0.1 3.2 19.9 2.8 0.1 52% 0.0 0.0 7% 3
|
||||
179.5 {41} 908.2 16.0 14.2 0% 0.1 3.2 66.8 2.3 0.2 43% 0.0 0.0 7% 3
|
||||
180.5 {41} 912.3 16.0 14.3 0% 0.1 3.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
181.5 {41} 892.3 15.9 13.9 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
182.6 {41} 909.3 15.9 14.1 1% 0.1 3.3 4.0 2.0 0.0 33% 0.0 1.0 7% 3
|
||||
183.6 {41} 890.3 16.0 13.9 0% 0.1 3.3 20.9 3.6 0.1 46% 0.0 0.0 7% 3
|
||||
184.6 {41} 927.2 16.0 14.5 0% 0.1 3.2 37.9 2.1 0.1 37% 0.0 0.0 7% 3
|
||||
185.6 {41} 954.1 15.9 14.8 1% 0.1 3.1 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
186.6 {41} 924.1 16.0 14.4 0% 0.1 3.2 7.0 1.7 0.0 22% 0.0 0.0 7% 2
|
||||
187.6 {41} 942.3 16.0 14.7 0% 0.1 3.2 25.9 1.8 0.0 28% 0.0 0.2 7% 3
|
||||
188.6 {41} 951.1 16.0 14.9 0% 0.1 3.1 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
189.6 {41} 939.2 15.9 14.6 1% 0.1 3.2 84.8 2.8 0.2 52% 0.0 0.0 7% 3
|
||||
190.6 {41} 929.2 16.0 14.5 0% 0.1 3.2 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
191.6 {41} 915.1 15.9 14.2 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
192.6 {41} 883.4 15.9 13.7 1% 0.1 3.4 17.9 1.8 0.0 25% 0.0 0.0 7% 3
|
||||
193.6 {41} 908.2 16.0 14.2 0% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
194.6 {41} 944.2 16.0 14.7 0% 0.1 3.1 70.8 2.6 0.2 42% 0.0 0.0 7% 3
|
||||
195.6 {41} 885.3 16.0 13.8 0% 0.1 3.3 19.9 1.6 0.0 17% 0.0 0.4 7% 3
|
||||
196.6 {41} 856.4 15.9 13.3 1% 0.1 3.5 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
197.6 {41} 936.1 16.0 14.6 0% 0.1 3.2 6.0 1.3 0.0 0% 0.0 2.0 7% 3
|
||||
198.6 {41} 876.4 16.0 13.7 0% 0.1 3.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
199.6 {41} 870.4 16.0 13.6 0% 0.1 3.4 138.6 2.5 0.3 43% 0.0 0.0 7% 3
|
||||
200.6 {41} 816.5 16.0 12.8 0% 0.1 3.6 14.0 1.7 0.0 22% 0.0 0.0 7% 3
|
||||
201.6 {41} 875.4 16.0 13.6 0% 0.1 3.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
202.6 {41} 861.4 16.0 13.5 0% 0.1 3.4 12.0 1.3 0.0 0% 0.0 0.0 7% 3
|
||||
203.6 {41} 880.3 15.9 13.7 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
204.6 {41} 889.3 15.9 13.8 1% 0.1 3.4 80.8 2.6 0.2 49% 0.0 0.0 7% 3
|
||||
205.6 {41} 890.3 15.9 13.8 0% 0.1 3.3 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
206.6 {41} 904.2 15.9 14.1 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
207.6 {41} 914.2 16.0 14.3 0% 0.1 3.2 140.6 1.4 0.2 8% 0.0 0.1 7% 3
|
||||
208.6 {41} 870.3 16.0 13.6 0% 0.1 3.4 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
209.6 {41} 915.3 16.0 14.3 0% 0.1 3.2 94.7 2.8 0.3 53% 0.0 0.0 7% 3
|
||||
210.6 {41} 910.2 15.9 14.2 1% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
211.6 {41} 840.5 16.0 13.1 0% 0.1 3.6 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
212.6 {41} 825.5 16.0 12.9 0% 0.1 3.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
213.6 {41} 902.3 16.0 14.1 0% 0.1 3.3 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
214.6 {41} 867.3 16.0 13.6 0% 0.1 3.4 48.8 2.5 0.1 47% 0.0 0.0 7% 3
|
||||
215.7 {41} 470.6 15.9 7.3 1% 0.0 3.2 4699.9 15.8 72.7 0% 0.0 0.3 7% 3
|
||||
216.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 7156.8 15.9 111.2 0% 0.1 0.4 7% 3
|
||||
217.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8693.3 15.9 134.7 0% 0.1 0.3 7% 3
|
||||
218.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8380.8 15.8 129.6 0% 0.1 0.3 7% 3
|
||||
219.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8537.4 15.8 131.7 0% 0.1 0.3 7% 3
|
||||
220.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8527.5 15.9 132.4 0% 0.1 0.3 7% 3
|
||||
221.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8634.8 15.8 133.5 0% 0.1 0.3 7% 3
|
||||
222.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 7966.8 15.9 123.4 0% 0.1 0.4 7% 3
|
||||
223.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 7058.2 15.9 109.6 0% 0.1 0.4 7% 3
|
||||
224.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 8259.4 15.8 127.2 0% 0.1 0.4 7% 2
|
||||
225.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 4491.6 15.9 69.5 0% 0.1 0.7 7% 2
|
||||
226.7 {41} 0.0 0.0 0.0 0% 0.0 0.0 3500.2 15.9 54.3 0% 0.1 0.8 7% 3
|
||||
227.7 {41} 30.9 16.0 0.5 0% 0.1 81.8 3201.0 15.9 49.6 0% 0.1 0.9 7% 6
|
||||
228.7 {41} 38.9 16.0 0.6 0% 0.1 75.8 3117.3 15.8 48.0 1% 0.1 1.0 7% 4
|
||||
229.7 {41} 44.8 16.0 0.7 0% 0.1 67.7 3538.4 15.4 53.2 5% 0.1 0.8 7% 6
|
||||
230.7 {41} 50.8 16.0 0.8 0% 0.1 57.8 2264.2 15.9 35.2 0% 0.1 1.3 7% 6
|
||||
231.7 {41} 44.9 16.0 0.7 0% 0.1 68.1 2961.0 15.9 45.9 0% 0.1 1.0 7% 6
|
||||
232.7 {41} 46.9 15.3 0.7 8% 0.1 60.7 3194.0 15.9 49.6 0% 0.1 0.9 7% 6
|
||||
233.7 {41} 76.8 15.6 1.2 5% 0.1 38.5 2944.5 15.7 45.1 1% 0.1 1.0 7% 6
|
||||
234.7 {41} 76.8 15.6 1.2 5% 0.1 39.8 3111.4 15.5 47.1 1% 0.1 0.9 7% 6
|
||||
235.7 {41} 53.8 16.0 0.8 0% 0.1 58.5 3687.5 15.8 56.8 0% 0.1 0.8 7% 6
|
||||
236.7 {41} 41.9 16.0 0.7 0% 0.1 71.1 3751.2 15.8 58.1 0% 0.1 0.8 7% 6
|
||||
237.7 {41} 71.8 16.0 1.1 0% 0.1 40.9 3991.6 15.8 61.4 0% 0.1 0.7 7% 6
|
||||
238.7 {41} 50.8 14.6 0.7 0% 0.1 60.7 4059.9 15.9 63.0 1% 0.1 0.7 7% 5
|
||||
239.7 {41} 62.8 15.4 0.9 0% 0.1 45.7 3018.6 15.8 46.4 1% 0.1 0.9 7% 6
|
||||
240.7 {41} 41.9 16.0 0.7 0% 0.1 72.6 2635.0 15.8 40.8 0% 0.1 1.2 7% 6
|
||||
241.7 {41} 59.8 16.0 0.9 0% 0.1 50.7 6406.8 15.9 99.6 0% 0.1 0.5 7% 6
|
||||
242.7 {41} 50.8 16.0 0.8 0% 0.1 55.9 3674.9 15.6 56.0 0% 0.1 0.7 7% 6
|
||||
243.7 {41} 59.8 16.0 0.9 0% 0.1 50.5 4738.7 15.8 73.2 0% 0.1 0.7 7% 6
|
||||
244.7 {41} 44.9 16.0 0.7 0% 0.1 68.3 4191.3 15.7 64.2 1% 0.1 0.7 7% 6
|
||||
245.7 {41} 38.9 16.0 0.6 0% 0.1 74.2 4160.5 15.9 64.4 0% 0.1 0.7 7% 6
|
||||
246.7 {41} 38.9 16.0 0.6 0% 0.1 72.0 4094.8 16.0 63.8 0% 0.1 0.7 7% 6
|
||||
247.8 {41} 50.8 16.0 0.8 0% 0.1 63.6 4635.7 15.9 72.1 0% 0.1 0.6 7% 6
|
||||
248.8 {41} 26.9 16.0 0.4 0% 0.1 113.6 1671.9 15.9 25.9 0% 0.1 1.9 7% 6
|
||||
249.8 {41} 26.9 16.0 0.4 0% 0.0 64.0 4150.4 15.7 63.6 1% 0.1 0.6 7% 6
|
||||
250.8 {41} 41.9 16.0 0.7 0% 0.1 99.1 4569.9 15.9 70.9 0% 0.1 0.8 7% 6
|
||||
251.8 {41} 15.0 16.0 0.2 0% 0.1 170.2 4465.9 15.8 69.0 0% 0.1 0.7 7% 6
|
||||
252.8 {41} 29.9 16.0 0.5 0% 0.1 118.9 4021.6 15.9 62.4 0% 0.1 0.7 7% 6
|
||||
253.8 {41} 56.8 16.0 0.9 0% 0.1 52.0 4681.0 16.0 73.0 0% 0.1 0.6 7% 6
|
||||
254.8 {41} 74.8 16.0 1.2 0% 0.1 38.6 4723.6 15.7 72.3 1% 0.1 0.6 7% 6
|
||||
255.8 {41} 35.9 16.0 0.6 0% 0.1 86.6 4749.7 16.0 74.0 0% 0.1 0.6 7% 6
|
||||
256.8 {41} 47.9 16.0 0.7 0% 0.1 52.2 960.1 15.9 14.9 0% 0.1 3.2 7% 6
|
||||
257.8 {41} 78.8 16.0 1.2 0% 0.1 48.5 986.0 15.8 15.2 1% 0.1 2.3 7% 6
|
||||
258.8 {41} 767.6 16.0 12.0 1% 0.2 8.3 0.0 0.0 0.0 0% 0.0 0.0 7% 4
|
||||
259.8 {41} 929.2 16.0 14.5 0% 0.1 5.9 61.8 2.5 0.1 46% 0.0 0.0 7% 6
|
||||
260.8 {41} 1377.9 16.0 21.5 0% 0.2 4.7 0.0 0.0 0.0 0% 0.0 0.0 7% 6
|
||||
261.8 {41} 1251.2 15.9 19.5 1% 0.1 4.6 0.0 0.0 0.0 0% 0.0 0.0 7% 6
|
||||
262.8 {41} 1259.2 16.0 19.6 0% 0.1 4.8 29.9 5.3 0.2 38% 0.0 1.5 7% 6
|
||||
263.8 {41} 1462.7 16.0 22.8 1% 0.1 4.0 0.0 0.0 0.0 0% 0.0 0.0 7% 6
|
||||
264.8 {41} 1462.5 15.9 22.7 1% 0.1 2.7 56.8 2.2 0.1 39% 0.0 0.0 7% 3
|
||||
265.8 {41} 1906.1 16.0 29.7 0% 0.1 1.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
266.8 {41} 1368.0 16.0 21.3 1% 0.1 1.7 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
267.8 {41} 1260.2 15.9 19.6 1% 0.1 2.9 15.0 1.3 0.0 0% 0.0 1.2 7% 3
|
||||
268.8 {41} 1942.0 16.0 30.3 0% 0.1 1.5 18.9 8.2 0.2 51% 0.0 0.2 7% 3
|
||||
269.8 {41} 1828.6 16.0 28.5 0% 0.1 1.6 82.8 2.3 0.2 41% 0.0 0.0 7% 3
|
||||
270.8 {41} 1621.1 15.9 25.2 1% 0.1 1.8 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
271.8 {41} 1906.2 16.0 29.7 0% 0.1 1.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
272.8 {41} 1813.5 16.0 28.3 0% 0.1 1.6 4.0 2.0 0.0 33% 0.0 2.0 7% 3
|
||||
273.8 {41} 1923.2 16.0 30.0 1% 0.1 1.6 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
274.8 {41} 2060.7 16.0 32.1 1% 0.1 1.4 47.9 2.5 0.1 47% 0.0 0.0 7% 3
|
||||
275.8 {41} 1562.3 16.0 24.3 1% 0.1 1.9 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
276.8 {41} 1861.2 16.0 29.0 0% 0.1 1.6 0.0 0.0 0.0 0% 0.0 0.0 7% 3
|
||||
277.8 {41} 1974.0 16.0 30.8 1% 0.1 1.5 134.6 1.8 0.2 26% 0.0 0.2 7% 3
|
||||
278.8 {41} 1882.3 15.9 29.3 0% 0.1 1.6 7.0 5.1 0.0 22% 0.0 0.0 7% 3
|
||||
279.8 {41} 2174.5 16.0 33.9 1% 0.1 1.4 33.9 2.4 0.1 43% 0.0 0.0 7% 3
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 {30} 2812.0 32.0 43.9 1% 0.0 0.4 92.7 61.1 2.8 67% 0.0 0.3 3% 0
|
||||
2.0 {30} 3160.1 31.9 49.3 1% 0.0 0.4 327.5 62.2 9.9 36% 0.0 0.3 3% 2
|
||||
3.0 {30} 2593.4 32.0 40.5 1% 0.0 0.4 102.6 50.5 2.5 62% 0.0 0.3 3% 2
|
||||
4.1 {30} 2859.4 32.0 44.7 1% 0.0 0.3 147.8 61.0 4.4 57% 0.0 0.3 3% 0
|
||||
5.1 {30} 2516.2 32.0 39.3 1% 0.0 0.3 317.5 68.8 10.7 36% 0.0 0.4 2% 0
|
||||
1.0 {30} 2812.0 16.0 43.9 1% 0.0 0.4 92.7 30.6 2.8 67% 0.0 0.3 3% 0
|
||||
2.0 {30} 3160.1 16.0 49.3 1% 0.0 0.4 327.5 31.1 9.9 36% 0.0 0.3 3% 2
|
||||
3.0 {30} 2593.4 16.0 40.5 1% 0.0 0.4 102.6 25.2 2.5 62% 0.0 0.3 3% 2
|
||||
4.1 {30} 2859.4 16.0 44.7 1% 0.0 0.3 147.8 30.5 4.4 57% 0.0 0.3 3% 0
|
||||
5.1 {30} 2516.2 16.0 39.3 1% 0.0 0.3 317.5 34.4 10.7 36% 0.0 0.4 2% 0
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 {2} 2812.0 32.0 43.9 1% 0.6 0.4 92.7 61.1 2.8 67% 0.0 0.3 41% 0
|
||||
2.0 {2} 3160.1 31.9 49.3 1% 0.6 0.4 327.5 62.2 9.9 36% 0.1 0.3 46% 2
|
||||
3.0 {2} 2593.4 32.0 40.5 1% 0.5 0.4 102.6 50.5 2.5 62% 0.0 0.3 42% 2
|
||||
4.1 {2} 2859.4 32.0 44.7 1% 0.5 0.3 147.8 61.0 4.4 57% 0.0 0.3 40% 0
|
||||
5.1 {2} 2516.2 32.0 39.3 1% 0.4 0.3 317.5 68.8 10.7 36% 0.1 0.4 37% 0
|
||||
1.0 {2} 2812.0 16.0 43.9 1% 0.6 0.4 92.7 30.6 2.8 67% 0.0 0.3 41% 0
|
||||
2.0 {2} 3160.1 16.0 49.3 1% 0.6 0.4 327.5 31.1 9.9 36% 0.1 0.3 46% 2
|
||||
3.0 {2} 2593.4 16.0 40.5 1% 0.5 0.4 102.6 25.2 2.5 62% 0.0 0.3 42% 2
|
||||
4.1 {2} 2859.4 16.0 44.7 1% 0.5 0.3 147.8 30.5 4.4 57% 0.0 0.3 40% 0
|
||||
5.1 {2} 2516.2 16.0 39.3 1% 0.4 0.3 317.5 34.4 10.7 36% 0.1 0.4 37% 0
|
||||
|
@@ -1,74 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More qw( no_plan );
|
||||
use File::Spec;
|
||||
|
||||
use PerconaTest;
|
||||
|
||||
use DiskstatsGroupByAll;
|
||||
|
||||
my $obj = DiskstatsGroupByAll->new();
|
||||
|
||||
for my $filename ( map "diskstats-00$_.txt", 1..5 ) {
|
||||
my $expected = load_file(
|
||||
File::Spec->catfile( "t", "pt-diskstats", "expected", "all_$filename"),
|
||||
);
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_all(
|
||||
filename => File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via filename");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
open my $fh, "<", File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ) or die $!;
|
||||
$obj->group_by_all(
|
||||
filehandle => $fh,
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via filehandle");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_all(
|
||||
data => load_file( File::Spec->catfile( "t", "pt-diskstats", "samples", $filename ) ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via data");
|
||||
|
||||
$obj->filename( File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ) );
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_all();
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via obj->filename()");
|
||||
|
||||
}
|
@@ -1,194 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More qw( no_plan );
|
||||
|
||||
use PerconaTest;
|
||||
|
||||
use DiskstatsGroupByDisk;
|
||||
|
||||
use File::Basename qw( dirname );
|
||||
use File::Spec;
|
||||
|
||||
my $filename = File::Spec->catfile( "t", "pt-diskstats", "samples", "diskstats-001.txt" );
|
||||
my $obj = DiskstatsGroupByDisk->new( filename => $filename );
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
{4} ram0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{4} cciss/c0d0 0.0 0.0 0.0 0% 0.0 0.0 17.7 56.2 0.5 86% 0.0 0.6 0% 0
|
||||
{4} cciss/c0d0p1 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{4} cciss/c0d0p2 0.0 0.0 0.0 0% 0.0 0.0 17.7 56.2 0.5 86% 0.0 0.6 0% 0
|
||||
{4} cciss/c0d1 458.1 43.0 9.6 0% 11.5 25.1 985.0 48.4 23.3 0% 0.1 0.1 102% 0
|
||||
{4} cciss/c1d0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
{4} dm-0 0.0 0.0 0.0 0% 0.0 0.0 99.3 8.0 0.4 0% 0.1 0.7 0% 0
|
||||
{4} md0 0.0 0.0 0.0 0% 0.0 0.0 0.0 0.0 0.0 0% 0.0 0.0 0% 0
|
||||
EOF
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk();
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "Default settings get us what we want");
|
||||
}
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
{5} sda3 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda4 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
EOF
|
||||
|
||||
$obj->filename( File::Spec->catfile( "t", "pt-diskstats", "samples", "diskstats-005.txt") );
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk();
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "diskstats-005.txt");
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
{5} sda3 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
{5} sda4 1394.1 32.0 21.8 1% 0.5 0.4 98.8 62.8 3.0 48% 0.0 0.3 41% 0
|
||||
EOF
|
||||
|
||||
|
||||
my $file = <<'EOF';
|
||||
TS 1298130002.073935000
|
||||
EOF
|
||||
|
||||
my $filename = File::Spec->catfile( "t", "pt-diskstats", "samples", "diskstats-005.txt");
|
||||
my $fake_file .= do { open my $fh, "<", $filename or die $!; local $/; <$fh>; };
|
||||
|
||||
open my $in_fh, "<", \$fake_file or die $!;
|
||||
open my $out_fh, ">", \my $got or die $!;
|
||||
$obj->out_fh($out_fh);
|
||||
{
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk( filehandle => $in_fh );
|
||||
$obj->column_regex($orig_re);
|
||||
}
|
||||
close($out_fh);
|
||||
close($in_fh);
|
||||
|
||||
is( $got, $expected, "diskstats-005.txt with TS" );
|
||||
}
|
||||
|
||||
{
|
||||
my $data = <<'EOF';
|
||||
TS 1297205887.156653000
|
||||
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
|
||||
TS 1297205888.161613000
|
||||
EOF
|
||||
|
||||
my $got = output(
|
||||
sub{
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk(data => $data);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
ok(!$got);
|
||||
}
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
{1} ram0 1.0 1.0 0.0 50% 0.0 1.0 1.0 1.0 0.0 50% 0.0 1.0 0% 0
|
||||
EOF
|
||||
|
||||
my $data = <<'EOF';
|
||||
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
|
||||
TS 1297205887.156653000
|
||||
1 0 ram0 1 1 1 1 1 1 1 1 1 1 1
|
||||
TS 1297205888.161613000
|
||||
EOF
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk(data => $data);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected);
|
||||
}
|
||||
|
||||
for my $filename ( map "diskstats-00$_.txt", 2..4 ) {
|
||||
my $expected = load_file(
|
||||
File::Spec->catfile( "t", "pt-diskstats", "expected", "disk_$filename"),
|
||||
);
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk(
|
||||
filename => File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via filename");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
open my $fh, "<", File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ) or die $!;
|
||||
$obj->group_by_disk(
|
||||
filehandle => $fh,
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via filehandle");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk(
|
||||
data => load_file( File::Spec->catfile( "t", "pt-diskstats", "samples", $filename ) ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via data");
|
||||
|
||||
$obj->filename( File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ) );
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_disk();
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via obj->filename()");
|
||||
}
|
||||
|
@@ -1,213 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More qw( no_plan );
|
||||
|
||||
use File::Spec;
|
||||
|
||||
use PerconaTest;
|
||||
|
||||
use DiskstatsGroupBySample;
|
||||
|
||||
my $obj = DiskstatsGroupBySample->new(
|
||||
filename => File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", "diskstats-001.txt" ),
|
||||
);
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
2.0 {8} 466.5 44.6 10.2 0% 1.4 23.9 1184.0 42.6 24.6 18% 0.0 0.2 12% 18
|
||||
4.0 {8} 373.0 47.2 8.6 0% 1.3 27.4 592.0 45.6 13.2 16% 0.0 0.1 11% 17
|
||||
5.0 {8} 848.0 42.6 17.7 0% 2.7 25.5 1987.0 49.8 48.3 3% 0.0 0.1 22% 9
|
||||
7.0 {8} 340.0 36.6 6.1 0% 1.0 23.8 1149.5 43.4 24.3 23% 0.0 0.2 11% 5
|
||||
EOF
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample();
|
||||
$obj->column_regex($orig_re);
|
||||
},
|
||||
);
|
||||
|
||||
is($got, $expected, "diskstats-001.txt");
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 sda3 1406.0 32.0 21.9 1% 0.6 0.4 46.3 61.1 1.4 67% 0.0 0.3 41% 0
|
||||
2.0 sda3 1580.1 31.9 24.6 1% 0.6 0.4 163.7 62.2 5.0 36% 0.1 0.3 46% 1
|
||||
3.0 sda3 1296.7 32.0 20.2 1% 0.5 0.4 51.3 50.5 1.3 62% 0.0 0.3 42% 1
|
||||
4.1 sda3 1429.7 32.0 22.3 1% 0.5 0.3 73.9 61.0 2.2 57% 0.0 0.3 40% 0
|
||||
5.1 sda3 1258.1 32.0 19.6 1% 0.4 0.3 158.7 68.8 5.3 36% 0.1 0.4 37% 0
|
||||
EOF
|
||||
|
||||
my $data = <<'EOF';
|
||||
8 3 sda3 4257315954 34043324 136169413346 1922644483 492348396 547079617 32764474048 248191881 0 1348454960 2169768832
|
||||
TS 1298130003.073935000
|
||||
8 3 sda3 4257317380 34043342 136169458914 1922645044 492348443 547079711 32764476920 248191896 0 1348455373 2169769408
|
||||
TS 1298130004.088149000
|
||||
8 3 sda3 4257318982 34043364 136169510082 1922645662 492348609 547079803 32764487248 248191947 1 1348455841 2169770075
|
||||
TS 1298130005.102035000
|
||||
8 3 sda3 4257320297 34043384 136169552098 1922646173 492348661 547079889 32764489872 248191964 1 1348456262 2169770603
|
||||
TS 1298130006.116158000
|
||||
8 3 sda3 4257321748 34043394 136169598530 1922646672 492348736 547079990 32764494448 248191983 0 1348456671 2169771121
|
||||
TS 1298130007.131062000
|
||||
8 3 sda3 4257323024 34043406 136169639330 1922647105 492348897 547080080 32764505520 248192043 0 1348457045 2169771613
|
||||
TS 1298130008.145277000
|
||||
EOF
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample(data => $data);
|
||||
$obj->column_regex($orig_re);
|
||||
},
|
||||
);
|
||||
|
||||
is($got, $expected, "input 1");
|
||||
}
|
||||
|
||||
# The below is incremental samples of the data and timestamps:
|
||||
# TS_diff reads reads_mrg read_sectors ms_reading writes write_mrg wrt_sectors ms_wrting i ms_ding_io ms_weightd
|
||||
# 1.14214000 1426 18 45568 561 47 94 2872 15 0 413 576
|
||||
# 1.13886000 1602 22 51168 618 166 92 10328 51 1 468 667
|
||||
# 1.14123000 1315 20 42016 511 52 86 2624 17 1 421 528
|
||||
# 1.14904000 1451 10 46432 499 75 101 4576 19 0 409 518
|
||||
# 1.14215000 1276 12 40800 433 161 90 11072 60 0 374 492
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 {2} 2812.0 32.0 43.9 1% 0.6 0.4 92.7 61.1 2.8 67% 0.0 0.3 41% 0
|
||||
2.0 {2} 3160.1 31.9 49.3 1% 0.6 0.4 327.5 62.2 9.9 36% 0.1 0.3 46% 2
|
||||
3.0 {2} 2593.4 32.0 40.5 1% 0.5 0.4 102.6 50.5 2.5 62% 0.0 0.3 42% 2
|
||||
4.1 {2} 2859.4 32.0 44.7 1% 0.5 0.3 147.8 61.0 4.4 57% 0.0 0.3 40% 0
|
||||
5.1 {2} 2516.2 32.0 39.3 1% 0.4 0.3 317.5 68.8 10.7 36% 0.1 0.4 37% 0
|
||||
EOF
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample(
|
||||
filename => File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", "diskstats-005.txt" ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
},
|
||||
);
|
||||
|
||||
is($got, $expected, "diskstats-005.txt");
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
my $expected = <<'EOF';
|
||||
#ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt busy in_prg
|
||||
1.0 {2} 2812.0 32.0 43.9 1% 0.6 0.4 92.7 61.1 2.8 67% 0.0 0.3 41% 0
|
||||
2.0 {2} 3160.1 31.9 49.3 1% 0.6 0.4 327.5 62.2 9.9 36% 0.1 0.3 46% 2
|
||||
3.0 {2} 2593.4 32.0 40.5 1% 0.5 0.4 102.6 50.5 2.5 62% 0.0 0.3 42% 2
|
||||
4.1 {2} 2859.4 32.0 44.7 1% 0.5 0.3 147.8 61.0 4.4 57% 0.0 0.3 40% 0
|
||||
5.1 {2} 2516.2 32.0 39.3 1% 0.4 0.3 317.5 68.8 10.7 36% 0.1 0.4 37% 0
|
||||
EOF
|
||||
|
||||
my $data = <<'EOF';
|
||||
TS 1298130002.073935000
|
||||
EOF
|
||||
|
||||
$data .= load_file(
|
||||
File::Spec->catfile( "t", "pt-diskstats", "samples", "diskstats-005.txt" )
|
||||
);
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample(
|
||||
data => $data,
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
},
|
||||
);
|
||||
|
||||
is($got, $expected, "ts line");
|
||||
}
|
||||
|
||||
for my $filename ( map "diskstats-00$_.txt", 2..4 ) {
|
||||
my $expected = load_file(
|
||||
File::Spec->catfile( "t", "pt-diskstats", "expected", "sample_$filename"),
|
||||
);
|
||||
|
||||
my $got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample(
|
||||
filename => File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via filename");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
open my $fh, "<", File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ) or die $!;
|
||||
$obj->group_by_sample(
|
||||
filehandle => $fh,
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via filehandle");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample(
|
||||
data => load_file( File::Spec->catfile( "t", "pt-diskstats", "samples", $filename ) ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via data");
|
||||
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample(
|
||||
data => "TS 1298130002.073935000\n" . load_file( File::Spec->catfile( "t", "pt-diskstats", "samples", $filename ) ),
|
||||
);
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename with an extra TS at the top");
|
||||
|
||||
$obj->filename( File::Spec->catfile( $trunk, "t", "pt-diskstats", "samples", $filename ) );
|
||||
$got = output(
|
||||
sub {
|
||||
my $orig_re = $obj->column_regex();
|
||||
$obj->column_regex(qr/./);
|
||||
$obj->group_by_sample();
|
||||
$obj->column_regex($orig_re);
|
||||
});
|
||||
|
||||
is($got, $expected, "$filename via obj->filename()");
|
||||
}
|
||||
|
Reference in New Issue
Block a user