cache.go 3.5 KB

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