mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	kvm: Agent should not check if remaining memory on host is sufficient (#2766)
When a Instance is (attempted to be) started in KVM Host the Agent should not worry about the allocated memory on this host. To make a proper judgement we need to take more into account: - Memory Overcommit ratio - Host reserved memory - Host overcommit memory The Management Server has all the information and the DeploymentPlanner has to make the decision if a Instance should and can be started on a Host, not the host itself. Signed-off-by: Wido den Hollander <wido@widodh.nl>
This commit is contained in:
		
							parent
							
								
									75030e5522
								
							
						
					
					
						commit
						65f31f1a9f
					
				| @ -277,7 +277,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv | |||||||
|     protected int _rngRateBytes = 2048; |     protected int _rngRateBytes = 2048; | ||||||
|     private File _qemuSocketsPath; |     private File _qemuSocketsPath; | ||||||
|     private final String _qemuGuestAgentSocketName = "org.qemu.guest_agent.0"; |     private final String _qemuGuestAgentSocketName = "org.qemu.guest_agent.0"; | ||||||
|     private long _totalMemory; |  | ||||||
|     protected WatchDogAction _watchDogAction = WatchDogAction.NONE; |     protected WatchDogAction _watchDogAction = WatchDogAction.NONE; | ||||||
|     protected WatchDogModel _watchDogModel = WatchDogModel.I6300ESB; |     protected WatchDogModel _watchDogModel = WatchDogModel.I6300ESB; | ||||||
| 
 | 
 | ||||||
| @ -2603,7 +2602,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv | |||||||
|     public StartupCommand[] initialize() { |     public StartupCommand[] initialize() { | ||||||
| 
 | 
 | ||||||
|         final List<Object> info = getHostInfo(); |         final List<Object> info = getHostInfo(); | ||||||
|         _totalMemory = (Long)info.get(2); |  | ||||||
| 
 | 
 | ||||||
|         final StartupRoutingCommand cmd = |         final StartupRoutingCommand cmd = | ||||||
|                 new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), _hypervisorType, |                 new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), _hypervisorType, | ||||||
| @ -3792,10 +3790,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public long getTotalMemory() { |  | ||||||
|         return _totalMemory; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getHostDistro() { |     public String getHostDistro() { | ||||||
|         return _hostDistro; |         return _hostDistro; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ import java.util.List; | |||||||
| 
 | 
 | ||||||
| import org.apache.log4j.Logger; | import org.apache.log4j.Logger; | ||||||
| import org.libvirt.Connect; | import org.libvirt.Connect; | ||||||
| import org.libvirt.Domain; |  | ||||||
| import org.libvirt.DomainInfo.DomainState; | import org.libvirt.DomainInfo.DomainState; | ||||||
| import org.libvirt.LibvirtException; | import org.libvirt.LibvirtException; | ||||||
| 
 | 
 | ||||||
| @ -65,13 +64,6 @@ public final class LibvirtStartCommandWrapper extends CommandWrapper<StartComman | |||||||
|             vm = libvirtComputingResource.createVMFromSpec(vmSpec); |             vm = libvirtComputingResource.createVMFromSpec(vmSpec); | ||||||
|             conn = libvirtUtilitiesHelper.getConnectionByType(vm.getHvsType()); |             conn = libvirtUtilitiesHelper.getConnectionByType(vm.getHvsType()); | ||||||
| 
 | 
 | ||||||
|             Long remainingMem = getFreeMemory(conn, libvirtComputingResource); |  | ||||||
|             if (remainingMem == null){ |  | ||||||
|                 return new StartAnswer(command, "failed to get free memory"); |  | ||||||
|             } else if (remainingMem < vmSpec.getMinRam()) { |  | ||||||
|                 return new StartAnswer(command, "Not enough memory on the host, remaining: " + remainingMem + ", asking: " + vmSpec.getMinRam()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             final NicTO[] nics = vmSpec.getNics(); |             final NicTO[] nics = vmSpec.getNics(); | ||||||
| 
 | 
 | ||||||
|             for (final NicTO nic : nics) { |             for (final NicTO nic : nics) { | ||||||
| @ -160,22 +152,4 @@ public final class LibvirtStartCommandWrapper extends CommandWrapper<StartComman | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     private Long getFreeMemory(final Connect conn, final LibvirtComputingResource libvirtComputingResource){ |  | ||||||
|         try { |  | ||||||
|             long allocatedMem = 0; |  | ||||||
|             int[] ids = conn.listDomains(); |  | ||||||
|             for(int id :ids) { |  | ||||||
|                 Domain dm = conn.domainLookupByID(id); |  | ||||||
|                 allocatedMem += dm.getMaxMemory() * 1024L; |  | ||||||
|                 s_logger.debug("vm: " + dm.getName() + " mem: " + dm.getMaxMemory() * 1024L); |  | ||||||
|             } |  | ||||||
|             Long remainingMem = libvirtComputingResource.getTotalMemory() - allocatedMem; |  | ||||||
|             s_logger.debug("remaining mem" + remainingMem); |  | ||||||
|             return remainingMem; |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             s_logger.debug("failed to get free memory", e); |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -5038,7 +5038,6 @@ public class LibvirtComputingResourceTest { | |||||||
|             when(conn.domainLookupByID(vmId)).thenReturn(dm); |             when(conn.domainLookupByID(vmId)).thenReturn(dm); | ||||||
|             when(dm.getMaxMemory()).thenReturn(1024L); |             when(dm.getMaxMemory()).thenReturn(1024L); | ||||||
|             when(dm.getName()).thenReturn(vmName); |             when(dm.getName()).thenReturn(vmName); | ||||||
|             when(libvirtComputingResource.getTotalMemory()).thenReturn(2048*1024L); |  | ||||||
|             doNothing().when(libvirtComputingResource).createVbd(conn, vmSpec, vmName, vmDef); |             doNothing().when(libvirtComputingResource).createVbd(conn, vmSpec, vmName, vmDef); | ||||||
|         } catch (final LibvirtException e) { |         } catch (final LibvirtException e) { | ||||||
|             fail(e.getMessage()); |             fail(e.getMessage()); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user