diff --git a/Ceph/Script/cephDiskPerf.pl b/Ceph/Script/cephDiskPerf.pl index e105b9a26ac7c56e99780b8523b404fd0714b3f7..cbdddb9a93b491c175a596a3504cb7d14d5db9ba 100755 --- a/Ceph/Script/cephDiskPerf.pl +++ b/Ceph/Script/cephDiskPerf.pl @@ -40,7 +40,7 @@ chomp $_sudo; ### Options our($opt_exec, $opt_exec2, $opt_become, $opt_cluster, $opt_user, $opt_keyring, $opt_monhost, - $opt_thishost, $opt_iwant1, $opt_iwant2, $opt_select, $opt_range, $opt_debug, $opt_h); + $opt_thishost, $opt_iwant1, $opt_iwant2, $opt_sizeOrDev, $opt_select, $opt_range, $opt_debug, $opt_h); if (@ARGV > 0) { GetOptions("e=s"=>\$opt_exec, "l=s"=>\$opt_exec2, @@ -52,7 +52,8 @@ if (@ARGV > 0) { "t" =>\$opt_thishost, "i=s"=>\$opt_iwant1, "w=s"=>\$opt_iwant2, - "s=f"=>\$opt_select, + "p" =>\$opt_sizeOrDev, + "s=s"=>\$opt_select, "r=f"=>\$opt_range, "d" =>\$opt_debug, "h" =>\$opt_h) || fail_usage; @@ -103,15 +104,23 @@ my $thisHost = 0; if (defined $opt_thishost) { $thisHost = 1; } -# +# 0 is default, group by device class +# 1 group by disk size +my $selectSizeOrDev = 0; +if (defined $opt_sizeOrDev) { + $selectSizeOrDev = 1; +} my $selectSize = 0.; if (defined $opt_select) { $selectSize = $opt_select; + if ($selectSizeOrDev) { + $selectSize += 0.; + } } -unless ($selectSize >= 0.) { - fail_usage "SelectSize option -s expects positive float."; +if ($selectSizeOrDev > 0 and $selectSize < 0.) { + fail_usage "SelectSize option -s expects positive float, when used together with -p option."; } -my $range = 0.; +my $range = .1; if (defined $opt_range) { $range = $opt_range; } @@ -144,6 +153,7 @@ if ($thisHost) { my @_dataSize = `$cephCmd osd df`; chomp @_dataSize; my %dataSizeH = (); +my %dataTypeH = (); foreach my $_lineS (@_dataSize) { # Removing leading and trailing blanks @@ -152,7 +162,8 @@ foreach my $_lineS (@_dataSize) my @fields = split(/\s+/, $_lineS); next unless ($fields[0] =~ /^\d+$/); my $osdNum = $fields[0]; - my $size = $fields[3]; + my $type = $fields[1]; + my $size = $fields[4]; my $sizeLastChar = lc(chop($size)); if ($sizeLastChar eq "t") { $size = $size * 1000.; @@ -162,6 +173,7 @@ foreach my $_lineS (@_dataSize) $size = $fields[3]; } push (@{$dataSizeH{$size}}, $osdNum); + push (@{$dataTypeH{$type}}, $osdNum); } # Fetch the data from 'ceph osd perf' and put it in an hash indexed by osd# @@ -188,24 +200,38 @@ foreach (sort {$a<=> $b} keys %dataHash) { my $lastKey = 0.; my $selectMin = 0.; my $selectMax = (sort {$b<=>$a} keys %{dataSizeH})[0] * 1.1; -if ($selectSize > 0) { - $lastKey = $selectSize; - $selectMin = $selectSize * (1. - ($range/100.)); - $selectMin = 0 if ($selectMin < 0.); - $selectMax = $selectSize * (1. + ($range/100.)); +if ($selectSizeOrDev) { + if ($selectSize > 0) { + $lastKey = $selectSize; + $selectMin = $selectSize * (1. - ($range/100.)); + $selectMin = 0 if ($selectMin < 0.); + $selectMax = $selectSize * (1. + ($range/100.)); + } } print "Select: $selectMin - $selectSize - $selectMax\n" if (defined $opt_debug); my @latArray = (); my $count = 0; -foreach my $aKey (sort {$a<=>$b} keys %dataSizeH) { - next unless $aKey >= $selectMin; - next if $aKey >= $selectMax; - foreach my $elem (sort {$a<=> $b} @{$dataSizeH{$aKey}}) { - next if ($thisHost && not exists $osdThisHost{$elem}); - print "Push: OSD=$elem size=$aKey lat=".$dataHash{$elem}{$perfType}."\n" if (defined $opt_debug); - push (@latArray, $dataHash{$elem}{$perfType}); - $count++; +if ($selectSizeOrDev) { + foreach my $aKey (sort {$a<=>$b} keys %dataSizeH) { + next unless $aKey >= $selectMin; + next if $aKey >= $selectMax; + foreach my $elem (sort {$a<=> $b} @{$dataSizeH{$aKey}}) { + next if ($thisHost && not exists $osdThisHost{$elem}); + print "Push: OSD=$elem size=$aKey lat=".$dataHash{$elem}{$perfType}."\n" if (defined $opt_debug); + push (@latArray, $dataHash{$elem}{$perfType}); + $count++; + } + } +} else { + foreach my $aKey (sort keys %dataTypeH) { + next unless $aKey =~ $selectSize; + foreach my $elem (sort {$a<=> $b} @{$dataTypeH{$aKey}}) { + next if ($thisHost && not exists $osdThisHost{$elem}); + print "Push: OSD=$elem size=$aKey lat=".$dataHash{$elem}{$perfType}."\n" if (defined $opt_debug); + push (@latArray, $dataHash{$elem}{$perfType}); + $count++; + } } } print "Count: $count\n" if (defined $opt_debug); diff --git a/Ceph/Script/queryCephDisks.pl b/Ceph/Script/queryCephDisks.pl index b29092c98fab68dcaa60ba68211ed9a4a61cb63f..1d947e6a9ee674731655e3dbbb34427f1dfdbee1 100755 --- a/Ceph/Script/queryCephDisks.pl +++ b/Ceph/Script/queryCephDisks.pl @@ -18,15 +18,18 @@ ################################################################################ # # Examples: -# *) return all disks grouped by size in Json format: +# *) return all disks grouped by device class in Json format: # queryCephDisks.pl -j # key name will be #OSDSIZE +# *) return disks of given device class in Json format: +# queryCephDisks.pl -j -q hdd +# key name will be #OSDSIZE # *) return all disks grouped by size in Json format, grouping disks whose # sizes differ less than <range> % -# queryCephDisks.pl -j -r <range> +# queryCephDisks.pl -j -p -r <range> # key name will be #OSDSIZE # *) return disks of given size in Json format: -# queryCephDisks.pl -j -s <size> +# queryCephDisks.pl -j -p -s <size> # key name will be #OSDSIZE # *) return disks of given size in Json format, grouping disks whose sizes # differ less than <range> % @@ -37,7 +40,7 @@ # key name will be #OSDSIZETHIS # *) -t can be combined with -s and or -r, same as above # key name will be #OSDSIZETHIS -# *) without -j, return number of diskssummed over all groups +# *) without -j, return number of disks summed over all groups # ################################################################################ use strict; @@ -60,7 +63,7 @@ chomp $_sudo; ### Options our($opt_exec, $opt_exec2, $opt_become, $opt_cluster, $opt_user, $opt_keyring, $opt_monhost, - $opt_json, $opt_thishost, $opt_sizeOrDev, $opt_devtype, $opt_select, $opt_range, $opt_debug, $opt_h); + $opt_json, $opt_thishost, $opt_sizeOrDev, $opt_select, $opt_range, $opt_debug, $opt_h); if (@ARGV > 0) { GetOptions("e=s"=>\$opt_exec, "l=s"=>\$opt_exec2, @@ -72,8 +75,7 @@ if (@ARGV > 0) { "j" =>\$opt_json, "t" =>\$opt_thishost, "p" =>\$opt_sizeOrDev, - "w=s"=>\$opt_devtype, - "s=f"=>\$opt_select, + "s=s"=>\$opt_select, "r=f"=>\$opt_range, "d" =>\$opt_debug, "h" =>\$opt_h) || fail_usage; @@ -126,17 +128,17 @@ if (defined $opt_sizeOrDev) { my $selectSize = 0.; if (defined $opt_select) { $selectSize = $opt_select; + if ($selectSizeOrDev) { + $selectSize += 0.; + } } -my $selectType = 0.; -if (defined $opt_devtype) { - $selectType = $opt_devtype; +unless ($selectSizeOrDev and $selectSize >= 0.) { + fail_usage "SelectSize option -s expects positive float, when used together with -p option."; } +# my $theJsonStringNum = $theJsonString."NUM"; # -unless ($selectSize >= 0.) { - fail_usage "SelectSize option -s expects positive float."; -} -my $range = 0.; +my $range = .1; if (defined $opt_range) { $range = $opt_range; } @@ -144,7 +146,7 @@ unless ($range >= 0.) { fail_usage "Range option -r expects positive float."; } -# When requested, fetch list of OSDs on this host +# Possibly fetch list of OSDs on this host my @_systemctl = (); my %osdThisHost = (); if ($thisHost) { @@ -198,12 +200,14 @@ foreach my $_line (@_data) my $lastKey = 0.; my $selectMin = 0.; my $selectMax = (sort {$b<=>$a} keys %{dataHash})[0] * 1.1; -if ($selectSize > 0) { - $lastKey = $selectSize; - $selectMin = $selectSize * (1. - ($range/100.)); - $selectMin = 0 if ($selectMin < 0.); - $selectMax = $selectSize * (1. + ($range/100.)); -} +if ($selectSizeOrDev) { + if ($selectSize > 0) { + $lastKey = $selectSize; + $selectMin = $selectSize * (1. - ($range/100.)); + $selectMin = 0 if ($selectMin < 0.); + $selectMax = $selectSize * (1. + ($range/100.)); + } +} print "Select: $selectMin - $selectSize - $selectMax\n" if (defined $opt_debug); if ($selectSizeOrDev > 0) { @@ -224,7 +228,6 @@ if ($selectSizeOrDev > 0) { } @{$finalHash{$lastKey}} = sort { $a <=> $b } @{$finalHash{$lastKey}} if (scalar @{$finalHash{$lastKey}}); } -# my $aLine = "Key $aKey: "; foreach (@{$dataHash{$aKey}}) { $aLine .= " ".$_; @@ -243,7 +246,8 @@ if ($selectSizeOrDev > 0) { } } else { foreach my $aKey (sort keys %typeHash) { - next unless $aKey =~ /$selectType/; + print "aKey: $aKey Select: $selectSize\n"; + next if ($selectSize =~ /[a-zA-Z]+/ and $aKey !~ /$selectSize/); @{$finalHash{$aKey}} = (); if ($thisHost) { foreach my $osdNum (@{$typeHash{$aKey}}) {