1
0
mirror of https://github.com/systemd/systemd.git synced 2025-02-04 21:47:31 +03:00

udevd.c: set udev children_max according to CPU count

Setting children_max according to RAM leads to too much concurrent I/O.
This commit is contained in:
Harald Hoyer 2013-03-25 13:02:05 +01:00
parent c5962bd1d1
commit 8cc3f8c0bc

View File

@ -879,29 +879,6 @@ static void static_dev_create_from_modules(struct udev *udev)
fclose(f); 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) static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink)
{ {
int ctrl = -1, netlink = -1; int ctrl = -1, netlink = -1;
@ -1278,13 +1255,13 @@ int main(int argc, char *argv[])
} }
if (children_max <= 0) { if (children_max <= 0) {
int memsize = mem_size_mb(); cpu_set_t cpu_set;
/* set value depending on the amount of RAM */ children_max = 8;
if (memsize > 0)
children_max = 16 + (memsize / 8); if (sched_getaffinity(0, sizeof (cpu_set), &cpu_set) == 0) {
else children_max += CPU_COUNT(&cpu_set) * 2;
children_max = 16; }
} }
log_debug("set children_max to %u\n", children_max); log_debug("set children_max to %u\n", children_max);