You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ml...@apache.org on 2014/05/28 00:16:36 UTC
git commit: updated refs/heads/master to f3a0d25
Repository: cloudstack
Updated Branches:
refs/heads/master a8140ff58 -> f3a0d257b
CLOUDSTACK-6788: Add agent property to optionally disable kvmclock on guests
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f3a0d257
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f3a0d257
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f3a0d257
Branch: refs/heads/master
Commit: f3a0d257b8c2323783f7af7d5532f38858436400
Parents: a8140ff
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Tue May 27 16:14:44 2014 -0600
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Tue May 27 16:16:41 2014 -0600
----------------------------------------------------------------------
agent/conf/agent.properties | 4 +++
.../kvm/resource/LibvirtComputingResource.java | 10 +++++-
.../hypervisor/kvm/resource/LibvirtVMDef.java | 34 +++++++++++++-------
.../resource/LibvirtComputingResourceTest.java | 8 +++++
4 files changed, 43 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f3a0d257/agent/conf/agent.properties
----------------------------------------------------------------------
diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties
index b8b7a7c..c4cabbe 100644
--- a/agent/conf/agent.properties
+++ b/agent/conf/agent.properties
@@ -129,3 +129,7 @@ domr.scripts.dir=scripts/network/domr/kvm
# 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.
+#
+# kvmclock.disable=false
+# Some newer linux kernels are incapable of reliably migrating vms with kvmclock
+# This is a workaround for the bug, admin can set this to true per-host
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f3a0d257/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index d05e3e6..dba6806 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -447,7 +447,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
protected boolean _noMemBalloon = false;
protected String _guestCpuMode;
protected String _guestCpuModel;
- private final Map<String, String> _pifs = new HashMap<String, String>();
+ protected boolean _noKvmClock;
+ private final Map <String, String> _pifs = new HashMap<String, String>();
private final Map<String, VmStats> _vmStats = new ConcurrentHashMap<String, VmStats>();
protected boolean _disconnected = true;
@@ -800,6 +801,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
value = (String)params.get("host.reserved.mem.mb");
_dom0MinMem = NumbersUtil.parseInt(value, 0) * 1024 * 1024;
+ value = (String) params.get("kvmclock.disable");
+ if (Boolean.parseBoolean(value)) {
+ _noKvmClock = true;
+ }
+
LibvirtConnection.initialize(_hypervisorURI);
Connect conn = null;
try {
@@ -3724,6 +3730,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
if (vmTO.getOs().startsWith("Windows")) {
clock.setClockOffset(ClockDef.ClockOffset.LOCALTIME);
clock.setTimer("rtc", "catchup", null);
+ } else if (vmTO.getType() != VirtualMachine.Type.User || isGuestPVEnabled(vmTO.getOs())) {
+ clock.setTimer("kvmclock", "catchup", null, _noKvmClock);
}
vm.addComp(clock);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f3a0d257/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 4032305..cf9fec0 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -242,6 +242,7 @@ public class LibvirtVMDef {
private String _timerName;
private String _tickPolicy;
private String _track;
+ private boolean _noKvmClock = false;
public ClockDef() {
_offset = ClockOffset.UTC;
@@ -257,6 +258,11 @@ public class LibvirtVMDef {
_track = track;
}
+ public void setTimer(String timerName, String tickPolicy, String track, boolean noKvmClock) {
+ _noKvmClock = noKvmClock;
+ setTimer(timerName, tickPolicy, track);
+ }
+
@Override
public String toString() {
StringBuilder clockBuilder = new StringBuilder();
@@ -268,20 +274,24 @@ public class LibvirtVMDef {
clockBuilder.append(_timerName);
clockBuilder.append("' ");
- if (_tickPolicy != null) {
- clockBuilder.append("tickpolicy='");
- clockBuilder.append(_tickPolicy);
- clockBuilder.append("' ");
- }
+ if (_timerName.equals("kvmclock") && _noKvmClock) {
+ clockBuilder.append("present='no' />");
+ } else {
+ if (_tickPolicy != null) {
+ clockBuilder.append("tickpolicy='");
+ clockBuilder.append(_tickPolicy);
+ clockBuilder.append("' ");
+ }
- if (_track != null) {
- clockBuilder.append("track='");
- clockBuilder.append(_track);
- clockBuilder.append("' ");
- }
+ if (_track != null) {
+ clockBuilder.append("track='");
+ clockBuilder.append(_track);
+ clockBuilder.append("' ");
+ }
- clockBuilder.append(">\n");
- clockBuilder.append("</timer>\n");
+ clockBuilder.append(">\n");
+ clockBuilder.append("</timer>\n");
+ }
}
clockBuilder.append("</clock>\n");
return clockBuilder.toString();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f3a0d257/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index bf4546c..faa88f0 100644
--- a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++ b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -94,6 +94,8 @@ public class LibvirtComputingResourceTest {
vmStr += "<uuid>b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9</uuid>\n";
vmStr += "<description>" + os + "</description>\n";
vmStr += "<clock offset='utc'>\n";
+ vmStr += "<timer name='kvmclock' tickpolicy='catchup' >\n";
+ vmStr += "</timer>\n";
vmStr += "</clock>\n";
vmStr += "<features>\n";
vmStr += "<pae/>\n";
@@ -166,6 +168,8 @@ public class LibvirtComputingResourceTest {
vmStr += "<uuid>b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9</uuid>\n";
vmStr += "<description>" + os + "</description>\n";
vmStr += "<clock offset='utc'>\n";
+ vmStr += "<timer name='kvmclock' tickpolicy='catchup' >\n";
+ vmStr += "</timer>\n";
vmStr += "</clock>\n";
vmStr += "<features>\n";
vmStr += "<pae/>\n";
@@ -236,6 +240,8 @@ public class LibvirtComputingResourceTest {
vmStr += "<uuid>b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9</uuid>\n";
vmStr += "<description>" + os + "</description>\n";
vmStr += "<clock offset='utc'>\n";
+ vmStr += "<timer name='kvmclock' tickpolicy='catchup' >\n";
+ vmStr += "</timer>\n";
vmStr += "</clock>\n";
vmStr += "<features>\n";
vmStr += "<pae/>\n";
@@ -311,6 +317,8 @@ public class LibvirtComputingResourceTest {
vmStr += "<uuid>b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9</uuid>\n";
vmStr += "<description>" + os + "</description>\n";
vmStr += "<clock offset='utc'>\n";
+ vmStr += "<timer name='kvmclock' tickpolicy='catchup' >\n";
+ vmStr += "</timer>\n";
vmStr += "</clock>\n";
vmStr += "<features>\n";
vmStr += "<pae/>\n";