Add cpu speed detection methods (#9762)

Added additional match for lscpu
Added additional file to check
This commit is contained in:
BartJM 2025-02-19 14:33:49 +01:00 committed by GitHub
parent c0e05c4a6d
commit ee32f4cfe8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -58,9 +58,8 @@ public class KVMHostInfo {
private long reservedMemory; private long reservedMemory;
private long overCommitMemory; private long overCommitMemory;
private List<String> capabilities = new ArrayList<>(); private List<String> capabilities = new ArrayList<>();
private static String cpuInfoFreqFileName = "/sys/devices/system/cpu/cpu0/cpufreq/base_frequency";
private static String cpuArchCommand = "/usr/bin/arch"; private static String cpuArchCommand = "/usr/bin/arch";
private static List<String> cpuInfoFreqFileNames = List.of("/sys/devices/system/cpu/cpu0/cpufreq/base_frequency","/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq");
public KVMHostInfo(long reservedMemory, long overCommitMemory, long manualSpeed, int reservedCpus) { public KVMHostInfo(long reservedMemory, long overCommitMemory, long manualSpeed, int reservedCpus) {
this.cpuSpeed = manualSpeed; this.cpuSpeed = manualSpeed;
@ -134,20 +133,31 @@ public class KVMHostInfo {
} }
private static long getCpuSpeedFromCommandLscpu() { private static long getCpuSpeedFromCommandLscpu() {
try { long speed = 0L;
LOGGER.info("Fetching CPU speed from command \"lscpu\"."); LOGGER.info("Fetching CPU speed from command \"lscpu\".");
try {
String command = "lscpu | grep -i 'Model name' | head -n 1 | egrep -o '[[:digit:]].[[:digit:]]+GHz' | sed 's/GHz//g'"; String command = "lscpu | grep -i 'Model name' | head -n 1 | egrep -o '[[:digit:]].[[:digit:]]+GHz' | sed 's/GHz//g'";
String result = Script.runSimpleBashScript(command); String result = Script.runSimpleBashScript(command);
long speed = (long) (Float.parseFloat(result) * 1000); speed = (long) (Float.parseFloat(result) * 1000);
LOGGER.info(String.format("Command [%s] resulted in the value [%s] for CPU speed.", command, speed)); LOGGER.info(String.format("Command [%s] resulted in the value [%s] for CPU speed.", command, speed));
return speed; return speed;
} catch (NullPointerException | NumberFormatException e) { } catch (NullPointerException | NumberFormatException e) {
LOGGER.error(String.format("Unable to retrieve the CPU speed from lscpu."), e); LOGGER.error(String.format("Unable to retrieve the CPU speed from lscpu."), e);
return 0L;
} }
try {
String command = "lscpu | grep -i 'CPU max MHz' | head -n 1 | sed 's/^.*: //' | xargs";
String result = Script.runSimpleBashScript(command);
speed = (long) (Float.parseFloat(result));
LOGGER.info(String.format("Command [%s] resulted in the value [%s] for CPU speed.", command, speed));
return speed;
} catch (NullPointerException | NumberFormatException e) {
LOGGER.error(String.format("Unable to retrieve the CPU speed from lscpu."), e);
}
return speed;
} }
private static long getCpuSpeedFromFile() { private static long getCpuSpeedFromFile() {
for (final String cpuInfoFreqFileName: cpuInfoFreqFileNames) {
LOGGER.info(String.format("Fetching CPU speed from file [%s].", cpuInfoFreqFileName)); LOGGER.info(String.format("Fetching CPU speed from file [%s].", cpuInfoFreqFileName));
try (Reader reader = new FileReader(cpuInfoFreqFileName)) { try (Reader reader = new FileReader(cpuInfoFreqFileName)) {
Long cpuInfoFreq = Long.parseLong(IOUtils.toString(reader).trim()); Long cpuInfoFreq = Long.parseLong(IOUtils.toString(reader).trim());
@ -155,9 +165,10 @@ public class KVMHostInfo {
return cpuInfoFreq / 1000; return cpuInfoFreq / 1000;
} catch (IOException | NumberFormatException e) { } catch (IOException | NumberFormatException e) {
LOGGER.error(String.format("Unable to retrieve the CPU speed from file [%s]", cpuInfoFreqFileName), e); LOGGER.error(String.format("Unable to retrieve the CPU speed from file [%s]", cpuInfoFreqFileName), e);
return 0L;
} }
} }
return 0L;
}
protected static long getCpuSpeedFromHostCapabilities(final String capabilities) { protected static long getCpuSpeedFromHostCapabilities(final String capabilities) {
LOGGER.info("Fetching CPU speed from \"host capabilities\""); LOGGER.info("Fetching CPU speed from \"host capabilities\"");