package org.ovirt.engine.core.common.utils;
import org.ovirt.engine.core.common.businessentities.ArchitectureType;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.osinfo.OsRepository;
import org.ovirt.engine.core.compat.Version;
public class VmCommonUtils {
/**
* Check if any CPUs may and need to be hotplugged or unplugged when configuration of a running VM is
* updated from <code>source</code> to <code>destination</code>.
*
* @param source current configuration of the VM
* @param destination new configuration of the VM
* @return true, if any CPUs are to be hotplugged, false otherwise
*/
public static boolean isCpusToBeHotplugged(VM source, VM destination) {
return source.getCpuPerSocket() == destination.getCpuPerSocket()
&& source.getNumOfSockets() != destination.getNumOfSockets()
&& source.getThreadsPerCpu() == destination.getThreadsPerCpu();
}
/**
* Check if memory may and needs to be hotplugged when configuration of a running VM is
* updated from <code>source</code> to <code>destination</code>.
*
* @param source current configuration of the VM
* @param destination new configuration of the VM
* @return true, if memory is to be hotplugged, false otherwise
*/
public static boolean isMemoryToBeHotplugged(VM source, VM destination) {
return source.getMemSizeMb() < destination.getMemSizeMb();
}
/**
* Note: backend only
*
* @see #maxMemorySizeWithHotplugInMb(int, Version)
*/
public static int maxMemorySizeWithHotplugInMb(VM vm) {
return maxMemorySizeWithHotplugInMb(vm.getOs(), vm.getCompatibilityVersion());
}
/**
* Return total maximum possible memory size for the given VM, including hotplugged memory.
*
* <p>Note: backend only</p>
*
* @param osId id of operating system
* @param compatibilityVersion version of config value to query
* @return the total possible memory size with hotplug
*/
public static int maxMemorySizeWithHotplugInMb(int osId, Version compatibilityVersion) {
final ConfigValues configValue = getMaxMemConfigValueByOsId(osId);
return compatibilityVersion != null
? Config.<Integer>getValue(configValue, compatibilityVersion.getValue())
: Config.<Integer>getValue(configValue);
}
private static ConfigValues getMaxMemConfigValueByOsId(int osId) {
OsRepository osRepository = SimpleDependencyInjector.getInstance().get(OsRepository.class);
return osRepository.get64bitOss().contains(osId)
? (osRepository.getOsArchitectures().get(osId).getFamily() == ArchitectureType.ppc
? ConfigValues.VMPpc64BitMaxMemorySizeInMB
: ConfigValues.VM64BitMaxMemorySizeInMB)
: ConfigValues.VM32BitMaxMemorySizeInMB;
}
public static int getMaxMemorySizeDefault(int memorySize) {
final int maxMemoryDefaultRatio = 4;
return maxMemoryDefaultRatio * memorySize;
}
}