Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
gpuhw
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Odysseus
gpuhw
Commits
f9fd9a12
Commit
f9fd9a12
authored
May 08, 2024
by
Your Name
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update interface param
parent
d9cbd940
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
199 additions
and
143 deletions
+199
-143
cpu.go
cpu.go
+35
-22
swagger.yaml
docs/swagger.yaml
+39
-30
gpu.go
gpu.go
+94
-60
main.go
main.go
+11
-11
mem.go
mem.go
+8
-8
network.go
network.go
+12
-12
No files found.
cpu.go
View file @
f9fd9a12
...
...
@@ -15,45 +15,58 @@ import (
// "github.com/spf13/cobra"
)
type
Cpus
struct
{
TotalUtil
int64
`json:"total_util"`
List
[]
Cpu
`json:"list"`
}
// cpu{
// seq integer($int64)
// model string
// addr
// thread integer($int64)
// core integer($int64)
// }
type
Cpu
struct
{
Seq
int64
`json:"seq"`
Model
string
`json:"model"`
Thread
int64
`json:"thread"`
Core
int64
`json:"core"`
Model
string
`json:"model"`
Number
int64
`json:"number"`
Cores
int64
`json:"cores"`
Threads
int64
`json:"threads"`
Usage
int64
`json:"usage"`
}
// type Cpu struct {
// Seq int64 `json:"seq"`
// Model string `json:"model"`
// Thread int64 `json:"thread"`
// Core int64 `json:"core"`
// }
// Gpu
func
(
c
*
ProApi
)
Cpus
()
(
Cpu
s
,
error
)
{
func
(
c
*
ProApi
)
Cpus
()
(
Cpu
,
error
)
{
totalUtil
,
err
:=
c
.
CpuTotalUtil
()
if
err
!=
nil
{
return
Cpu
s
{},
err
return
Cpu
{},
err
}
// inCpus := make(map[string]Cpu)
modelname
,
core
,
thread
,
err
:=
c
.
CpuItems
()
if
err
!=
nil
{
return
Cpu
s
{},
err
return
Cpu
{},
err
}
res
:=
make
([]
Cpu
,
0
,
1
)
res
=
append
(
res
,
Cpu
{
Model
:
modelname
,
Thread
:
int64
(
thread
)
+
1
,
Core
:
int64
(
core
)
+
1
,
})
result
:=
Cpus
{
TotalUtil
:
totalUtil
,
List
:
res
,
// res := make([]Cpu, 0, 1)
// res = append(res, Cpu{
// Model: modelname,
// Threads: int64(thread) + 1,
// Cores: int64(core) + 1,
// })
result
:=
Cpu
{
Usage
:
totalUtil
,
Model
:
modelname
,
Threads
:
int64
(
thread
)
+
1
,
Cores
:
int64
(
core
)
+
1
,
}
return
result
,
nil
...
...
docs/swagger.yaml
View file @
f9fd9a12
...
...
@@ -74,11 +74,12 @@ paths:
schema
:
type
:
object
properties
:
data
:
hardware
:
$ref
:
"
#/components/schemas/hw"
code
:
type
:
integer
format
:
int64
format
:
int64
enum
:
[
200
,
500
]
msg
:
type
:
string
components
:
...
...
@@ -104,37 +105,41 @@ components:
hw
:
type
:
object
properties
:
gpus
:
type
:
array
items
:
$ref
:
"
#/components/schemas/gpu"
cpus
:
CPU
:
type
:
object
properties
:
total_util
:
model
:
type
:
string
number
:
type
:
integer
format
:
int64
list
:
type
:
array
items
:
$ref
:
"
#/components/schemas/cpu"
mem
:
format
:
int64
cores
:
type
:
integer
format
:
int64
threads
:
type
:
integer
format
:
int64
usage
:
type
:
integer
format
:
int64
GPU
:
type
:
array
items
:
$ref
:
"
#/components/schemas/gpu"
RAM
:
type
:
object
properties
:
mem_
total
:
total
:
type
:
integer
format
:
int64
mem_
free
:
free
:
type
:
integer
format
:
int64
mem_util
:
type
:
integer
format
:
int64
disk
:
DISK
:
type
:
array
items
:
$ref
:
"
#/components/schemas/filesystem"
networks
:
NET
:
type
:
array
items
:
$ref
:
"
#/components/schemas/network"
...
...
@@ -174,27 +179,31 @@ components:
seq
:
type
:
integer
format
:
int64
uuid
:
type
:
string
model
:
type
:
string
mem_util
:
performance
:
type
:
integer
format
:
int64
gpu_util
:
format
:
int64
power_rating
:
type
:
integer
format
:
int64
format
:
int64
mem_total
:
type
:
integer
format
:
int64
mem_free
:
type
:
integer
format
:
int64
power
:
format
:
int64
usage
:
type
:
integer
format
:
int64
gpu_temp
:
format
:
int64
temp
:
type
:
integer
format
:
int64
power_rt
:
type
:
integer
format
:
int64
cpu
:
type
:
object
properties
:
...
...
gpu.go
View file @
f9fd9a12
...
...
@@ -11,15 +11,48 @@ import (
"github.com/prometheus/common/model"
)
// seq:
// type: integer
// format: int64
// uuid:
// type: string
// model:
// type: string
// performance:
// type: integer
// format: int64
// power_rating:
// type: integer
// format: int64
// mem_total:
// type: integer
// format: int64
// mem_free:
// type: integer
// format: int64
// usage:
// type: integer
// format: int64
// temp:
// type: integer
// format: int64
// power_rt:
// type: integer
// format: int64
type
Gpu
struct
{
Seq
int
`json:"seq"`
Model
string
`json:"model"`
MemUtil
int64
`json:"mem_util"`
GpuUtil
int64
`json:"gpu_util"`
MemTotal
int64
`json:"mem_total"`
MemFree
int64
`json:"mem_free"`
Power
int64
`json:"power"`
GpuTemp
int64
`json:"gpu_temp"`
Seq
int
`json:"seq"`
UUIDStr
string
`json:"uuid"`
Model
string
`json:"model"`
Performance
int64
`json:"performance"`
PowerRating
int64
`json:"power_rating"`
MemTotal
int64
`json:"mem_total"`
MemFree
int64
`json:"mem_free"`
//performance
GpuUtil
int64
`json:"usage"`
GpuTemp
int64
`json:"temp"`
// MemUtil int64 `json:"mem_util"`
Power
int64
`json:"power_rt"`
}
// Gpu
...
...
@@ -33,13 +66,13 @@ func (c *ProApi) Gpus() ([]Gpu, error) {
return
nil
,
err
}
gpuMemUtil
,
err
:=
c
.
GpuMemUtil
(
gpuUtil
)
//
gpuMemUtil, err := c.GpuMemUtil(gpuUtil)
if
err
!=
nil
{
return
nil
,
err
}
//
if err != nil {
//
return nil, err
//
}
powerUsage
,
err
:=
c
.
GpuPowerUsage
(
gpu
Mem
Util
)
powerUsage
,
err
:=
c
.
GpuPowerUsage
(
gpuUtil
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -63,7 +96,8 @@ func (c *ProApi) Gpus() ([]Gpu, error) {
res
:=
make
([]
Gpu
,
0
,
8
)
for
_
,
gpu
:=
range
gpuMemFree
{
for
uuidStr
,
gpu
:=
range
gpuMemFree
{
gpu
.
UUIDStr
=
uuidStr
res
=
append
(
res
,
gpu
)
}
...
...
@@ -140,67 +174,67 @@ func (c *ProApi) GpuUtil(inGpus map[string]Gpu) (map[string]Gpu, error) {
return
inGpus
,
nil
}
func
(
c
*
ProApi
)
GpuMemUtil
(
inGpus
map
[
string
]
Gpu
)
(
map
[
string
]
Gpu
,
error
)
{
//
func (c *ProApi) GpuMemUtil(inGpus map[string]Gpu) (map[string]Gpu, error) {
// outGpus := make(map[string]Gpu, 8)
//
// outGpus := make(map[string]Gpu, 8)
ctx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
10
*
time
.
Second
)
defer
cancel
()
//
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
//
defer cancel()
gpuResult
,
gpuWarnings
,
err
:=
c
.
API
.
Query
(
ctx
,
"DCGM_FI_DEV_MEM_COPY_UTIL"
,
time
.
Now
(),
v1
.
WithTimeout
(
5
*
time
.
Second
))
if
err
!=
nil
{
return
nil
,
err
}
if
len
(
gpuWarnings
)
>
0
{
fmt
.
Printf
(
"Warnings: %v
\n
"
,
gpuWarnings
)
}
//
gpuResult, gpuWarnings, err := c.API.Query(ctx, "DCGM_FI_DEV_MEM_COPY_UTIL", time.Now(), v1.WithTimeout(5*time.Second))
//
if err != nil {
//
return nil, err
//
}
//
if len(gpuWarnings) > 0 {
//
fmt.Printf("Warnings: %v\n", gpuWarnings)
//
}
switch
{
case
gpuResult
.
Type
()
==
model
.
ValVector
:
//
switch {
//
case gpuResult.Type() == model.ValVector:
vectorVal
:=
gpuResult
.
(
model
.
Vector
)
//
vectorVal := gpuResult.(model.Vector)
for
_
,
elem
:=
range
vectorVal
{
//
for _, elem := range vectorVal {
uuidStr
:=
""
//
uuidStr := ""
if
uuid
,
ok
:=
elem
.
Metric
[
"UUID"
];
ok
{
uuidStr
=
string
(
uuid
)
}
else
{
continue
}
//
if uuid, ok := elem.Metric["UUID"]; ok {
//
uuidStr = string(uuid)
//
} else {
//
continue
//
}
gpu
:=
Gpu
{}
if
oldV
,
ok
:=
inGpus
[
uuidStr
];
ok
{
gpu
=
oldV
}
else
{
//
gpu := Gpu{}
//
if oldV, ok := inGpus[uuidStr]; ok {
//
gpu = oldV
//
} else {
if
idxAsStr
,
ok
:=
elem
.
Metric
[
"gpu"
];
ok
{
seq
,
err
:=
strconv
.
Atoi
(
string
(
idxAsStr
))
if
err
!=
nil
{
return
nil
,
err
}
gpu
.
Seq
=
seq
}
else
{
continue
}
//
if idxAsStr, ok := elem.Metric["gpu"]; ok {
//
seq, err := strconv.Atoi(string(idxAsStr))
//
if err != nil {
//
return nil, err
//
}
//
gpu.Seq = seq
//
} else {
//
continue
//
}
if
modelName
,
ok
:=
elem
.
Metric
[
"modelName"
];
ok
{
gpu
.
Model
=
string
(
modelName
)
}
else
{
continue
}
}
//
if modelName, ok := elem.Metric["modelName"]; ok {
//
gpu.Model = string(modelName)
//
} else {
//
continue
//
}
//
}
gpu
.
MemUtil
=
int64
(
elem
.
Value
)
//
gpu.MemUtil = int64(elem.Value)
inGpus
[
uuidStr
]
=
gpu
//
inGpus[uuidStr] = gpu
}
}
//
}
//
}
return
inGpus
,
nil
}
//
return inGpus, nil
//
}
func
(
c
*
ProApi
)
GpuPowerUsage
(
inGpus
map
[
string
]
Gpu
)
(
map
[
string
]
Gpu
,
error
)
{
...
...
main.go
View file @
f9fd9a12
...
...
@@ -48,7 +48,7 @@ func main() {
if
err
!=
nil
{
fmt
.
Println
(
"gpu error"
,
err
.
Error
())
res
.
Msg
=
err
.
Error
()
res
.
Code
=
2
res
.
Code
=
500
}
res
.
Data
.
Gpus
=
gpus
...
...
@@ -58,7 +58,7 @@ func main() {
if
err
!=
nil
{
fmt
.
Println
(
"cpu error"
,
err
.
Error
())
res
.
Msg
=
err
.
Error
()
res
.
Code
=
2
res
.
Code
=
500
}
res
.
Data
.
Cpus
=
cpus
...
...
@@ -68,7 +68,7 @@ func main() {
if
err
!=
nil
{
fmt
.
Println
(
"network error"
,
err
.
Error
())
res
.
Msg
=
err
.
Error
()
res
.
Code
=
2
res
.
Code
=
500
}
res
.
Data
.
Networks
=
networks
...
...
@@ -78,7 +78,7 @@ func main() {
if
err
!=
nil
{
fmt
.
Println
(
"disks error"
,
err
.
Error
())
res
.
Msg
=
err
.
Error
()
res
.
Code
=
2
res
.
Code
=
500
}
res
.
Data
.
Disk
=
filesystems
...
...
@@ -88,12 +88,12 @@ func main() {
if
err
!=
nil
{
fmt
.
Println
(
"mem error"
,
err
.
Error
())
res
.
Msg
=
err
.
Error
()
res
.
Code
=
2
res
.
Code
=
500
}
res
.
Data
.
Mem
=
mem
res
.
Code
=
1
res
.
Code
=
200
return
c
.
JSON
(
&
res
)
})
...
...
@@ -295,9 +295,9 @@ type NewResponse struct {
}
type
Data
struct
{
Gpus
[]
Gpu
`json:"gpus
"`
Cpus
Cpus
`json:"cpus
"`
Disk
[]
FileSystem
`json:"
disk
"`
Networks
[]
Network
`json:"
networks
"`
Mem
Mem
`json:"
mem
"`
Cpus
Cpu
`json:"CPU
"`
Gpus
[]
Gpu
`json:"GPU
"`
Disk
[]
FileSystem
`json:"
DISK
"`
Networks
[]
Network
`json:"
NET
"`
Mem
Mem
`json:"
RAM
"`
}
mem.go
View file @
f9fd9a12
...
...
@@ -14,9 +14,9 @@ import (
)
type
Mem
struct
{
Total
int64
`json:"
mem_
total"`
Free
int64
`json:"
mem_
free"`
Util
int64
`json:"mem_util"`
Total
int64
`json:"total"`
Free
int64
`json:"free"`
//
Util int64 `json:"mem_util"`
}
func
(
c
*
ProApi
)
Mem
()
(
Mem
,
error
)
{
...
...
@@ -32,16 +32,16 @@ func (c *ProApi) Mem() (Mem, error) {
if
err
!=
nil
{
return
Mem
{},
err
}
util
,
err
:=
c
.
MemUtil
()
//
util, err := c.MemUtil()
if
err
!=
nil
{
return
Mem
{},
err
}
//
if err != nil {
//
return Mem{}, err
//
}
return
Mem
{
Total
:
total
,
Free
:
free
,
Util
:
util
,
//
Util: util,
},
nil
}
...
...
network.go
View file @
f9fd9a12
...
...
@@ -73,18 +73,18 @@ func (c *ProApi) Networks() ([]Network, error) {
res
=
append
(
res
,
n
)
}
winRes
,
err
:=
GetNics
(
"ipconfig"
)
if
err
!=
nil
{
return
nil
,
err
}
for
_
,
v
:=
range
winRes
{
res
=
append
(
res
,
Network
{
Device
:
v
.
Device
,
Mac
:
v
.
MAC
,
})
}
//
winRes, err := GetNics("ipconfig")
//
if err != nil {
//
return nil, err
//
}
//
for _, v := range winRes {
//
res = append(res, Network{
//
Device: v.Device,
//
Mac: v.MAC,
//
})
//
}
// 定义排序函数
sortByDevice
:=
func
(
i
,
j
int
)
bool
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment