forked from google/cadvisor
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Conflicts: info/v1/machine.go Signed-off-by: Maciej "Iwan" Iwanowski <maciej.iwanowski@intel.com>
- Loading branch information
Maciej Iwanowski
committed
Mar 13, 2020
1 parent
9251e32
commit 6dac579
Showing
3 changed files
with
72 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// +build libipmctl | ||
|
||
package machine | ||
|
||
// #cgo pkg-config: libipmctl | ||
// #include <nvm_management.h> | ||
import "C" | ||
import ( | ||
"fmt" | ||
|
||
"k8s.io/klog" | ||
) | ||
|
||
var initializedSuccefully bool | ||
|
||
func init() { | ||
err := C.nvm_init() | ||
initializedSuccefully = err == C.NVM_SUCCESS | ||
if !initializedSuccefully { | ||
klog.Warningf("libipmctl initialization failed with status %d", err) | ||
} | ||
} | ||
|
||
// GetNVMAvgPowerBudget retrieves configured power budget for NVM devices. | ||
// It uses ipmlibctl to get setting configured in BIOS. | ||
func GetNVMAvgPowerBudget() (uint, error) { | ||
// Fail silently when library cannot be initialized. | ||
if !initializedSuccefully { | ||
return uint(0), nil | ||
} | ||
// Get number of devices on the platform | ||
// see: https://github.com/intel/ipmctl/blob/v01.00.00.3497/src/os/nvm_api/nvm_management.h#L1478 | ||
var count C.uint | ||
err := C.nvm_get_number_of_devices(&count) | ||
if err != C.NVM_SUCCESS { | ||
klog.Warningf("Unable to get number of NVM devices. Status code: %d", err) | ||
return uint(0), fmt.Errorf("Unable to get number of NVM devices. Status code: %d", err) | ||
} | ||
|
||
// Load basic device information for all the devices | ||
// to obtain UID of the first one. | ||
var devices = make([]C.struct_device_discovery, count) | ||
err = C.nvm_get_devices(&devices[0], C.uchar(count)) | ||
if err != C.NVM_SUCCESS { | ||
klog.Warningf("Unable to get all NVM devices. Status code: %d", err) | ||
return uint(0), fmt.Errorf("Unable to get all NVM devices. Status code: %d", err) | ||
} | ||
|
||
// Power budget is same for all the devices | ||
// so we can rely on any of them. | ||
var device C.struct_device_details | ||
err = C.nvm_get_device_details(&devices[0].uid[0], &device) | ||
if err != C.NVM_SUCCESS { | ||
uid := C.GoString(&devices[0].uid[0]) | ||
klog.Warningf("Unable to get details of NVM device %q. Status code: %d", uid, err) | ||
return uint(0), fmt.Errorf("Unable to get details of NVM device %q. Status code: %d", uid, err) | ||
} | ||
|
||
return uint(device.avg_power_budget), nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// +build !libipmctl | ||
|
||
package machine | ||
|
||
// GetNVMAvgPowerBudget retrieves configured power budget for NVM devices. | ||
// When libipmct is not available zero is returned. | ||
func GetNVMAvgPowerBudget() (uint, error) { | ||
return uint(0), nil | ||
} |