Commit 687d3e07 authored by liming6's avatar liming6
Browse files

feature 处理需要展示的数据

parent c06b9d4e
package main
package backend
import (
"fmt"
"get-container/gpu"
"log"
"sync"
)
func main() {
v, e := gpu.GetHYVersionInfo()
if e != nil {
log.Fatal(e)
/*
backend包为tui包提供数据
*/
var (
MapIdDCU = sync.Map{} // 记录dcu信息
)
type DCUInfo struct {
Id int
Name string // full
PerformanceLevel string // full
Fan string // full
Temp float32
PwrAvg float32
PwrCap float32 // full
BusId string // full
MemTotal int
MemUsed int
MemUsedPerent float32
Mig bool // full
DCUUTil float32
Ecc bool // full
PwrMode string
}
// UpdateDCUInfo 更新dcu信息,full表示是否全部更新
func UpdateDCUInfo(full bool) {
wg := sync.WaitGroup{}
var smiAll map[int]*gpu.SMIAllOutput
var eccInfo, migInfo map[int]bool
var memInfo map[int]gpu.DCUMemInfo
var runInfo map[int]gpu.DCURunningInfo
var errSmiAll, errEcc, errMem, errRun error
if full {
wg.Add(5)
go func() {
smiAll, errSmiAll = gpu.GetSMIAllOutput()
wg.Done()
}()
go func() {
eccInfo, errEcc = gpu.GetEccInfo()
wg.Done()
}()
} else {
wg.Add(3)
}
go func() {
migInfo = gpu.GetMigInfo()
wg.Done()
}()
go func() {
memInfo, errMem = gpu.GetDCUMemInfo()
wg.Done()
}()
go func() {
runInfo, errRun = gpu.GetRunningInfo()
wg.Done()
}()
wg.Wait()
cache := make(map[int]DCUInfo)
if errSmiAll == nil && smiAll != nil {
for k, v := range smiAll {
i, have := cache[k]
if !have {
i = DCUInfo{}
i.Id = k
}
i.Name = v.CardSeries
i.PerformanceLevel = v.PerLevel
i.Fan = gpu.NA
i.PwrCap = v.MaxPwr
i.PwrAvg = v.AvgPwr
i.BusId = v.PCIBus
i.MemUsedPerent = v.HCUMemUsage
i.DCUUTil = v.HCUUsage
cache[k] = i
}
}
if errEcc == nil && eccInfo != nil {
for k, v := range eccInfo {
i, have := cache[k]
if !have {
i = DCUInfo{}
i.Id = k
}
i.Ecc = v
cache[k] = i
}
}
for k, v := range migInfo {
i, have := cache[k]
if !have {
i = DCUInfo{}
i.Id = k
}
i.Mig = v
cache[k] = i
}
if memInfo != nil && errMem == nil {
for k, v := range memInfo {
i, have := cache[k]
if !have {
i = DCUInfo{}
i.Id = k
}
i.MemTotal = int(v.Total.Num)
i.MemUsed = int(v.Used.Num)
cache[k] = i
}
}
if errRun == nil && runInfo != nil {
for k, v := range runInfo {
i, have := cache[k]
if !have {
i = DCUInfo{}
i.Id = k
}
i.Temp = v.Temp
i.PwrAvg = v.AvgPower
i.PerformanceLevel = v.PerformanceLevel
i.MemUsedPerent = v.MemPerc
i.DCUUTil = v.HCUPerc
i.PwrMode = v.Mode
cache[k] = i
}
}
for k, v := range cache {
old, have := MapIdDCU.LoadOrStore(k, &v)
if !have {
continue
}
d := old.(*DCUInfo)
if full {
d.Name = v.Name
d.PerformanceLevel = v.PerformanceLevel
d.Fan = v.Fan
d.PwrCap = v.PwrCap
d.BusId = v.BusId
d.Mig = v.Mig
d.Ecc = v.Ecc
}
d.Temp = v.Temp
d.PwrAvg = v.PwrAvg
d.MemTotal = v.MemTotal
d.MemUsed = v.MemUsed
d.MemUsedPerent = v.MemUsedPerent
d.DCUUTil = v.DCUUTil
d.PwrMode = v.PwrMode
}
fmt.Printf("HYVersionInfo: %+v\n", v)
}
package backend
import (
"testing"
"time"
)
func TestUpdateDCUInfo(t *testing.T) {
for i := 0; i < 10; i++ {
start := time.Now()
UpdateDCUInfo(true)
end := time.Now()
t.Logf("%d ms", end.Sub(start).Milliseconds())
}
}
......@@ -6,10 +6,15 @@ import (
"os"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/x/term"
)
func main() {
model := tui.NewModelMain()
w, h, err := term.GetSize(os.Stdout.Fd())
if err != nil {
log.Fatalf("error get terminal size: %v", err)
}
model := tui.NewModelMain(w, h)
if _, err := tea.NewProgram(&model).Run(); err != nil {
log.Fatalf("error create program; %v", err)
}
......
package tui
import (
"get-container/gpu"
tea "github.com/charmbracelet/bubbletea"
)
type ModelDCUInfo struct {
DCUNum int // dcu数量
width, height int // 终端的尺寸
DCUStaticInfo []gpu.SMIAllOutput
DCURunningInfo []gpu.DCURunningInfo
}
func (m *ModelDCUInfo) Init() tea.Cmd {
return nil
}
func (m *ModelDCUInfo) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, nil
}
func (m *ModelDCUInfo) View() string {
return ""
}
......@@ -2,6 +2,7 @@ package tui
import (
"fmt"
"strings"
"time"
tea "github.com/charmbracelet/bubbletea"
......@@ -38,18 +39,26 @@ func (mh *ModelHeader) Update(inputMsg tea.Msg) (tea.Model, tea.Cmd) {
return mh, nil
}
const (
Title = `
├───────────────────────────────┬──────────────────────┬──────────────────────┤
│ DCU Name Performance Level│ Bus-Id DisP.A │ MIG M. ECC │
│ Fan Temp Pwr:Usage/Cap│ Memory-Usage │ DCU-Util PowerMode │
`
)
var (
KeyStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#842cffff")).Italic(true)
KeyH, KeyQ = KeyStyle.SetString("h").String(), KeyStyle.SetString("q").String()
Space = strings.Repeat(" ", 28)
)
func (mh *ModelHeader) View() string {
header := fmt.Sprintf("%s (Press h for help or q for quit)\n", mh.t.Format("2006-01-02 15:04:05"))
header := fmt.Sprintf("%s%s(Press %s for help or %s for quit)\n", mh.t.Format("2006-01-02 15:04:05"), Space, KeyH, KeyQ)
style := lipgloss.NewStyle().Padding(0, 1)
borderStyle := lipgloss.NewStyle().Border(myBorder, true, true, false, true)
hyv := style.Width(18).Render(fmt.Sprintf("hytop: %s", mh.DCUTopVersion))
drv := style.Width(35).Render(fmt.Sprintf("Driver Version: %s", mh.DriverVersion))
smiv := style.Width(24).Render(fmt.Sprintf("SMI Version: %s", mh.SMIVersion))
return header + borderStyle.Render(hyv+drv+smiv) +
`
├───────────────────────────────┬──────────────────────┬──────────────────────┤
│ GPU Name Persistence-M│ Bus-Id Disp.A │ MIG M. Uncorr. ECC │
│ Fan Temp Perf Pwr:Usage/Cap│ Memory-Usage │ GPU-Util Compute M. │
`
return header + borderStyle.Render(hyv+drv+smiv) + Title
}
......@@ -14,11 +14,12 @@ const (
// ModelMsg 模型信息,在父组件和各个子组件间共享信息
type ModelMsg struct {
t time.Time // 当前时间
index uint64 // update次数
Version *gpu.HYVersionInfo // gpu版本相关信息
MyVersion string
// DCUInfo []gpu.DCUInfo // DCU全量信息
t time.Time // 当前时间
index uint64 // update次数
Version *gpu.HYVersionInfo // gpu版本相关信息
MyVersion string
DCUInfo []gpu.DCUInfo // DCU全量信息
DCURunningInfo []gpu.DCURunningInfo // DCU运行时信息
// DCUPidInfo []gpu.DCUPidInfo // 使用dcu的进程信息
}
......@@ -26,17 +27,21 @@ type TickMsg time.Time
// ModelMain tui主模型类
type ModelMain struct {
Header *ModelHeader
// GPUInfo *ModelDCUInfo
width, height int // 终端尺寸
Header *ModelHeader
DCUInfo *ModelDCUInfo
// SysLoad *ModelSysLoad
// ProcessInfo *ModelProcess
index uint64 // 记录update次数的值
modelMsg *ModelMsg // 记录模型信息
}
func NewModelMain() ModelMain {
func NewModelMain(width, height int) ModelMain {
result := ModelMain{}
result.width = width
result.height = height
result.Header = &ModelHeader{}
result.DCUInfo = &ModelDCUInfo{width: width, height: height}
return result
}
......
......@@ -22,7 +22,7 @@ func TestHeader(t *testing.T) {
func TestBorder(t *testing.T) {
lines := strings.Split(Border, "\n")
for _, i := range lines {
t.Logf("%d", len(i))
t.Logf("%d", lipgloss.Width(i))
}
}
......
......@@ -22,13 +22,15 @@ const (
VRamUsedHeader = "VRAM USED(MiB)"
VRamUsedPercentHeader = "VRAM USED(%)"
SDMAUsedHeader = "SDMA USED"
NA = "N/A"
)
var (
ReEmptyLine = regexp.MustCompile(`^\s*$`)
ReUselessLine = regexp.MustCompile(`^=[ =a-zA-Z0-9]*=$`)
ReInfoHeader = regexp.MustCompile(`^HCU\[(\d+)]\s+:\s+(.*)$`)
ReInfoHeader = regexp.MustCompile(`^HCU\[(\d+)]\s*:\s*(.*)$`)
ReDriId = regexp.MustCompile(`(?mi)^Device\s*ID\s*:\s*([x0-9]*)$`)
ReVBIOSVersion = regexp.MustCompile(`(?mi)^VBIOS\s*version\s*:\s*([0-9a-zA-Z.]*)$`)
ReTempEdge = regexp.MustCompile(`(?mi)^Temperature\s*\(Sensor\s*edge\)\s*\(C\)\s*:\s*([0-9.]*)$`)
......@@ -61,6 +63,24 @@ var (
ReVersion = regexp.MustCompile(`(?i)^version\s*([0-9a-zA-Z.]*)\s*\(.*\)$`)
ReDriVersion = regexp.MustCompile(`(?mi)^driver\s*version\s*:\s*(.*)$`)
ReEccOn = regexp.MustCompile(`(?i)ecc\s*on`)
ReEccOff = regexp.MustCompile(`(?i)ecc\s*off`)
ReLowPower = regexp.MustCompile(`(?i)Low\s*Power`)
HeaderMap = map[string]string{
"Id": "HCU",
"Temp": "Temp",
"AvgPower": "AvgPwr",
"PerformanceLevel": "Perf",
"MemPerc": "VRAM%",
"HCUPerc": "HCU%",
"Mode": "Mode",
}
ReVramTotal = regexp.MustCompile(`(?i)total\s*memory\s*\((.*)\)\s*:\s*([0-9]*)`)
ReVramUsed = regexp.MustCompile(`(?i)used\s*memory\s*\((.*)\)\s*:\s*([0-9]*)`)
)
type HYVersionInfo struct {
......@@ -148,7 +168,7 @@ type SMIAllOutput struct {
CardVendor string
}
func GetSMIAllOutput() ([]*SMIAllOutput, error) {
func GetSMIAllOutput() (map[int]*SMIAllOutput, error) {
b, err := exec.Command(DCUBinaryFile, "-a").CombinedOutput()
if err != nil {
return nil, err
......@@ -176,20 +196,16 @@ func GetSMIAllOutput() ([]*SMIAllOutput, error) {
}
}
}
result := make([]*SMIAllOutput, 0)
result := make(map[int]*SMIAllOutput, 0)
for k, v := range info {
item, innerErr := parseSMIAllOutput(k, strings.Join(v, "\n"))
if innerErr != nil {
return nil, innerErr
}
if item != nil {
result = append(result, item)
result[item.Id] = item
}
}
// 按照id进行排序
sort.Slice(result, func(i, j int) bool {
return result[i].Id < result[j].Id
})
return result, nil
}
......@@ -364,10 +380,11 @@ type DCURunningInfo struct {
PerformanceLevel string
MemPerc float32
HCUPerc float32
Mode string // Normal / Low Power
}
// GetRunningInfo 获取DCU运行相关信息
func GetRunningInfo() ([]DCURunningInfo, error) {
func GetRunningInfo() (map[int]DCURunningInfo, error) {
output, err := exec.Command(DCUBinaryFile).CombinedOutput()
if err != nil {
return nil, err
......@@ -375,15 +392,27 @@ func GetRunningInfo() ([]DCURunningInfo, error) {
return parseRunningInfo(string(output))
}
func parseRunningInfo(info string) ([]DCURunningInfo, error) {
func parseRunningInfo(info string) (map[int]DCURunningInfo, error) {
lines := strings.Split(strings.Trim(strings.TrimSpace(info), "\n"), "\n")
result := make([]DCURunningInfo, 0)
result := make(map[int]DCURunningInfo)
usefulLines := make([]string, 0)
for _, line := range lines {
if ReUselessLine.MatchString(line) || ReEmptyLine.MatchString(line) {
continue
}
usefulLines = append(usefulLines, line)
}
fields := strings.Fields(usefulLines[0])
fieldMap := make(map[string]int)
fieldNum := 0
for i, k := range fields {
fieldMap[k] = i
fieldNum++
}
for _, line := range usefulLines {
line = ReLowPower.ReplaceAllString(line, "LowPower")
fields := strings.Fields(strings.TrimSpace(line))
if len(fields) < 8 {
if len(fields) < fieldNum {
continue
}
item := DCURunningInfo{}
......@@ -392,29 +421,30 @@ func parseRunningInfo(info string) ([]DCURunningInfo, error) {
continue
}
item.Id = id
temp, err := strconv.ParseFloat(strings.TrimSuffix(strings.ToLower(fields[1]), "c"), 32)
temp, err := strconv.ParseFloat(strings.TrimSuffix(strings.ToLower(fields[fieldMap[HeaderMap["Temp"]]]), "c"), 32)
if err != nil {
return nil, err
}
item.Temp = float32(temp)
avgPwr, err := strconv.ParseFloat(strings.TrimSuffix(strings.ToLower(fields[2]), "w"), 32)
avgPwr, err := strconv.ParseFloat(strings.TrimSuffix(strings.ToLower(fields[fieldMap[HeaderMap["AvgPower"]]]), "w"), 32)
if err != nil {
return nil, err
}
item.AvgPower = float32(avgPwr)
item.PerformanceLevel = fields[3]
vram, err := strconv.ParseFloat(strings.TrimSuffix(fields[5], "%"), 32)
vram, err := strconv.ParseFloat(strings.TrimSuffix(fields[fieldMap[HeaderMap["MemPerc"]]], "%"), 32)
if err != nil {
return nil, err
}
item.MemPerc = float32(vram)
utl, err := strconv.ParseFloat(strings.TrimSuffix(fields[6], "%"), 32)
utl, err := strconv.ParseFloat(strings.TrimSuffix(fields[fieldMap[HeaderMap["HCUPerc"]]], "%"), 32)
if err != nil {
return nil, err
}
item.HCUPerc = float32(utl)
result = append(result, item)
item.Mode = fields[fieldMap[HeaderMap["Mode"]]]
result[item.Id] = item
}
return result, nil
}
......@@ -552,3 +582,115 @@ func regMatch(reg *regexp.Regexp, s string, index ...int) []string {
}
return result
}
// GetMigInfo 获取是否开启了mig模式
// 如果返回nil,表示都没有开启
func GetMigInfo() map[int]bool {
return nil
}
// GetEccInfo 获取是否启用ecc信息
func GetEccInfo() (map[int]bool, error) {
output, err := exec.Command(DCUBinaryFile, "--showecc").Output()
if err != nil {
return nil, err
}
str := strings.TrimSpace(strings.Trim(string(output), "\n"))
return parseEccInfo(str)
}
func parseEccInfo(str string) (map[int]bool, error) {
lines := strings.Split(str, "\n")
result := make(map[int]bool)
for _, l := range lines {
if ReUselessLine.MatchString(l) || ReEmptyLine.MatchString(l) {
continue
}
find := ReInfoHeader.FindStringSubmatch(l)
if len(find) < 3 {
continue
}
index, err := strconv.Atoi(find[1])
if err != nil {
return nil, err
}
if ReEccOn.MatchString(find[2]) {
result[index] = true
} else {
result[index] = false
}
}
return result, nil
}
type DCUMemInfo struct {
Id int
Total utils.MemorySize
Used utils.MemorySize
}
func GetDCUMemInfo() (map[int]DCUMemInfo, error) {
output, err := exec.Command(DCUBinaryFile, "--showmeminfo", "vram").Output()
if err != nil {
return nil, err
}
str := strings.TrimSpace(strings.Trim(string(output), "\n"))
return parseDCUMemInfo(str)
}
func parseDCUMemInfo(str string) (map[int]DCUMemInfo, error) {
lines := strings.Split(str, "\n")
result := make(map[int]DCUMemInfo)
for _, line := range lines {
if ReUselessLine.MatchString(line) || ReEmptyLine.MatchString(line) {
continue
}
matchs := ReInfoHeader.FindStringSubmatch(line)
if len(matchs) < 3 {
continue
}
id, err := strconv.Atoi(matchs[1])
if err != nil {
return nil, err
}
info, have := result[id]
if !have {
result[id] = DCUMemInfo{Id: id}
info = result[id]
}
if ReVramTotal.MatchString(matchs[2]) {
field := ReVramTotal.FindStringSubmatch(matchs[2])
if len(field) < 3 {
continue
}
unit, err := utils.ParseUnit(field[1])
if err != nil {
return nil, err
}
size, err := strconv.Atoi(field[2])
if err != nil {
return nil, err
}
info.Total = utils.MemorySize{Unit: unit, Num: uint64(size)}
result[id] = info
}
if ReVramUsed.MatchString(matchs[2]) {
field := ReVramUsed.FindStringSubmatch(matchs[2])
if len(field) < 3 {
continue
}
unit, err := utils.ParseUnit(field[1])
if err != nil {
return nil, err
}
size, err := strconv.Atoi(field[2])
if err != nil {
return nil, err
}
info.Used = utils.MemorySize{Unit: unit, Num: uint64(size)}
result[id] = info
}
}
return result, nil
}
......@@ -2,6 +2,7 @@ package gpu
import (
"encoding/json"
"os"
"strings"
"testing"
)
......@@ -53,3 +54,24 @@ func TestJson(t *testing.T) {
}
t.Logf("%+v", s)
}
func TestParseEcc(t *testing.T) {
bytes, err := os.ReadFile("../test-data/hy-smi-ecc.log")
if err != nil {
t.Error(err)
}
str := strings.TrimSpace(strings.Trim(string(bytes), "\n"))
info, err := parseEccInfo(str)
if err != nil {
t.Error(err)
}
t.Logf("%+v", info)
}
func TestGetDCUMemInfo(t *testing.T) {
i, err := GetDCUMemInfo()
if err != nil {
t.Error(err)
}
t.Logf("%+v", i)
}
......@@ -230,7 +230,12 @@ HCU Temp AvgPwr Perf PwrCap VRAM% HCU% Mode
`
func TestParseRunningInfo(t *testing.T) {
i, e := parseRunningInfo(DCUPidInfoStr)
bytes, err := os.ReadFile("../test-data/hy-smi-1.17.0-1.log")
if err != nil {
t.Error(err)
}
str := strings.TrimSpace(strings.Trim(string(bytes), "\b"))
i, e := parseRunningInfo(str)
if e != nil {
t.Fatal(e)
}
......@@ -240,7 +245,7 @@ func TestParseRunningInfo(t *testing.T) {
}
func TestParseSMIAllOutput(t *testing.T) {
b, e := os.ReadFile("../tui-data/hy.log")
b, e := os.ReadFile("../test-data/hy-smi-1.17.0-a.log")
if e != nil {
t.Error(e)
}
......
============================ System Management Interface =============================
======================================================================================
HCU Temp AvgPwr Perf PwrCap VRAM% HCU% Mode
0 63.0C 345.0W manual 800.0W 95% 100.0% Normal
1 66.0C 343.0W manual 800.0W 96% 88.8% Normal
2 54.0C 341.0W manual 800.0W 96% 100.0% Normal
3 56.0C 339.0W manual 800.0W 96% 100.0% Normal
4 66.0C 349.0W manual 800.0W 96% 100.0% Normal
5 67.0C 348.0W manual 800.0W 96% 100.0% Normal
6 57.0C 335.0W manual 800.0W 96% 95.0% Normal
7 54.0C 339.0W manual 800.0W 96% 98.8% Normal
======================================================================================
=================================== End of SMI Log ===================================
================================= System Management Interface ==================================
================================================================================================
HCU Temp AvgPwr Perf PwrCap VRAM% HCU% Dec% Enc% Mode
0 28.0C 111.0W manual 800.0W 0% 0.0% 0.0% 0.0% Low Power
1 29.0C 111.0W manual 800.0W 0% 0.0% 0.0% 0.0% Low Power
2 28.0C 113.0W manual 800.0W 0% 0.0% 0.0% 0.0% Low Power
3 27.0C 111.0W manual 800.0W 0% 0.0% 0.0% 0.0% Low Power
4 36.0C 168.0W manual 800.0W 0% 0.0% 0.0% 0.0% N/A
5 28.0C 111.0W manual 800.0W 0% 0.0% 0.0% 0.0% Low Power
6 27.0C 111.0W manual 800.0W 0% 0.0% 0.0% 0.0% Low Power
7 28.0C 134.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
================================================================================================
======================================== End of SMI Log ========================================
================================= System Management Interface ==================================
================================================================================================
Driver Version: 6.3.13-V1.12.0a
================================================================================================
================================================================================================
HCU[0] : Device ID: 0x6320
HCU[1] : Device ID: 0x6320
HCU[2] : Device ID: 0x6320
HCU[3] : Device ID: 0x6320
HCU[4] : Device ID: 0x6320
HCU[5] : Device ID: 0x6320
HCU[6] : Device ID: 0x6320
HCU[7] : Device ID: 0x6320
================================================================================================
================================================================================================
HCU[0] : VBIOS version: 5.722.002400I.770357
HCU[1] : VBIOS version: 5.722.002400I.770357
HCU[2] : VBIOS version: 5.722.002400I.770357
HCU[3] : VBIOS version: 5.722.002400I.770357
HCU[4] : VBIOS version: 5.722.002400I.770357
HCU[5] : VBIOS version: 5.722.002400I.770357
HCU[6] : VBIOS version: 5.722.002400I.770357
HCU[7] : VBIOS version: 5.722.002400I.770357
================================================================================================
================================================================================================
HCU[0] : Temperature (Sensor edge) (C): 33.0
HCU[0] : Temperature (Sensor junction) (C): 36.0
HCU[0] : Temperature (Sensor mem) (C): 31.0
HCU[0] : Temperature (Sensor core) (C): 30.0
HCU[1] : Temperature (Sensor edge) (C): 32.0
HCU[1] : Temperature (Sensor junction) (C): 36.0
HCU[1] : Temperature (Sensor mem) (C): 29.0
HCU[1] : Temperature (Sensor core) (C): 31.0
HCU[2] : Temperature (Sensor edge) (C): 32.0
HCU[2] : Temperature (Sensor junction) (C): 35.0
HCU[2] : Temperature (Sensor mem) (C): 29.0
HCU[2] : Temperature (Sensor core) (C): 30.0
HCU[3] : Temperature (Sensor edge) (C): 30.0
HCU[3] : Temperature (Sensor junction) (C): 34.0
HCU[3] : Temperature (Sensor mem) (C): 28.0
HCU[3] : Temperature (Sensor core) (C): 29.0
HCU[4] : Temperature (Sensor edge) (C): 33.0
HCU[4] : Temperature (Sensor junction) (C): 36.0
HCU[4] : Temperature (Sensor mem) (C): 31.0
HCU[4] : Temperature (Sensor core) (C): 31.0
HCU[5] : Temperature (Sensor edge) (C): 33.0
HCU[5] : Temperature (Sensor junction) (C): 36.0
HCU[5] : Temperature (Sensor mem) (C): 30.0
HCU[5] : Temperature (Sensor core) (C): 31.0
HCU[6] : Temperature (Sensor edge) (C): 31.0
HCU[6] : Temperature (Sensor junction) (C): 34.0
HCU[6] : Temperature (Sensor mem) (C): 28.0
HCU[6] : Temperature (Sensor core) (C): 28.0
HCU[7] : Temperature (Sensor edge) (C): 31.0
HCU[7] : Temperature (Sensor junction) (C): 34.0
HCU[7] : Temperature (Sensor mem) (C): 28.0
HCU[7] : Temperature (Sensor core) (C): 29.0
================================================================================================
================================================================================================
HCU[0] : fclk clock level: 0 (1390Mhz)
HCU[0] : mclk clock level: 0 (1800Mhz)
HCU[0] : sclk clock level: 9 (1500Mhz)
HCU[0] : socclk clock level: 0 (1079Mhz)
HCU[0] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[1] : fclk clock level: 0 (1390Mhz)
HCU[1] : mclk clock level: 0 (1800Mhz)
HCU[1] : sclk clock level: 9 (1500Mhz)
HCU[1] : socclk clock level: 0 (1079Mhz)
HCU[1] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[2] : fclk clock level: 0 (1390Mhz)
HCU[2] : mclk clock level: 0 (1800Mhz)
HCU[2] : sclk clock level: 9 (1500Mhz)
HCU[2] : socclk clock level: 0 (1079Mhz)
HCU[2] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[3] : fclk clock level: 0 (1390Mhz)
HCU[3] : mclk clock level: 0 (1800Mhz)
HCU[3] : sclk clock level: 9 (1500Mhz)
HCU[3] : socclk clock level: 0 (1079Mhz)
HCU[3] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[4] : fclk clock level: 0 (1390Mhz)
HCU[4] : mclk clock level: 0 (1800Mhz)
HCU[4] : sclk clock level: 9 (1500Mhz)
HCU[4] : socclk clock level: 0 (1079Mhz)
HCU[4] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[5] : fclk clock level: 0 (1390Mhz)
HCU[5] : mclk clock level: 0 (1800Mhz)
HCU[5] : sclk clock level: 9 (1500Mhz)
HCU[5] : socclk clock level: 0 (1079Mhz)
HCU[5] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[6] : fclk clock level: 0 (1390Mhz)
HCU[6] : mclk clock level: 0 (1800Mhz)
HCU[6] : sclk clock level: 9 (1500Mhz)
HCU[6] : socclk clock level: 0 (1079Mhz)
HCU[6] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
HCU[7] : fclk clock level: 0 (1390Mhz)
HCU[7] : mclk clock level: 0 (1800Mhz)
HCU[7] : sclk clock level: 9 (1500Mhz)
HCU[7] : socclk clock level: 0 (1079Mhz)
HCU[7] : pcie clock level: 2 (32.0GT/s, x16 1100Mhz)
================================================================================================
================================================================================================
HCU[0] : Performance Level: manual
HCU[1] : Performance Level: manual
HCU[2] : Performance Level: manual
HCU[3] : Performance Level: manual
HCU[4] : Performance Level: manual
HCU[5] : Performance Level: manual
HCU[6] : Performance Level: manual
HCU[7] : Performance Level: manual
================================================================================================
================================================================================================
HCU[0] : Max Graphics Package Power (W): 800.0
HCU[1] : Max Graphics Package Power (W): 800.0
HCU[2] : Max Graphics Package Power (W): 800.0
HCU[3] : Max Graphics Package Power (W): 800.0
HCU[4] : Max Graphics Package Power (W): 800.0
HCU[5] : Max Graphics Package Power (W): 800.0
HCU[6] : Max Graphics Package Power (W): 800.0
HCU[7] : Max Graphics Package Power (W): 800.0
================================================================================================
================================================================================================
HCU[0] : Average Graphics Package Power (W): 132.0
HCU[1] : Average Graphics Package Power (W): 133.0
HCU[2] : Average Graphics Package Power (W): 136.0
HCU[3] : Average Graphics Package Power (W): 132.0
HCU[4] : Average Graphics Package Power (W): 134.0
HCU[5] : Average Graphics Package Power (W): 133.0
HCU[6] : Average Graphics Package Power (W): 133.0
HCU[7] : Average Graphics Package Power (W): 135.0
================================================================================================
================================================================================================
HCU[0] : Supported fclk frequencies on HCU 0
HCU[0] : 0: 1390Mhz *
HCU[0] :
HCU[0] : Supported mclk frequencies on HCU 0
HCU[0] : 0: 1800Mhz *
HCU[0] :
HCU[0] : Supported sclk frequencies on HCU 0
HCU[0] : 0: 300Mhz
HCU[0] : 1: 600Mhz
HCU[0] : 2: 800Mhz
HCU[0] : 3: 900Mhz
HCU[0] : 4: 1000Mhz
HCU[0] : 5: 1100Mhz
HCU[0] : 6: 1200Mhz
HCU[0] : 7: 1300Mhz
HCU[0] : 8: 1400Mhz
HCU[0] : 9: 1500Mhz *
HCU[0] : *: 1600Mhz
HCU[0] :
HCU[0] : Supported socclk frequencies on HCU 0
HCU[0] : 0: 1079Mhz *
HCU[0] :
HCU[0] : Supported pcie frequencies on HCU 0
HCU[0] : 0: 2.5GT/s, x16 300Mhz
HCU[0] : 1: 8.0GT/s, x16 625Mhz
HCU[0] : 2: 32.0GT/s, x16 1100Mhz *
HCU[0] :
HCU[1] : Supported fclk frequencies on HCU 1
HCU[1] : 0: 1390Mhz *
HCU[1] :
HCU[1] : Supported mclk frequencies on HCU 1
HCU[1] : 0: 1800Mhz *
HCU[1] :
HCU[1] : Supported sclk frequencies on HCU 1
HCU[1] : 0: 300Mhz
HCU[1] : 1: 600Mhz
HCU[1] : 2: 800Mhz
HCU[1] : 3: 900Mhz
HCU[1] : 4: 1000Mhz
HCU[1] : 5: 1100Mhz
HCU[1] : 6: 1200Mhz
HCU[1] : 7: 1300Mhz
HCU[1] : 8: 1400Mhz
HCU[1] : 9: 1500Mhz *
HCU[1] : *: 1600Mhz
HCU[1] :
HCU[1] : Supported socclk frequencies on HCU 1
HCU[1] : 0: 1079Mhz *
HCU[1] :
HCU[1] : Supported pcie frequencies on HCU 1
HCU[1] : 0: 2.5GT/s, x16 300Mhz
HCU[1] : 1: 8.0GT/s, x16 625Mhz
HCU[1] : 2: 32.0GT/s, x16 1100Mhz *
HCU[1] :
HCU[2] : Supported fclk frequencies on HCU 2
HCU[2] : 0: 1390Mhz *
HCU[2] :
HCU[2] : Supported mclk frequencies on HCU 2
HCU[2] : 0: 1800Mhz *
HCU[2] :
HCU[2] : Supported sclk frequencies on HCU 2
HCU[2] : 0: 300Mhz
HCU[2] : 1: 600Mhz
HCU[2] : 2: 800Mhz
HCU[2] : 3: 900Mhz
HCU[2] : 4: 1000Mhz
HCU[2] : 5: 1100Mhz
HCU[2] : 6: 1200Mhz
HCU[2] : 7: 1300Mhz
HCU[2] : 8: 1400Mhz
HCU[2] : 9: 1500Mhz *
HCU[2] : *: 1600Mhz
HCU[2] :
HCU[2] : Supported socclk frequencies on HCU 2
HCU[2] : 0: 1079Mhz *
HCU[2] :
HCU[2] : Supported pcie frequencies on HCU 2
HCU[2] : 0: 2.5GT/s, x16 300Mhz
HCU[2] : 1: 8.0GT/s, x16 625Mhz
HCU[2] : 2: 32.0GT/s, x16 1100Mhz *
HCU[2] :
HCU[3] : Supported fclk frequencies on HCU 3
HCU[3] : 0: 1390Mhz *
HCU[3] :
HCU[3] : Supported mclk frequencies on HCU 3
HCU[3] : 0: 1800Mhz *
HCU[3] :
HCU[3] : Supported sclk frequencies on HCU 3
HCU[3] : 0: 300Mhz
HCU[3] : 1: 600Mhz
HCU[3] : 2: 800Mhz
HCU[3] : 3: 900Mhz
HCU[3] : 4: 1000Mhz
HCU[3] : 5: 1100Mhz
HCU[3] : 6: 1200Mhz
HCU[3] : 7: 1300Mhz
HCU[3] : 8: 1400Mhz
HCU[3] : 9: 1500Mhz *
HCU[3] : *: 1600Mhz
HCU[3] :
HCU[3] : Supported socclk frequencies on HCU 3
HCU[3] : 0: 1079Mhz *
HCU[3] :
HCU[3] : Supported pcie frequencies on HCU 3
HCU[3] : 0: 2.5GT/s, x16 300Mhz
HCU[3] : 1: 8.0GT/s, x16 625Mhz
HCU[3] : 2: 32.0GT/s, x16 1100Mhz *
HCU[3] :
HCU[4] : Supported fclk frequencies on HCU 4
HCU[4] : 0: 1390Mhz *
HCU[4] :
HCU[4] : Supported mclk frequencies on HCU 4
HCU[4] : 0: 1800Mhz *
HCU[4] :
HCU[4] : Supported sclk frequencies on HCU 4
HCU[4] : 0: 300Mhz
HCU[4] : 1: 600Mhz
HCU[4] : 2: 800Mhz
HCU[4] : 3: 900Mhz
HCU[4] : 4: 1000Mhz
HCU[4] : 5: 1100Mhz
HCU[4] : 6: 1200Mhz
HCU[4] : 7: 1300Mhz
HCU[4] : 8: 1400Mhz
HCU[4] : 9: 1500Mhz *
HCU[4] : *: 1600Mhz
HCU[4] :
HCU[4] : Supported socclk frequencies on HCU 4
HCU[4] : 0: 1079Mhz *
HCU[4] :
HCU[4] : Supported pcie frequencies on HCU 4
HCU[4] : 0: 2.5GT/s, x16 300Mhz
HCU[4] : 1: 8.0GT/s, x16 625Mhz
HCU[4] : 2: 32.0GT/s, x16 1100Mhz *
HCU[4] :
HCU[5] : Supported fclk frequencies on HCU 5
HCU[5] : 0: 1390Mhz *
HCU[5] :
HCU[5] : Supported mclk frequencies on HCU 5
HCU[5] : 0: 1800Mhz *
HCU[5] :
HCU[5] : Supported sclk frequencies on HCU 5
HCU[5] : 0: 300Mhz
HCU[5] : 1: 600Mhz
HCU[5] : 2: 800Mhz
HCU[5] : 3: 900Mhz
HCU[5] : 4: 1000Mhz
HCU[5] : 5: 1100Mhz
HCU[5] : 6: 1200Mhz
HCU[5] : 7: 1300Mhz
HCU[5] : 8: 1400Mhz
HCU[5] : 9: 1500Mhz *
HCU[5] : *: 1600Mhz
HCU[5] :
HCU[5] : Supported socclk frequencies on HCU 5
HCU[5] : 0: 1079Mhz *
HCU[5] :
HCU[5] : Supported pcie frequencies on HCU 5
HCU[5] : 0: 2.5GT/s, x16 300Mhz
HCU[5] : 1: 8.0GT/s, x16 625Mhz
HCU[5] : 2: 32.0GT/s, x16 1100Mhz *
HCU[5] :
HCU[6] : Supported fclk frequencies on HCU 6
HCU[6] : 0: 1390Mhz *
HCU[6] :
HCU[6] : Supported mclk frequencies on HCU 6
HCU[6] : 0: 1800Mhz *
HCU[6] :
HCU[6] : Supported sclk frequencies on HCU 6
HCU[6] : 0: 300Mhz
HCU[6] : 1: 600Mhz
HCU[6] : 2: 800Mhz
HCU[6] : 3: 900Mhz
HCU[6] : 4: 1000Mhz
HCU[6] : 5: 1100Mhz
HCU[6] : 6: 1200Mhz
HCU[6] : 7: 1300Mhz
HCU[6] : 8: 1400Mhz
HCU[6] : 9: 1500Mhz *
HCU[6] : *: 1600Mhz
HCU[6] :
HCU[6] : Supported socclk frequencies on HCU 6
HCU[6] : 0: 1079Mhz *
HCU[6] :
HCU[6] : Supported pcie frequencies on HCU 6
HCU[6] : 0: 2.5GT/s, x16 300Mhz
HCU[6] : 1: 8.0GT/s, x16 625Mhz
HCU[6] : 2: 32.0GT/s, x16 1100Mhz *
HCU[6] :
HCU[7] : Supported fclk frequencies on HCU 7
HCU[7] : 0: 1390Mhz *
HCU[7] :
HCU[7] : Supported mclk frequencies on HCU 7
HCU[7] : 0: 1800Mhz *
HCU[7] :
HCU[7] : Supported sclk frequencies on HCU 7
HCU[7] : 0: 300Mhz
HCU[7] : 1: 600Mhz
HCU[7] : 2: 800Mhz
HCU[7] : 3: 900Mhz
HCU[7] : 4: 1000Mhz
HCU[7] : 5: 1100Mhz
HCU[7] : 6: 1200Mhz
HCU[7] : 7: 1300Mhz
HCU[7] : 8: 1400Mhz
HCU[7] : 9: 1500Mhz *
HCU[7] : *: 1600Mhz
HCU[7] :
HCU[7] : Supported socclk frequencies on HCU 7
HCU[7] : 0: 1079Mhz *
HCU[7] :
HCU[7] : Supported pcie frequencies on HCU 7
HCU[7] : 0: 2.5GT/s, x16 300Mhz
HCU[7] : 1: 8.0GT/s, x16 625Mhz
HCU[7] : 2: 32.0GT/s, x16 1100Mhz *
HCU[7] :
================================================================================================
================================================================================================
HCU[0] : HCU use (%): 0.0
HCU[1] : HCU use (%): 0.0
HCU[2] : HCU use (%): 0.0
HCU[3] : HCU use (%): 0.0
HCU[4] : HCU use (%): 0.0
HCU[5] : HCU use (%): 0.0
HCU[6] : HCU use (%): 0.0
HCU[7] : HCU use (%): 0.0
================================================================================================
================================================================================================
HCU[0] : HCU memory use (%): 0
HCU[1] : HCU memory use (%): 0
HCU[2] : HCU memory use (%): 0
HCU[3] : HCU memory use (%): 0
HCU[4] : HCU memory use (%): 0
HCU[5] : HCU memory use (%): 0
HCU[6] : HCU memory use (%): 0
HCU[7] : HCU memory use (%): 0
================================================================================================
================================================================================================
HCU[0] : HCU Memory Vendor: samsung
HCU[1] : HCU Memory Vendor: samsung
HCU[2] : HCU Memory Vendor: samsung
HCU[3] : HCU Memory Vendor: samsung
HCU[4] : HCU Memory Vendor: samsung
HCU[5] : HCU Memory Vendor: samsung
HCU[6] : HCU Memory Vendor: samsung
HCU[7] : HCU Memory Vendor: samsung
================================================================================================
================================================================================================
HCU[0] : PCIe Replay Count: 0
HCU[1] : PCIe Replay Count: 0
HCU[2] : PCIe Replay Count: 0
HCU[3] : PCIe Replay Count: 0
HCU[4] : PCIe Replay Count: 0
HCU[5] : PCIe Replay Count: 0
HCU[6] : PCIe Replay Count: 0
HCU[7] : PCIe Replay Count: 0
================================================================================================
================================================================================================
HCU[0] : Serial Number: 2400411060000704
HCU[1] : Serial Number: 2400411060000667
HCU[2] : Serial Number: 2400410460000863
HCU[3] : Serial Number: 2400410460000784
HCU[4] : Serial Number: 2400411060000802
HCU[5] : Serial Number: 2400411060000754
HCU[6] : Serial Number: 2400410460000651
HCU[7] : Serial Number: 2400410460000832
================================================================================================
================================================================================================
No KFD PIDs currently running!
================================================================================================
================================================================================================
HCU[0] : Voltage (mV): 906
HCU[1] : Voltage (mV): 906
HCU[2] : Voltage (mV): 906
HCU[3] : Voltage (mV): 906
HCU[4] : Voltage (mV): 906
HCU[5] : Voltage (mV): 906
HCU[6] : Voltage (mV): 906
HCU[7] : Voltage (mV): 906
================================================================================================
================================================================================================
HCU[0] : PCI Bus: 0000:9f:00.0 --> Socket id: 1
HCU[1] : PCI Bus: 0000:56:00.0 --> Socket id: 0
HCU[2] : PCI Bus: 0000:5d:00.0 --> Socket id: 4
HCU[3] : PCI Bus: 0000:05:00.0 --> Socket id: 5
HCU[4] : PCI Bus: 0000:e5:00.0 --> Socket id: 3
HCU[5] : PCI Bus: 0000:c1:00.0 --> Socket id: 2
HCU[6] : PCI Bus: 0000:ca:00.0 --> Socket id: 7
HCU[7] : PCI Bus: 0000:b1:00.0 --> Socket id: 6
================================================================================================
================================================================================================
HCU[0] : MEC Firmware Version: 45
HCU[0] : MEC2 Firmware Version: 45
HCU[0] : RLC Firmware Version: 2
HCU[0] : SDMA Firmware Version: 11
HCU[0] : SDMA2 Firmware Version: 11
HCU[0] : SMC Firmware Version: 00.01.02.00
HCU[1] : MEC Firmware Version: 45
HCU[1] : MEC2 Firmware Version: 45
HCU[1] : RLC Firmware Version: 2
HCU[1] : SDMA Firmware Version: 11
HCU[1] : SDMA2 Firmware Version: 11
HCU[1] : SMC Firmware Version: 00.01.02.00
HCU[2] : MEC Firmware Version: 45
HCU[2] : MEC2 Firmware Version: 45
HCU[2] : RLC Firmware Version: 2
HCU[2] : SDMA Firmware Version: 11
HCU[2] : SDMA2 Firmware Version: 11
HCU[2] : SMC Firmware Version: 00.01.02.00
HCU[3] : MEC Firmware Version: 45
HCU[3] : MEC2 Firmware Version: 45
HCU[3] : RLC Firmware Version: 2
HCU[3] : SDMA Firmware Version: 11
HCU[3] : SDMA2 Firmware Version: 11
HCU[3] : SMC Firmware Version: 00.01.02.00
HCU[4] : MEC Firmware Version: 45
HCU[4] : MEC2 Firmware Version: 45
HCU[4] : RLC Firmware Version: 2
HCU[4] : SDMA Firmware Version: 11
HCU[4] : SDMA2 Firmware Version: 11
HCU[4] : SMC Firmware Version: 00.01.02.00
HCU[5] : MEC Firmware Version: 45
HCU[5] : MEC2 Firmware Version: 45
HCU[5] : RLC Firmware Version: 2
HCU[5] : SDMA Firmware Version: 11
HCU[5] : SDMA2 Firmware Version: 11
HCU[5] : SMC Firmware Version: 00.01.02.00
HCU[6] : MEC Firmware Version: 45
HCU[6] : MEC2 Firmware Version: 45
HCU[6] : RLC Firmware Version: 2
HCU[6] : SDMA Firmware Version: 11
HCU[6] : SDMA2 Firmware Version: 11
HCU[6] : SMC Firmware Version: 00.01.02.00
HCU[7] : MEC Firmware Version: 45
HCU[7] : MEC2 Firmware Version: 45
HCU[7] : RLC Firmware Version: 2
HCU[7] : SDMA Firmware Version: 11
HCU[7] : SDMA2 Firmware Version: 11
HCU[7] : SMC Firmware Version: 00.01.02.00
================================================================================================
================================================================================================
HCU[0] : Card Series: BW200
HCU[0] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[1] : Card Series: BW200
HCU[1] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[2] : Card Series: BW200
HCU[2] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[3] : Card Series: BW200
HCU[3] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[4] : Card Series: BW200
HCU[4] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[5] : Card Series: BW200
HCU[5] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[6] : Card Series: BW200
HCU[6] : Card Vendor: C-3000 IC Design Co., Ltd.
HCU[7] : Card Series: BW200
HCU[7] : Card Vendor: C-3000 IC Design Co., Ltd.
================================================================================================
================================================================================================
HCU[0] : No Bad Page!
HCU[1] : No Bad Page!
HCU[2] : No Bad Page!
HCU[3] : No Bad Page!
HCU[4] : No Bad Page!
HCU[5] : No Bad Page!
HCU[6] : No Bad Page!
HCU[7] : No Bad Page!
================================================================================================
======================================== End of SMI Log ========================================
================================= System Management Interface ==================================
================================================================================================
HCU Temp AvgPwr Perf PwrCap VRAM% HCU% Dec% Enc% Mode
0 30.0C 132.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
1 31.0C 133.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
2 30.0C 136.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
3 29.0C 132.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
4 31.0C 134.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
5 31.0C 133.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
6 28.0C 133.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
7 30.0C 135.0W manual 800.0W 0% 0.0% 0.0% 0.0% Normal
================================================================================================
======================================== End of SMI Log ========================================
============================ System Management Interface =============================
======================================================================================
HCU[0] : ecc mode ecc on
HCU[1] : ecc mode ecc on
HCU[2] : ecc mode ecc on
HCU[3] : ecc mode ecc on
HCU[4] : ecc mode ecc on
HCU[5] : ecc mode ecc on
HCU[6] : ecc mode ecc on
HCU[7] : ecc mode ecc on
======================================================================================
=================================== End of SMI Log ===================================
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment