]> git.proxmox.com Git - systemd.git/commitdiff
udevd.c: set udev children_max according to CPU count
authorHarald Hoyer <harald@redhat.com>
Mon, 25 Mar 2013 12:02:05 +0000 (13:02 +0100)
committerHarald Hoyer <harald@redhat.com>
Mon, 25 Mar 2013 12:11:18 +0000 (13:11 +0100)
Setting children_max according to RAM leads to too much concurrent I/O.

src/udev/udevd.c

index 834c7d97782cd3300079927486362d38ba6d3147..b30bedfa5c184e9df673ffac53b38f202d3d44bc 100644 (file)
@@ -879,29 +879,6 @@ static void static_dev_create_from_modules(struct udev *udev)
         fclose(f);
 }
 
-static int mem_size_mb(void)
-{
-        FILE *f;
-        char buf[4096];
-        long int memsize = -1;
-
-        f = fopen("/proc/meminfo", "re");
-        if (f == NULL)
-                return -1;
-
-        while (fgets(buf, sizeof(buf), f) != NULL) {
-                long int value;
-
-                if (sscanf(buf, "MemTotal: %ld kB", &value) == 1) {
-                        memsize = value / 1024;
-                        break;
-                }
-        }
-
-        fclose(f);
-        return memsize;
-}
-
 static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink)
 {
         int ctrl = -1, netlink = -1;
@@ -1278,13 +1255,13 @@ int main(int argc, char *argv[])
         }
 
         if (children_max <= 0) {
-                int memsize = mem_size_mb();
+                cpu_set_t cpu_set;
 
-                /* set value depending on the amount of RAM */
-                if (memsize > 0)
-                        children_max = 16 + (memsize / 8);
-                else
-                        children_max = 16;
+                children_max = 8;
+
+                if (sched_getaffinity(0, sizeof (cpu_set), &cpu_set) == 0) {
+                        children_max +=  CPU_COUNT(&cpu_set) * 2;
+                }
         }
         log_debug("set children_max to %u\n", children_max);