Files

79 lines
3.2 KiB
PowerShell

param(
[string] $csvfile = $(throw "please provide the path to a cputarget sweep result file"),
[switch] $zerointercept = $false,
[int] $sigfigs = 5
)
function get-sigfigs(
[decimal]$value,
[int]$sigfigs
)
{
$log = [math]::Ceiling([math]::log10([math]::abs($value)))
$decimalpt = $sigfigs - $log
# if all sigfigs are above the decimal point, round off to
# appropriate power of 10
if ($decimalpt -lt 0) {
$pow = [math]::Abs($decimalpt)
$decimalpt = 0
$value = [math]::Round($value/[math]::Pow(10,$pow))*[math]::pow(10,$pow)
}
"{0:F$($decimalpt)}" -f $value
}
write-host -ForegroundColor Green CPU Target Sweep Report`n
write-host -ForegroundColor Green The following equations and coefficients are the linear
write-host -ForegroundColor Green fit to the measured results at the given write ratios.
write-host -ForegroundColor Cyan ("-"*20)
write-host -ForegroundColor Yellow NOTE: take care that these formula are only used to reason about
write-host -ForegroundColor Yellow " " the region where these values are in a linear relationship.
write-host -ForegroundColor Yellow " In particular, at high AVCPU the system may be saturated."
write-host -ForegroundColor Yellow "Use R^2 (coefficient of determination) as a quality check for the fit."
write-host -ForegroundColor Yellow "Values close to 100% mean that the data is indeed linear. If R2 is"
write-host -ForegroundColor Yellow "significantly less than 100%, a closer look at system behavior may"
write-host -ForegroundColor Yellow "be required."
if ($zerointercept) {
write-host -ForegroundColor Red NOTE: forcing to a "(AVCPU=0,IOPS=0)" intercept may introduce error
} else {
write-host -ForegroundColor Red "NOTE: with a non-zero constant coefficient, care should be used at`nlow AVCPU that the result is meaningful"
}
# do the check fit of QoS to IOPS
# this will let us check for non-CPU limited saturation (poor r2 is a giveaway)
# we can have an excellent CPU->IOPS fit but not actually have been able to stress in much CPU
# and have lots of repeated measurements as we tried to step up QoS
$h = @{}
get-linfit -csvfile $csvfile -xcol QOS -ycol IOPS -idxcol WriteRatio -zerointercept:$zerointercept |% {
$h[$_.Key] = $_
}
# now fit IOPS to Average CPU
get-linfit -csvfile $csvfile -xcol AVCPU -ycol IOPS -idxcol WriteRatio -zerointercept:$zerointercept | sort -Property Key |% {
write-host -ForegroundColor Cyan ("-"*20)
write-host $_.Key
if ($zerointercept) {
write-host ("{0} = {1}({2})" -f $_.Y,$(get-sigfigs $_.B $sigfigs),$_.X)
} else {
if ($_.A -ge 0) {
$sign = "+"
} else {
$sign = ""
}
write-host ("{0} = {1}({2}){4}{3}" -f $_.Y,$(get-sigfigs $_.B $sigfigs),$_.X,$(get-sigfigs $_.A $sigfigs),$sign)
}
write-host ("N = {1}`nR^2 goodness of fit {0:P2}" -f $_.R2,$_.N)
if ($h[$_.Key].R2 -le 0.5) {
write-host -ForegroundColor Yellow "WARNING: for $($_.Key) it does not appear that IOPS moved in"
write-host -ForegroundColor Yellow "`trelation to attempts to raise the QoS limit. Check if the"
write-host -ForegroundColor Yellow "`tsystem is storage limited for this mix."
}
}