Support customizing scan interval
dlsrb6342 opened this issue · comments
- I think reading stats every 5 seconds could be heavy job
- so, I want to customize scan interval but it does not support.
Exporting the cgroup stats is just reading the stats files and converting them into Metric structs. I think it has little overhead, but I didn't benchmark at all.
So, I'll consider to provide the scanInterval option if the overhead seems be high than expected after benchmarking. I'll notify you after benchmarking is done with readme update.
@dlsrb6342 I did the benchmarks with the following code. As a result, I conclude that the overhead is very small, so we don't have to worry about it.
BenchmarkLightJob-5 48688857 244.4 ns/op 0 B/op 0 allocs/op
BenchmarkLightJobWithWatchCPUUsage-5 48302185 247.0 ns/op 0 B/op 0 allocs/op
BenchmarkLightJobWithWatchMemUsage-5 47847954 247.4 ns/op 0 B/op 0 allocs/op
BenchmarkHeavyJob-5 57736 205881 ns/op 0 B/op 0 allocs/op
BenchmarkHeavyJobWithWatchCPUUsage-5 58207 208704 ns/op 2 B/op 0 allocs/op
BenchmarkHeavyJobWithWatchMemUsage-5 56606 206473 ns/op 2 B/op 0 allocs/op
func fib(n int) int64 {
if n <= 1 {
return int64(n)
}
return fib(n-1) + fib(n-2)
}
func BenchmarkLightJob(b *testing.B) {
for i := 0; i < b.N; i++ {
fib(10)
}
}
func BenchmarkLightJobWithWatchCPUUsage(b *testing.B) {
var (
qryer, _ = newQueryer()
ticker = time.NewTicker(defaultScanInterval)
)
for i := 0; i < b.N; i++ {
select {
case <-ticker.C:
_, _ = qryer.cpuUsage()
default:
fib(10)
}
}
}
func BenchmarkLightJobWithWatchMemUsage(b *testing.B) {
var (
qryer, _ = newQueryer()
ticker = time.NewTicker(defaultScanInterval)
)
for i := 0; i < b.N; i++ {
select {
case <-ticker.C:
_, _ = qryer.memUsage()
default:
fib(10)
}
}
}
func BenchmarkHeavyJob(b *testing.B) {
for i := 0; i < b.N; i++ {
fib(24)
}
}
func BenchmarkHeavyJobWithWatchCPUUsage(b *testing.B) {
var (
qryer, _ = newQueryer()
ticker = time.NewTicker(defaultScanInterval)
)
for i := 0; i < b.N; i++ {
select {
case <-ticker.C:
_, _ = qryer.cpuUsage()
default:
fib(24)
}
}
}
func BenchmarkHeavyJobWithWatchMemUsage(b *testing.B) {
var (
qryer, _ = newQueryer()
ticker = time.NewTicker(defaultScanInterval)
)
for i := 0; i < b.N; i++ {
select {
case <-ticker.C:
_, _ = qryer.memUsage()
default:
fib(24)
}
}
}
Nice one!! then can u add description about this to readme?
Sure. I added it in 96f13c6 .