nvazquez commented on a change in pull request #2482: CLOUDSTACK-10321: CPU Cap 
for KVM
URL: https://github.com/apache/cloudstack/pull/2482#discussion_r173787155
 
 

 ##########
 File path: server/src/com/cloud/hypervisor/KVMGuru.java
 ##########
 @@ -52,10 +59,49 @@ protected KVMGuru() {
         super();
     }
 
+    /**
+     * Retrieve host max CPU speed
+     */
+    protected double getHostCPUSpeed(HostVO host) {
+        return host.getSpeed();
+    }
+
+    protected double getVmSpeed(VirtualMachineTO to) {
+        return to.getMaxSpeed() != null ? to.getMaxSpeed() : to.getSpeed();
+    }
+
+    /**
+    * Set VM CPU quota percentage with respect to host CPU on 'to' if CPU 
limit option is set
+    * @param to vm to
+    * @param vmProfile vm profile
+    */
+    protected void setVmQuotaPercentage(VirtualMachineTO to, 
VirtualMachineProfile vmProfile) {
+        if (to.getLimitCpuUse()) {
+            VirtualMachine vm = vmProfile.getVirtualMachine();
+            HostVO host = _hostDao.findById(vm.getHostId());
+            if (host == null) {
+                throw new CloudRuntimeException("Host with id: " + 
vm.getHostId() + " not found");
+            }
+            s_logger.debug("Limiting CPU usage for VM " + vm.getId() + " on 
host " + host.getId());
+            double hostMaxSpeed = getHostCPUSpeed(host);
+            double maxSpeed = getVmSpeed(to);
+            try {
+                BigDecimal percent = new BigDecimal(maxSpeed / hostMaxSpeed);
+                percent = percent.setScale(2, RoundingMode.HALF_DOWN);
+                to.setCpuQuotaPercentage(percent.doubleValue());
+                s_logger.debug("Host " + host.getId() + " max CPU speed = " + 
hostMaxSpeed + "MHz, VM " + vm.getId() +
+                        "max CPU speed = " + maxSpeed + "MHz. Setting CPU 
quota percentage as: " + percent.doubleValue());
+            } catch (NumberFormatException e) {
+                s_logger.error("Error calculating vm quota percentage, it wll 
not be set: " + e.getMessage());
 
 Review comment:
   Done, thanks

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to