CLOUDSTACK-8424: Add cpu features if guest.cpu.features is set

This improvements checks for "guest.cpu.features" property which is a space
separated list of cpu features that is specific for a host. When added, it
will add  <feature policy='require' name='{{feature-you-listed}}'/> in the
<cpu> section of the generated vm spec xml.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit ea7fd37783cbc7ec78de5a5e84395381b1800a3e)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2015-04-28 13:16:04 +02:00
parent bede34d297
commit 58cc569273
3 changed files with 28 additions and 0 deletions

View File

@ -126,6 +126,9 @@ hypervisor.type=kvm
# on,run virsh capabilities for more details.
# guest.cpu.model=
#
# This param will require CPU features on the <cpu> section
# guest.cpu.features=vmx vme
#
# vm.memballoon.disable=true
# Disable memory ballooning on vm guests for overcommit, by default overcommit
# feature enables balloon and sets currentMemory to a minimum value.

View File

@ -451,6 +451,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
protected boolean _noMemBalloon = false;
protected String _guestCpuMode;
protected String _guestCpuModel;
protected List<String> _cpuFeatures;
protected boolean _noKvmClock;
protected String _videoHw;
protected int _videoRam;
@ -862,6 +863,16 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
params.put("guest.cpu.model", _guestCpuModel);
}
String cpuFeatures = (String)params.get("guest.cpu.features");
if (cpuFeatures != null) {
_cpuFeatures = new ArrayList<String>();
for (String feature: cpuFeatures.split(" ")) {
if (feature != null || !feature.isEmpty()) {
_cpuFeatures.add(feature);
}
}
}
String[] info = NetUtils.getNetworkParams(_privateNic);
_monitor = new KVMHAMonitor(null, info[0], _heartBeatPath);
@ -3675,6 +3686,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
CpuModeDef cmd = new CpuModeDef();
cmd.setMode(_guestCpuMode);
cmd.setModel(_guestCpuModel);
cmd.setFeatures(_cpuFeatures);
// multi cores per socket, for larger core configs
if (vcpus % 6 == 0) {
int sockets = vcpus / 6;

View File

@ -1043,6 +1043,7 @@ public class LibvirtVMDef {
public static class CpuModeDef {
private String _mode;
private String _model;
private List<String> _features;
private int _coresPerSocket = -1;
private int _sockets = -1;
@ -1050,6 +1051,12 @@ public class LibvirtVMDef {
_mode = mode;
}
public void setFeatures(List<String> features) {
if (features != null) {
_features = features;
}
}
public void setModel(String model) {
_model = model;
}
@ -1074,6 +1081,12 @@ public class LibvirtVMDef {
modeBuilder.append("<cpu>");
}
if (_features != null) {
for (String feature : _features) {
modeBuilder.append("<feature policy='require' name='" + feature + "'/>");
}
}
// add topology
if (_sockets > 0 && _coresPerSocket > 0) {
modeBuilder.append("<topology sockets='" + _sockets + "' cores='" + _coresPerSocket + "' threads='1' />");