cache.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package customcache
  2. import (
  3. "sync"
  4. "time"
  5. )
  6. var LabCache *MlabCache
  7. var duration int = 10
  8. type MlabCache struct {
  9. Cache map[string]map[string]float64
  10. Mux sync.Mutex
  11. Timeout *time.Ticker
  12. }
  13. func init() {
  14. LabCache = &MlabCache{
  15. Cache: map[string]map[string]float64{
  16. "kube-01": map[string]float64{
  17. "ipc": -1,
  18. "mem_read": -1,
  19. "mem_write": -1,
  20. "c6res": -1,
  21. },
  22. "kube-02": map[string]float64{
  23. "ipc": -1,
  24. "mem_read": -1,
  25. "mem_write": -1,
  26. "c6res": -1,
  27. },
  28. "kube-03": map[string]float64{
  29. "ipc": -1,
  30. "mem_read": -1,
  31. "mem_write": -1,
  32. "c6res": -1,
  33. },
  34. "kube-04": map[string]float64{
  35. "ipc": -1,
  36. "mem_read": -1,
  37. "mem_write": -1,
  38. "c6res": -1,
  39. },
  40. "kube-05": map[string]float64{
  41. "ipc": -1,
  42. "mem_read": -1,
  43. "mem_write": -1,
  44. "c6res": -1,
  45. },
  46. "kube-06": map[string]float64{
  47. "ipc": -1,
  48. "mem_read": -1,
  49. "mem_write": -1,
  50. "c6res": -1,
  51. },
  52. "kube-07": map[string]float64{
  53. "ipc": -1,
  54. "mem_read": -1,
  55. "mem_write": -1,
  56. "c6res": -1,
  57. },
  58. "kube-08": map[string]float64{
  59. "ipc": -1,
  60. "mem_read": -1,
  61. "mem_write": -1,
  62. "c6res": -1,
  63. },
  64. },
  65. }
  66. LabCache.Timeout = time.NewTicker(time.Duration(10) * time.Second)
  67. }
  68. // func New() {
  69. // }
  70. // var Τimeout *time.Ticker
  71. func (c *MlabCache) CleanCache() {
  72. c.Mux.Lock()
  73. for k, v := range c.Cache {
  74. for key, _ := range v {
  75. c.Cache[k][key] = -1
  76. }
  77. }
  78. // c.Cache = map[string]map[string]float64{
  79. // "kube-01": map[string]float64{
  80. // "ipc": -1,
  81. // "mem_read": -1,
  82. // "mem_write": -1,
  83. // "c6res": -1,
  84. // },
  85. // "kube-02": map[string]float64{
  86. // "ipc": -1,
  87. // "mem_read": -1,
  88. // "mem_write": -1,
  89. // "c6res": -1,
  90. // },
  91. // "kube-03": map[string]float64{
  92. // "ipc": -1,
  93. // "mem_read": -1,
  94. // "mem_write": -1,
  95. // "c6res": -1,
  96. // },
  97. // "kube-04": map[string]float64{
  98. // "ipc": -1,
  99. // "mem_read": -1,
  100. // "mem_write": -1,
  101. // "c6res": -1,
  102. // },
  103. // "kube-05": map[string]float64{
  104. // "ipc": -1,
  105. // "mem_read": -1,
  106. // "mem_write": -1,
  107. // "c6res": -1,
  108. // },
  109. // "kube-06": map[string]float64{
  110. // "ipc": -1,
  111. // "mem_read": -1,
  112. // "mem_write": -1,
  113. // "c6res": -1,
  114. // },
  115. // "kube-07": map[string]float64{
  116. // "ipc": -1,
  117. // "mem_read": -1,
  118. // "mem_write": -1,
  119. // "c6res": -1,
  120. // },
  121. // "kube-08": map[string]float64{
  122. // "ipc": -1,
  123. // "mem_read": -1,
  124. // "mem_write": -1,
  125. // "c6res": -1,
  126. // },
  127. // }
  128. //c.Timeout.Stop()
  129. //Timeout := time.NewTicker(time.Duration(10 * time.Second))
  130. c.Mux.Unlock()
  131. }
  132. func (c *MlabCache) UpdateCache(input map[string]float64, c6res float64, nodename string) error {
  133. c.Mux.Lock()
  134. c.Cache[nodename]["ipc"] = input["ipc"]
  135. c.Cache[nodename]["mem_read"] = input["mem_read"]
  136. c.Cache[nodename]["mem_write"] = input["mem_write"]
  137. c.Cache[nodename]["c6res"] = c6res
  138. // Reset the ticker
  139. c.Timeout = time.NewTicker(time.Duration(duration) * time.Second)
  140. //klog.Infof("Reset the Ticker")
  141. c.Mux.Unlock()
  142. //klog.Infof("After cache update")
  143. c.printCached(nodename)
  144. return nil
  145. }
  146. func (c *MlabCache) AddAppMetrics(app map[string]float64, nodename string, numCores int) {
  147. c.Mux.Lock()
  148. c.Cache[nodename]["mem_read"] += app["mem_read"]
  149. c.Cache[nodename]["mem_write"] += app["mem_write"]
  150. //TODO
  151. // handle c6res addition
  152. c.Cache[nodename]["c6res"] -= (1 - app["c6res"]) / float64(100*numCores)
  153. if c.Cache[nodename]["c6res"] <= 0 {
  154. c.Cache[nodename]["c6res"] = 0.00000001
  155. }
  156. //TODO
  157. // handle ipc addition
  158. c.Mux.Unlock()
  159. //klog.Infof("After application metrics addition")
  160. c.printCached(nodename)
  161. }
  162. func (c *MlabCache) printCached(nodename string) {
  163. //klog.Infof("IPC: %v, Reads: %v, Writes: %v, C6res: %v", c.Cache[nodename]["ipc"], c.Cache[nodename]["mem_read"],
  164. //c.Cache[nodename]["mem_write"], c.Cache[nodename]["c6res"])
  165. }