]> xenbits.xensource.com Git - libvirt.git/commitdiff
Set default vCPUs to match pCPUs for OpenVZ containers (Evgeniy Sokolov )
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 24 Nov 2008 19:34:21 +0000 (19:34 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 24 Nov 2008 19:34:21 +0000 (19:34 +0000)
ChangeLog
src/openvz_conf.c
src/openvz_conf.h
src/openvz_driver.c

index 8414809c719756f5b3df4765a7384b1229830301..27acc624021eee93ac5f3c32566f251d0a1af9f4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Nov 24 19:32:40 GMT 2008 Dnaiel P. Berrange <berrange@redhat.com>
+
+       * src/openvz_conf.c, src/openvz_conf.h, src/openvz_driver.c:
+       Default vCPUs to equal host pCPU count if not set in config
+       (patch from Evgeniy Sokolov)
+
 Mon Nov 24 19:27:40 GMT 2008 Dnaiel P. Berrange <berrange@redhat.com>
 
        * examples/domain-events/events-python/event-test.py,
index 70d510427d5150a4d5c1cb10161e7f91ffa763f2..fc4ef200254acb14b967d0a028e678544a36dd08 100644 (file)
@@ -49,6 +49,7 @@
 #include "buf.h"
 #include "memory.h"
 #include "util.h"
+#include "nodeinfo.h"
 
 static char *openvzLocateConfDir(void);
 static int openvzGetVPSUUID(int vpsid, char *uuidstr);
@@ -427,10 +428,11 @@ int openvzLoadDomains(struct openvz_driver *driver) {
             goto cleanup;
         } else if (ret > 0) {
             dom->def->vcpus = strtoI(temp);
-        } else {
-            dom->def->vcpus = 1;
         }
 
+        if (ret == 0 || dom->def->vcpus == 0)
+            dom->def->vcpus = openvzGetNodeCPUs();
+
         /* XXX load rest of VM config data .... */
 
         openvzReadNetworkConf(NULL, dom->def, veid);
@@ -457,6 +459,19 @@ int openvzLoadDomains(struct openvz_driver *driver) {
     return -1;
 }
 
+unsigned int
+openvzGetNodeCPUs(void)
+{
+    virNodeInfo nodeinfo;
+
+    if (virNodeInfoPopulate(NULL, &nodeinfo) < 0) {
+        openvzError(NULL, VIR_ERR_INTERNAL_ERROR,
+                      _("Cound not read nodeinfo"));
+        return 0;
+    }
+
+    return nodeinfo.cpus;
+}
 
 int
 openvzWriteConfigParam(int vpsid, const char *param, const char *value)
index f30f0879bdd60f6bfca06660a5af94f27249ffde..4328f15a65e3e52c121b960fa5b08fc372d5c313 100644 (file)
@@ -68,5 +68,6 @@ int openvzLoadDomains(struct openvz_driver *driver);
 void openvzFreeDriver(struct openvz_driver *driver);
 int strtoI(const char *str);
 int openvzSetDefinedUUID(int vpsid, unsigned char *uuid);
+unsigned int openvzGetNodeCPUs(void);
 
 #endif /* OPENVZ_CONF_H */
index 6ea35576859a09c8c9b62cfa778f0499b32b5180..83cf19ab7bb65aa8e3f1b5d80a67bf9f2d515a6e 100644 (file)
@@ -834,7 +834,7 @@ static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
     char   str_vcpus[32];
     const char *prog[] = { VZCTL, "--quiet", "set", vm ? vm->def->name : NULL,
                            "--cpus", str_vcpus, "--save", NULL };
-
+    unsigned int pcpus;
 
     if (!vm) {
         openvzError(conn, VIR_ERR_INVALID_DOMAIN,
@@ -848,6 +848,10 @@ static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
         return -1;
     }
 
+    pcpus = openvzGetNodeCPUs();
+    if (pcpus > 0 && pcpus < nvcpus)
+        nvcpus = pcpus;
+
     snprintf(str_vcpus, 31, "%d", nvcpus);
     str_vcpus[31] = '\0';