cache.go 3.4 KB

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