Add the vm.exec_map_entries tunable and read-only sysctl, which controls
the number of entries in exec_map (maximum number of simultaneous execs that can be handled by the kernel). The default value of 16 is insufficient on heavily loaded machines (particularly SMP machines), and if it is exceeded then executing further processes will generate a SIGABRT. This is a workaround until a better solution can be implemented. Reviewed by: alc MFC after: 3 days
This commit is contained in:
parent
0eb958a2b7
commit
f5fca0d8be
@ -70,6 +70,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/lock.h>
|
||||
#include <sys/mutex.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/selinfo.h>
|
||||
#include <sys/pipe.h>
|
||||
@ -87,6 +88,11 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
long physmem;
|
||||
|
||||
static int exec_map_entries = 16;
|
||||
TUNABLE_INT("vm.exec_map_entries", &exec_map_entries);
|
||||
SYSCTL_INT(_vm, OID_AUTO, exec_map_entries, CTLFLAG_RD, &exec_map_entries, 0,
|
||||
"Maximum number of simultaneous execs");
|
||||
|
||||
/*
|
||||
* System initialization
|
||||
*/
|
||||
@ -188,7 +194,7 @@ vm_ksubmap_init(struct kva_md_info *kmi)
|
||||
(nswbuf*MAXPHYS));
|
||||
pager_map->system_map = 1;
|
||||
exec_map = kmem_suballoc(kernel_map, &minaddr, &maxaddr,
|
||||
(16*(ARG_MAX+(PAGE_SIZE*3))));
|
||||
(exec_map_entries*(ARG_MAX+(PAGE_SIZE*3))));
|
||||
pipe_map = kmem_suballoc(kernel_map, &minaddr, &maxaddr, maxpipekva);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user