-
Notifications
You must be signed in to change notification settings - Fork 1
/
gpuinfocache.go
58 lines (50 loc) · 1.43 KB
/
gpuinfocache.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package serverds
import (
. "github.com/caden2016/nvidia-gpu-scheduler/api/jsonstruct"
"k8s.io/klog"
"sync"
"time"
)
func NewTTLCacheGpu(ttl time.Duration) *TTLCacheGpu {
return &TTLCacheGpu{
gpuinfo: make(map[string]*CacheGpuInfo),
cacheTTL: ttl,
rwlock: &sync.RWMutex{},
}
}
// TTLCacheGpu store for GpuInfo, in case of calling getGpuInfo echo interval PRODUCE_INTERVAL
type TTLCacheGpu struct {
gpuinfo map[string]*CacheGpuInfo
cacheTTL time.Duration
rwlock *sync.RWMutex
}
func (cg *TTLCacheGpu) GetCacheGpuInfoIgnoreTTL(did string) *GpuInfo {
cg.rwlock.RLock()
defer cg.rwlock.RUnlock()
if cg.gpuinfo[did] != nil {
klog.V(9).Infof("DevicdId:%s, get gpu info from ttlCacheGpu:%#v", did, *cg.gpuinfo[did])
return cg.gpuinfo[did].GpuInfo
}
return nil
}
func (cg *TTLCacheGpu) GetCacheGpuInfo(did string) *GpuInfo {
cg.rwlock.RLock()
defer cg.rwlock.RUnlock()
if cg.gpuinfo[did] != nil && cg.gpuinfo[did].isObjectFresh(cg.cacheTTL) {
klog.V(9).Infof("DevicdId:%s, get gpu info from ttlCacheGpu:%#v", did, *cg.gpuinfo[did])
return cg.gpuinfo[did].GpuInfo
}
return nil
}
func (cg *TTLCacheGpu) SetCacheGpuInfo(did string, cgpuinfo *CacheGpuInfo) {
cg.rwlock.Lock()
defer cg.rwlock.Unlock()
cg.gpuinfo[did] = cgpuinfo
}
type CacheGpuInfo struct {
*GpuInfo
LastUpdateTime time.Time
}
func (cgi *CacheGpuInfo) isObjectFresh(cachettl time.Duration) bool {
return time.Now().Before(cgi.LastUpdateTime.Add(cachettl))
}