kernel - Add vm.cache_vmspaces boot-time tunable
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 9 Mar 2011 02:19:56 +0000 (18:19 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 9 Mar 2011 02:19:56 +0000 (18:19 -0800)
* Add vm.cache_vmspaces boot-time tunable, defaulting to 32 objects.
  This controls how many free vmspace+pmap structures can be maintained
  in the objcache.

* Change the sysref API a bit.  mag_capacity becomes nom_cache.

Related-to: IRC conversion thesjg & vsrinivas

sys/kern/kern_sysref.c
sys/kern/vfs_lock.c
sys/sys/sysref.h
sys/vfs/devfs/devfs_core.c
sys/vm/vm_map.c

index 5138bb9..0cffa99 100644 (file)
@@ -144,7 +144,7 @@ sysref_alloc(struct sysref_class *srclass)
                KKASSERT(srclass->mtype != NULL);
                srclass->oc = objcache_create_mbacked(
                                srclass->mtype, srclass->objsize, 
-                               NULL, srclass->mag_capacity,
+                               NULL, srclass->nom_cache,
                                sysref_ctor, sysref_dtor, srclass);
        }
 
index f02864d..2a96f9c 100644 (file)
@@ -70,7 +70,7 @@ static struct sysref_class vnode_sysref_class = {
        .proto =        SYSREF_PROTO_VNODE,
        .offset =       offsetof(struct vnode, v_sysref),
        .objsize =      sizeof(struct vnode),
-       .mag_capacity = 256,
+       .nom_cache =    256,
        .flags =        SRC_MANAGEDINIT,
        .ctor =         vnode_ctor,
        .dtor =         vnode_dtor,
index 7afc2dc..e5d05b0 100644 (file)
@@ -80,7 +80,7 @@ struct sysref_class {
        int     proto;                  /* RPC protocol id */
        int     offset;                 /* offset of sysref in resource */
        int     objsize;                /* size of the resource structure */
-       int     mag_capacity;           /* magazine capacity init (def 64) */
+       int     nom_cache;              /* nominal objects to cache */
        int     flags;
        struct objcache *oc;            /* object cache */
        objcache_ctor_fn *ctor;         /* objcache ctor chaining */
index 052b86b..6a9aa96 100644 (file)
@@ -67,7 +67,7 @@ static struct sysref_class     cdev_sysref_class = {
        .proto =        SYSREF_PROTO_DEV,
        .offset =       offsetof(struct cdev, si_sysref),
        .objsize =      sizeof(struct cdev),
-       .mag_capacity = 32,
+       .nom_cache =    32,
        .flags =        0,
        .ops =  {
                .terminate = (sysref_terminate_func_t)devfs_cdev_terminate,
index 84d12da..10224f6 100644 (file)
@@ -132,7 +132,7 @@ struct sysref_class vmspace_sysref_class = {
        .proto =        SYSREF_PROTO_VMSPACE,
        .offset =       offsetof(struct vmspace, vm_sysref),
        .objsize =      sizeof(struct vmspace),
-       .mag_capacity = 32,
+       .nom_cache =    32,
        .flags = SRC_MANAGEDINIT,
        .dtor = vmspace_dtor,
        .ops = {
@@ -498,6 +498,7 @@ vm_map_init(struct vm_map *map, vm_offset_t min, vm_offset_t max, pmap_t pmap)
        map->timestamp = 0;
        map->flags = 0;
        lockinit(&map->lock, "thrd_sleep", 0, 0);
+       TUNABLE_INT("vm.cache_vmspaces", &vmspace_sysref_class.nom_cache);
 }
 
 /*