This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.14
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.14 by this push:
new 93f3d35 kvm: FIX cpucorespersocket is not working on KVM (#4497)
93f3d35 is described below
commit 93f3d352071be326ab3b810e23da7c27a948aedd
Author: Wei Zhou <[email protected]>
AuthorDate: Wed Dec 9 15:07:51 2020 +0100
kvm: FIX cpucorespersocket is not working on KVM (#4497)
---
.../kvm/resource/LibvirtComputingResource.java | 31 ++++++++++++++++------
.../main/java/com/cloud/vm/UserVmManagerImpl.java | 9 +++++++
2 files changed, 32 insertions(+), 8 deletions(-)
diff --git
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index fd95a8c..c438833 100644
---
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2302,14 +2302,7 @@ public class LibvirtComputingResource extends
ServerResourceBase implements Serv
if (vmTO.getType() == VirtualMachine.Type.User) {
cmd.setFeatures(_cpuFeatures);
}
- // multi cores per socket, for larger core configs
- if (vcpus % 6 == 0) {
- final int sockets = vcpus / 6;
- cmd.setTopology(6, sockets);
- } else if (vcpus % 4 == 0) {
- final int sockets = vcpus / 4;
- cmd.setTopology(4, sockets);
- }
+ setCpuTopology(cmd, vcpus, vmTO.getDetails());
vm.addComp(cmd);
}
@@ -4230,4 +4223,26 @@ public class LibvirtComputingResource extends
ServerResourceBase implements Serv
return false;
}
+
+ private void setCpuTopology(CpuModeDef cmd, int vcpus, Map<String, String>
details) {
+ // multi cores per socket, for larger core configs
+ int numCoresPerSocket = -1;
+ if (details != null) {
+ final String coresPerSocket =
details.get(VmDetailConstants.CPU_CORE_PER_SOCKET);
+ final int intCoresPerSocket = NumbersUtil.parseInt(coresPerSocket,
numCoresPerSocket);
+ if (intCoresPerSocket > 0 && vcpus % intCoresPerSocket == 0) {
+ numCoresPerSocket = intCoresPerSocket;
+ }
+ }
+ if (numCoresPerSocket <= 0) {
+ if (vcpus % 6 == 0) {
+ numCoresPerSocket = 6;
+ } else if (vcpus % 4 == 0) {
+ numCoresPerSocket = 4;
+ } else {
+ numCoresPerSocket = 1;
+ }
+ }
+ cmd.setTopology(numCoresPerSocket, vcpus / numCoresPerSocket);
+ }
}
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 192a027..fe8d8a4 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -2478,6 +2478,15 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
if (ovfPropertyVO != null &&
ovfPropertyVO.isPassword()) {
details.put(detailName,
DBEncryptionUtil.encrypt(details.get(detailName)));
}
+ } else if
(VmDetailConstants.CPU_CORE_PER_SOCKET.equals(detailName)) {
+ try {
+ final int val =
Integer.parseInt(details.get(detailName));
+ if (val <= 0) {
+ throw new
InvalidParameterValueException("Please enter a positive integer value for the
vm setting: " + detailName);
+ }
+ } catch (final NumberFormatException e) {
+ throw new InvalidParameterValueException("Please
enter an integer value for vm setting: " + detailName);
+ }
}
}
vmInstance.setDetails(details);