diff options
| author | Patrick Mooney <pmooney@pfmooney.com> | 2016-01-20 19:57:43 +0000 |
|---|---|---|
| committer | Patrick Mooney <pmooney@pfmooney.com> | 2016-01-20 20:27:00 +0000 |
| commit | 51a0341a7a6132c2a6b88a155ebd507963f9e8be (patch) | |
| tree | 09488e9a305aef647f7f108cd717a19aa29eb75f | |
| parent | f4926b818bc9655013f761560bc515207b30f648 (diff) | |
| download | illumos-joyent-51a0341a7a6132c2a6b88a155ebd507963f9e8be.tar.gz | |
OS-5098 lxbrand want kernel.shmmni and kernel.sem tunables
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
| -rw-r--r-- | usr/src/uts/common/brand/lx/procfs/lx_proc.h | 6 | ||||
| -rw-r--r-- | usr/src/uts/common/brand/lx/procfs/lx_prvnops.c | 61 |
2 files changed, 65 insertions, 2 deletions
diff --git a/usr/src/uts/common/brand/lx/procfs/lx_proc.h b/usr/src/uts/common/brand/lx/procfs/lx_proc.h index 29434c8146..3e2b70f4fc 100644 --- a/usr/src/uts/common/brand/lx/procfs/lx_proc.h +++ b/usr/src/uts/common/brand/lx/procfs/lx_proc.h @@ -21,7 +21,7 @@ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. - * Copyright 2015 Joyent, Inc. + * Copyright 2016 Joyent, Inc. */ #ifndef _LX_PROC_H @@ -208,7 +208,9 @@ typedef enum lxpr_nodetype { LXPR_SYS_KERNEL_PID_MAX, /* /proc/sys/kernel/pid_max */ LXPR_SYS_KERNEL_RANDDIR, /* /proc/sys/kernel/random */ LXPR_SYS_KERNEL_RAND_BOOTID, /* /proc/sys/kernel/random/boot_id */ - LXPR_SYS_KERNEL_SHMMAX, /* /proc/sys/kernel/shmmax */ + LXPR_SYS_KERNEL_SEM, /* /proc/sys/kernel/sem */ + LXPR_SYS_KERNEL_SHMMAX, /* /proc/sys/kernel/shmmax */ + LXPR_SYS_KERNEL_SHMMNI, /* /proc/sys/kernel/shmmni */ LXPR_SYS_KERNEL_THREADS_MAX, /* /proc/sys/kernel/threads-max */ LXPR_SYS_NETDIR, /* /proc/sys/net */ LXPR_SYS_NET_COREDIR, /* /proc/sys/net/core */ diff --git a/usr/src/uts/common/brand/lx/procfs/lx_prvnops.c b/usr/src/uts/common/brand/lx/procfs/lx_prvnops.c index 849cfa376b..5899b3c884 100644 --- a/usr/src/uts/common/brand/lx/procfs/lx_prvnops.c +++ b/usr/src/uts/common/brand/lx/procfs/lx_prvnops.c @@ -217,7 +217,9 @@ static void lxpr_read_sys_kernel_ngroups_max(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_kernel_osrel(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_kernel_pid_max(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_kernel_rand_bootid(lxpr_node_t *, lxpr_uiobuf_t *); +static void lxpr_read_sys_kernel_sem(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_kernel_shmmax(lxpr_node_t *, lxpr_uiobuf_t *); +static void lxpr_read_sys_kernel_shmmni(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_kernel_threads_max(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_net_core_somaxc(lxpr_node_t *, lxpr_uiobuf_t *); static void lxpr_read_sys_vm_minfr_kb(lxpr_node_t *, lxpr_uiobuf_t *); @@ -238,8 +240,13 @@ static int lxpr_write_sys_kernel_corepatt(lxpr_node_t *, uio_t *, cred_t *, #define ttolxlwp(t) ((struct lx_lwp_data *)ttolwpbrand(t)) +extern rctl_hndl_t rc_process_semmsl; +extern rctl_hndl_t rc_process_semopm; +extern rctl_hndl_t rc_zone_semmni; + extern rctl_hndl_t rc_zone_msgmni; extern rctl_hndl_t rc_zone_shmmax; +extern rctl_hndl_t rc_zone_shmmni; #define FOURGB 4294967295 /* @@ -462,7 +469,9 @@ static lxpr_dirent_t sys_kerneldir[] = { { LXPR_SYS_KERNEL_OSREL, "osrelease" }, { LXPR_SYS_KERNEL_PID_MAX, "pid_max" }, { LXPR_SYS_KERNEL_RANDDIR, "random" }, + { LXPR_SYS_KERNEL_SEM, "sem" }, { LXPR_SYS_KERNEL_SHMMAX, "shmmax" }, + { LXPR_SYS_KERNEL_SHMMNI, "shmmni" }, { LXPR_SYS_KERNEL_THREADS_MAX, "threads-max" }, }; @@ -700,7 +709,9 @@ static void (*lxpr_read_function[LXPR_NFILES])() = { lxpr_read_sys_kernel_pid_max, /* /proc/sys/kernel/pid_max */ lxpr_read_invalid, /* /proc/sys/kernel/random */ lxpr_read_sys_kernel_rand_bootid, /* /proc/sys/kernel/random/boot_id */ + lxpr_read_sys_kernel_sem, /* /proc/sys/kernel/sem */ lxpr_read_sys_kernel_shmmax, /* /proc/sys/kernel/shmmax */ + lxpr_read_sys_kernel_shmmni, /* /proc/sys/kernel/shmmni */ lxpr_read_sys_kernel_threads_max, /* /proc/sys/kernel/threads-max */ lxpr_read_invalid, /* /proc/sys/net */ lxpr_read_invalid, /* /proc/sys/net/core */ @@ -818,7 +829,9 @@ static vnode_t *(*lxpr_lookup_function[LXPR_NFILES])() = { lxpr_lookup_not_a_dir, /* /proc/sys/kernel/pid_max */ lxpr_lookup_sys_kdir_randdir, /* /proc/sys/kernel/random */ lxpr_lookup_not_a_dir, /* /proc/sys/kernel/random/boot_id */ + lxpr_lookup_not_a_dir, /* /proc/sys/kernel/sem */ lxpr_lookup_not_a_dir, /* /proc/sys/kernel/shmmax */ + lxpr_lookup_not_a_dir, /* /proc/sys/kernel/shmmni */ lxpr_lookup_not_a_dir, /* /proc/sys/kernel/threads-max */ lxpr_lookup_sys_netdir, /* /proc/sys/net */ lxpr_lookup_sys_net_coredir, /* /proc/sys/net/core */ @@ -936,7 +949,9 @@ static int (*lxpr_readdir_function[LXPR_NFILES])() = { lxpr_readdir_not_a_dir, /* /proc/sys/kernel/pid_max */ lxpr_readdir_sys_kdir_randdir, /* /proc/sys/kernel/random */ lxpr_readdir_not_a_dir, /* /proc/sys/kernel/random/boot_id */ + lxpr_readdir_not_a_dir, /* /proc/sys/kernel/sem */ lxpr_readdir_not_a_dir, /* /proc/sys/kernel/shmmax */ + lxpr_readdir_not_a_dir, /* /proc/sys/kernel/shmmni */ lxpr_readdir_not_a_dir, /* /proc/sys/kernel/threads-max */ lxpr_readdir_sys_netdir, /* /proc/sys/net */ lxpr_readdir_sys_net_coredir, /* /proc/sys/net/core */ @@ -4112,6 +4127,34 @@ lxpr_read_sys_kernel_rand_bootid(lxpr_node_t *lxpnp, lxpr_uiobuf_t *uiobuf) } static void +lxpr_read_sys_kernel_sem(lxpr_node_t *lxpnp, lxpr_uiobuf_t *uiobuf) +{ + proc_t *pp = curproc; + rctl_qty_t vmsl, vopm, vmni, vmns; + + ASSERT(lxpnp->lxpr_type == LXPR_SYS_KERNEL_SEM); + + mutex_enter(&pp->p_lock); + vmsl = rctl_enforced_value(rc_process_semmsl, pp->p_rctls, pp); + vopm = rctl_enforced_value(rc_process_semopm, pp->p_rctls, pp); + vmni = rctl_enforced_value(rc_zone_semmni, pp->p_zone->zone_rctls, pp); + mutex_exit(&pp->p_lock); + vmns = vmsl * vmni; + if (vmns < vmsl || vmns < vmni) { + vmns = ULLONG_MAX; + } + /* + * Format: semmsl semmns semopm semmni + * - semmsl: Limit semaphores in a sempahore set. + * - semmns: Limit semaphores in all semaphore sets + * - semopm: Limit operations in a single semop call + * - semmni: Limit number of semaphore sets + */ + lxpr_uiobuf_printf(uiobuf, "%llu\t%llu\t%llu\t%llu\n", + vmsl, vmns, vopm, vmni); +} + +static void lxpr_read_sys_kernel_shmmax(lxpr_node_t *lxpnp, lxpr_uiobuf_t *uiobuf) { rctl_qty_t val; @@ -4130,6 +4173,24 @@ lxpr_read_sys_kernel_shmmax(lxpr_node_t *lxpnp, lxpr_uiobuf_t *uiobuf) } static void +lxpr_read_sys_kernel_shmmni(lxpr_node_t *lxpnp, lxpr_uiobuf_t *uiobuf) +{ + rctl_qty_t val; + + ASSERT(lxpnp->lxpr_type == LXPR_SYS_KERNEL_SHMMNI); + + mutex_enter(&curproc->p_lock); + val = rctl_enforced_value(rc_zone_shmmni, + curproc->p_zone->zone_rctls, curproc); + mutex_exit(&curproc->p_lock); + + if (val > FOURGB) + val = FOURGB; + + lxpr_uiobuf_printf(uiobuf, "%u\n", (uint_t)val); +} + +static void lxpr_read_sys_kernel_threads_max(lxpr_node_t *lxpnp, lxpr_uiobuf_t *uiobuf) { ASSERT(lxpnp->lxpr_type == LXPR_SYS_KERNEL_THREADS_MAX); |
