79 lines
3.2 KiB
PowerShell
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."
|
|
}
|
|
} |