From 8cc3f8c0bcd23bb68166cb197a4c541d7621b19c Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Mon, 25 Mar 2013 13:02:05 +0100 Subject: udevd.c: set udev children_max according to CPU count Setting children_max according to RAM leads to too much concurrent I/O. --- src/udev/udevd.c | 35 ++++++----------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 834c7d9778..b30bedfa5c 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -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); -- cgit v1.2.3-54-g00ecf