Fix for 952722: pt-summary to show information about Fusion-io cards

This commit is contained in:
Brian Fraser
2012-08-24 17:01:47 -03:00
parent 1c3cde4e96
commit 24ae24a64e
13 changed files with 716 additions and 2 deletions

View File

@@ -56,6 +56,7 @@ setup_commands () {
CMD_LSB_RELEASE="$( _which lsb_release 2>/dev/null )"
CMD_ETHTOOL="$( _which ethtool 2>/dev/null )"
CMD_GETCONF="$( _which getconf 2>/dev/null )"
CMD_FIO_STATUS="$( _which fio-status 2>/dev/null )"
}
collect_system_data () { local PTFUNCNAME=collect_system_data;
@@ -132,6 +133,9 @@ collect_system_data () { local PTFUNCNAME=collect_system_data;
fi
fi
# Fusion-io cards
fio_status_minus_a "$data_dir/fusion-io_card"
# Clean the data directory, don't leave empty files
for file in $data_dir/*; do
# The vmstat file gets special treatmeant, see above.
@@ -140,6 +144,59 @@ collect_system_data () { local PTFUNCNAME=collect_system_data;
done
}
fio_status_minus_a () {
local file="$1"
local full_output="${file}_original_output"
[ -z "$CMD_FIO_STATUS" ] && return;
$CMD_FIO_STATUS -a > "$full_output"
cat <<'EOP' > "$PT_TMPDIR/fio_status_format.pl"
my $tmp_adapter;
while (<>) {
if ( /Fusion-io driver version:\s*(.+)/ ) {
print "driver_version $1"
}
next unless /^Adapter:(.+)/;
$tmp_adapter = $1;
last;
}
$/ = "\nAdapter: ";
$_ = $tmp_adapter . "\n" . scalar(<>);
my @adapters;
do {
my ($adapter, $adapter_general) = /\s*(.+)\s*\n\s*(.+)/m;
$adapter =~ tr/ /:/;
$adapter .= "::" . scalar(@adapters); # To differentiate two adapters with the same name
push @adapters, $adapter;
my ($connected_modules) = /Connected ioDimm modules?:\s*\n(.+?\n)\n/smg;
my @connected_modules = $connected_modules =~ /\s+([^:]+):.+\n/g;
print "${adapter}_general $adapter_general";
print "${adapter}_modules @connected_modules";
for my $module (@connected_modules) {
my ($attached, $general, $firmware, $media_status) = /
^ \s* $module \s+ (Attached[^\n]+) \n
\s+ ([^\n]+) \n # All the second line
.+? (Firmware\s+[^\n]+) \n
.+? (Media \s+ status:[^\n]+)
/xsm;
print "${adapter}_${module}_attached_as $attached";
print "${adapter}_${module}_general $general";
print "${adapter}_${module}_firmware $firmware";
print "${adapter}_${module}_media_status $media_status";
}
} while <>;
print "adapters @adapters\n";
exit;
EOP
perl -wln "$PT_TMPDIR/fio_status_format.pl" "$full_output" > "$file"
}
linux_exclusive_collection () { local PTFUNCNAME=linux_exclusive_collection;
local data_dir="$1"