|
19 | 19 | import java.io.BufferedReader;
|
20 | 20 | import java.io.File;
|
21 | 21 | import java.io.FileNotFoundException;
|
22 |
| -import java.io.FileReader; |
23 | 22 | import java.io.IOException;
|
24 |
| -import java.io.Reader; |
25 | 23 | import java.io.StringReader;
|
26 | 24 | import java.net.InetAddress;
|
27 | 25 | import java.net.URI;
|
|
55 | 53 | import org.apache.cloudstack.storage.to.VolumeObjectTO;
|
56 | 54 | import org.apache.cloudstack.utils.hypervisor.HypervisorUtils;
|
57 | 55 | import org.apache.cloudstack.utils.linux.CPUStat;
|
| 56 | +import org.apache.cloudstack.utils.linux.KVMHostInfo; |
58 | 57 | import org.apache.cloudstack.utils.linux.MemStat;
|
59 | 58 | import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
|
60 | 59 | import org.apache.cloudstack.utils.security.KeyStoreUtils;
|
61 | 60 | import org.apache.commons.collections.MapUtils;
|
62 | 61 | import org.apache.commons.io.FileUtils;
|
63 |
| -import org.apache.commons.io.IOUtils; |
64 | 62 | import org.apache.commons.lang.ArrayUtils;
|
65 | 63 | import org.apache.commons.lang.math.NumberUtils;
|
66 | 64 | import org.apache.log4j.Logger;
|
@@ -311,8 +309,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
311 | 309 | protected int _cmdsTimeout;
|
312 | 310 | protected int _stopTimeout;
|
313 | 311 | protected CPUStat _cpuStat = new CPUStat();
|
314 |
| - protected MemStat _memStat = new MemStat(); |
315 |
| - |
| 312 | + protected MemStat _memStat = new MemStat(_dom0MinMem, _dom0OvercommitMem); |
316 | 313 | private final LibvirtUtilitiesHelper libvirtUtilitiesHelper = new LibvirtUtilitiesHelper();
|
317 | 314 |
|
318 | 315 | @Override
|
@@ -871,7 +868,7 @@ public boolean configure(final String name, final Map<String, Object> params) th
|
871 | 868 |
|
872 | 869 | value = (String)params.get("host.reserved.mem.mb");
|
873 | 870 | // Reserve 1GB unless admin overrides
|
874 |
| - _dom0MinMem = NumbersUtil.parseInt(value, 1024) * 1024 * 1024L; |
| 871 | + _dom0MinMem = NumbersUtil.parseInt(value, 1024) * 1024* 1024L; |
875 | 872 |
|
876 | 873 | value = (String)params.get("host.overcommit.mem.mb");
|
877 | 874 | // Support overcommit memory for host if host uses ZSWAP, KSM and other memory
|
@@ -2661,12 +2658,14 @@ private Map<String, String> getVersionStrings() {
|
2661 | 2658 | @Override
|
2662 | 2659 | public StartupCommand[] initialize() {
|
2663 | 2660 |
|
2664 |
| - final List<Object> info = getHostInfo(); |
| 2661 | + final KVMHostInfo info = new KVMHostInfo(_dom0MinMem, _dom0OvercommitMem); |
| 2662 | + |
| 2663 | + final String capabilities = String.join(",", info.getCapabilities()); |
2665 | 2664 |
|
2666 | 2665 | final StartupRoutingCommand cmd =
|
2667 |
| - new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), _hypervisorType, |
| 2666 | + new StartupRoutingCommand(info.getCpus(), info.getCpuSpeed(), info.getTotalMemory(), info.getReservedMemory(), capabilities, _hypervisorType, |
2668 | 2667 | RouterPrivateIpStrategy.HostLocal);
|
2669 |
| - cmd.setCpuSockets((Integer)info.get(5)); |
| 2668 | + cmd.setCpuSockets(info.getCpuSockets()); |
2670 | 2669 | fillNetworkInformation(cmd);
|
2671 | 2670 | _privateIp = cmd.getPrivateIpAddress();
|
2672 | 2671 | cmd.getHostDetails().putAll(getVersionStrings());
|
@@ -2886,71 +2885,6 @@ private HashMap<String, HostVmStateReportEntry> getHostVmStateReport(final Conne
|
2886 | 2885 | return vmStates;
|
2887 | 2886 | }
|
2888 | 2887 |
|
2889 |
| - protected List<Object> getHostInfo() { |
2890 |
| - final ArrayList<Object> info = new ArrayList<Object>(); |
2891 |
| - long speed = 0; |
2892 |
| - long cpus = 0; |
2893 |
| - long ram = 0; |
2894 |
| - int cpuSockets = 0; |
2895 |
| - String cap = null; |
2896 |
| - try { |
2897 |
| - final Connect conn = LibvirtConnection.getConnection(); |
2898 |
| - final NodeInfo hosts = conn.nodeInfo(); |
2899 |
| - speed = getCpuSpeed(hosts); |
2900 |
| - |
2901 |
| - /* |
2902 |
| - * Some CPUs report a single socket and multiple NUMA cells. |
2903 |
| - * We need to multiply them to get the correct socket count. |
2904 |
| - */ |
2905 |
| - cpuSockets = hosts.sockets; |
2906 |
| - if (hosts.nodes > 0) { |
2907 |
| - cpuSockets = hosts.sockets * hosts.nodes; |
2908 |
| - } |
2909 |
| - cpus = hosts.cpus; |
2910 |
| - ram = hosts.memory * 1024L; |
2911 |
| - final LibvirtCapXMLParser parser = new LibvirtCapXMLParser(); |
2912 |
| - parser.parseCapabilitiesXML(conn.getCapabilities()); |
2913 |
| - final ArrayList<String> oss = parser.getGuestOsType(); |
2914 |
| - for (final String s : oss) { |
2915 |
| - /* |
2916 |
| - * Even host supports guest os type more than hvm, we only |
2917 |
| - * report hvm to management server |
2918 |
| - */ |
2919 |
| - if (s.equalsIgnoreCase("hvm")) { |
2920 |
| - cap = "hvm"; |
2921 |
| - } |
2922 |
| - } |
2923 |
| - } catch (final LibvirtException e) { |
2924 |
| - s_logger.trace("Ignoring libvirt error.", e); |
2925 |
| - } |
2926 |
| - |
2927 |
| - if (isSnapshotSupported()) { |
2928 |
| - cap = cap + ",snapshot"; |
2929 |
| - } |
2930 |
| - |
2931 |
| - info.add((int)cpus); |
2932 |
| - info.add(speed); |
2933 |
| - // Report system's RAM as actual RAM minus host OS reserved RAM |
2934 |
| - ram = ram - _dom0MinMem + _dom0OvercommitMem; |
2935 |
| - info.add(ram); |
2936 |
| - info.add(cap); |
2937 |
| - info.add(_dom0MinMem); |
2938 |
| - info.add(cpuSockets); |
2939 |
| - s_logger.debug("cpus=" + cpus + ", speed=" + speed + ", ram=" + ram + ", _dom0MinMem=" + _dom0MinMem + ", _dom0OvercommitMem=" + _dom0OvercommitMem + ", cpu sockets=" + cpuSockets); |
2940 |
| - |
2941 |
| - return info; |
2942 |
| - } |
2943 |
| - |
2944 |
| - protected static long getCpuSpeed(final NodeInfo nodeInfo) { |
2945 |
| - try (final Reader reader = new FileReader( |
2946 |
| - "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq")) { |
2947 |
| - return Long.parseLong(IOUtils.toString(reader).trim()) / 1000; |
2948 |
| - } catch (IOException | NumberFormatException e) { |
2949 |
| - s_logger.warn("Could not read cpuinfo_max_freq"); |
2950 |
| - return nodeInfo.mhz; |
2951 |
| - } |
2952 |
| - } |
2953 |
| - |
2954 | 2888 | public String rebootVM(final Connect conn, final String vmName) {
|
2955 | 2889 | Domain dm = null;
|
2956 | 2890 | String msg = null;
|
|
0 commit comments