Set default percentile window to 256 samples
This commit is contained in:
parent
b6f0fc79cb
commit
727370fedc
3 changed files with 20 additions and 10 deletions
|
@ -19,9 +19,19 @@ type Percentile struct {
|
|||
value uint64 // These bits are really a float64.
|
||||
}
|
||||
|
||||
// NewPercentile returns a Percentile with a given threshold
|
||||
// NewPercentile returns a Percentile with a given threshold.
|
||||
func NewPercentile(percentile float64) *Percentile {
|
||||
return &Percentile{
|
||||
percentile: percentile,
|
||||
|
||||
// 256 samples is fast, and accurate for most distributions.
|
||||
values: make([]float64, 0, 256),
|
||||
}
|
||||
}
|
||||
|
||||
// NewPercentileWithWindow returns a Percentile with a given threshold
|
||||
// and window size (accuracy).
|
||||
func NewPercentile(percentile float64, sampleWindow int) *Percentile {
|
||||
func NewPercentileWithWindow(percentile float64, sampleWindow int) *Percentile {
|
||||
return &Percentile{
|
||||
percentile: percentile,
|
||||
values: make([]float64, 0, sampleWindow),
|
||||
|
|
|
@ -45,7 +45,7 @@ func logNorm(n int, scale float64) sort.Float64Slice {
|
|||
}
|
||||
|
||||
func testSlice(t *testing.T, numbers sort.Float64Slice, percentile float64) {
|
||||
p := NewPercentile(percentile, 256)
|
||||
p := NewPercentile(percentile)
|
||||
|
||||
for i := 0; i < len(numbers); i++ {
|
||||
p.AddSample(numbers[i])
|
||||
|
@ -53,10 +53,10 @@ func testSlice(t *testing.T, numbers sort.Float64Slice, percentile float64) {
|
|||
|
||||
sort.Sort(numbers)
|
||||
got := p.Value()
|
||||
expected := numbers[round(float64(len(numbers))*percentile)]
|
||||
index := round(float64(len(numbers)) * percentile)
|
||||
|
||||
if got != expected {
|
||||
t.Errorf("Percentile incorrect\n actual: %f\nexpected: %f\n error: %f%%\n", got, expected, (got-expected)/expected*100)
|
||||
if got != numbers[index] && got != numbers[index-1] && got != numbers[index+1] {
|
||||
t.Errorf("Percentile incorrect\n actual: %f\nexpected: %f, %f, %f\n", got, numbers[index-1], numbers[index], numbers[index+1])
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ func BenchmarkLNPercentiles256(b *testing.B) {
|
|||
}
|
||||
|
||||
func benchmarkSlice(b *testing.B, numbers sort.Float64Slice, window int, percentile float64) {
|
||||
p := NewPercentile(percentile, window)
|
||||
p := NewPercentileWithWindow(percentile, window)
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
|
|
|
@ -101,9 +101,9 @@ func New(chanSize int) *Stats {
|
|||
|
||||
responseTimeEvents: make(chan time.Duration, chanSize),
|
||||
ResponseTime: PercentileTimes{
|
||||
P50: NewPercentile(0.5, 128),
|
||||
P90: NewPercentile(0.9, 128),
|
||||
P95: NewPercentile(0.95, 128),
|
||||
P50: NewPercentile(0.5),
|
||||
P90: NewPercentile(0.9),
|
||||
P95: NewPercentile(0.95),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue