metrics_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package metrics
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "sync"
  6. "testing"
  7. )
  8. const FANOUT = 128
  9. // Stop the compiler from complaining during debugging.
  10. var (
  11. _ = ioutil.Discard
  12. _ = log.LstdFlags
  13. )
  14. func BenchmarkMetrics(b *testing.B) {
  15. r := NewRegistry()
  16. c := NewRegisteredCounter("counter", r)
  17. g := NewRegisteredGauge("gauge", r)
  18. gf := NewRegisteredGaugeFloat64("gaugefloat64", r)
  19. h := NewRegisteredHistogram("histogram", r, NewUniformSample(100))
  20. m := NewRegisteredMeter("meter", r)
  21. t := NewRegisteredTimer("timer", r)
  22. RegisterDebugGCStats(r)
  23. RegisterRuntimeMemStats(r)
  24. b.ResetTimer()
  25. ch := make(chan bool)
  26. wgD := &sync.WaitGroup{}
  27. /*
  28. wgD.Add(1)
  29. go func() {
  30. defer wgD.Done()
  31. //log.Println("go CaptureDebugGCStats")
  32. for {
  33. select {
  34. case <-ch:
  35. //log.Println("done CaptureDebugGCStats")
  36. return
  37. default:
  38. CaptureDebugGCStatsOnce(r)
  39. }
  40. }
  41. }()
  42. //*/
  43. wgR := &sync.WaitGroup{}
  44. //*
  45. wgR.Add(1)
  46. go func() {
  47. defer wgR.Done()
  48. //log.Println("go CaptureRuntimeMemStats")
  49. for {
  50. select {
  51. case <-ch:
  52. //log.Println("done CaptureRuntimeMemStats")
  53. return
  54. default:
  55. CaptureRuntimeMemStatsOnce(r)
  56. }
  57. }
  58. }()
  59. //*/
  60. wgW := &sync.WaitGroup{}
  61. /*
  62. wgW.Add(1)
  63. go func() {
  64. defer wgW.Done()
  65. //log.Println("go Write")
  66. for {
  67. select {
  68. case <-ch:
  69. //log.Println("done Write")
  70. return
  71. default:
  72. WriteOnce(r, ioutil.Discard)
  73. }
  74. }
  75. }()
  76. //*/
  77. wg := &sync.WaitGroup{}
  78. wg.Add(FANOUT)
  79. for i := 0; i < FANOUT; i++ {
  80. go func(i int) {
  81. defer wg.Done()
  82. //log.Println("go", i)
  83. for i := 0; i < b.N; i++ {
  84. c.Inc(1)
  85. g.Update(int64(i))
  86. gf.Update(float64(i))
  87. h.Update(int64(i))
  88. m.Mark(1)
  89. t.Update(1)
  90. }
  91. //log.Println("done", i)
  92. }(i)
  93. }
  94. wg.Wait()
  95. close(ch)
  96. wgD.Wait()
  97. wgR.Wait()
  98. wgW.Wait()
  99. }