Provided by: spl_0.6.5.6-0ubuntu4_amd64 bug

NAME

       spl-module-parameters - SPL module parameters

DESCRIPTION

       Description of the different parameters to the SPL module.

   Module parameters
       spl_kmem_cache_expire (uint)
                   Cache  expiration  is  part  of  default Illumos cache behavior.  The idea is that objects in
                   magazines which have not been recently accessed should be returned to the slabs periodically.
                   This is known as cache aging and when enabled objects will be  typically  returned  after  15
                   seconds.

                   On  the  other  hand  Linux slabs are designed to never move objects back to the slabs unless
                   there is memory pressure.  This is possible because under Linux the cache  will  be  notified
                   when memory is low and objects can be released.

                   By  default only the Linux method is enabled.  It has been shown to improve responsiveness on
                   low memory systems and not negatively impact the performance of  systems  with  more  memory.
                   This  policy  may  be  changed by setting the spl_kmem_cache_expire bit mask as follows, both
                   policies may be enabled concurrently.

                   0x01 - Aging (Illumos), 0x02 - Low memory (Linux)

                   Default value: 0x02

       spl_kmem_cache_reclaim (uint)
                   When this is set it prevents Linux from being able to rapidly reclaim all the memory held  by
                   the  kmem  caches.   This  may  be  useful  in circumstances where it's preferable that Linux
                   reclaim memory from some other subsystem first.  Setting this will  increase  the  likelihood
                   out of memory events on a memory constrained system.

                   Default value: 0

       spl_kmem_cache_obj_per_slab (uint)
                   The  preferred  number  of  objects  per slab in the cache.   In general, a larger value will
                   increase the caches memory footprint  while  decreasing  the  time  required  to  perform  an
                   allocation.   Conversely,  a  smaller  value  will  minimize  the footprint and improve cache
                   reclaim time but individual allocations may take longer.

                   Default value: 8

       spl_kmem_cache_obj_per_slab_min (uint)
                   The  minimum  number  of  objects  allowed   per   slab.    Normally   slabs   will   contain
                   spl_kmem_cache_obj_per_slab  objects  but  for  caches  that  contain very large objects it's
                   desirable to only have a few, or even just one, object per slab.

                   Default value: 1

       spl_kmem_cache_max_size (uint)
                   The maximum size of a kmem cache slab in MiB.  This  effectively  limits  the  maximum  cache
                   object  size  to  spl_kmem_cache_max_size  /  spl_kmem_cache_obj_per_slab.  Caches may not be
                   created with object sized larger than this limit.

                   Default value: 32 (64-bit) or 4 (32-bit)

       spl_kmem_cache_slab_limit (uint)
                   For small objects the Linux slab allocator should be used to make the most efficient  use  of
                   the memory.  However, large objects are not supported by the Linux slab and therefore the SPL
                   implementation  is preferred.  This value is used to determine the cutoff between a small and
                   large object.

                   Objects of spl_kmem_cache_slab_limit or smaller  will  be  allocated  using  the  Linux  slab
                   allocator, large objects use the SPL allocator.  A cutoff of 16K was determined to be optimal
                   for architectures using 4K pages.

                   Default value: 16,384

       spl_kmem_cache_kmem_limit (uint)
                   Depending  on  the  size  of  a  cache  object it may be backed by kmalloc()'d or vmalloc()'d
                   memory.  This is because the size of the required allocation greatly impacts the best way  to
                   allocate the memory.

                   When  objects are small and only a small number of memory pages need to be allocated, ideally
                   just one, then kmalloc() is very efficient.  However, when  allocating  multiple  pages  with
                   kmalloc() it gets increasingly expensive because the pages must be physically contiguous.

                   For this reason we shift to vmalloc() for slabs of large objects which which removes the need
                   for  contiguous  pages.   We  cannot  use vmalloc() in all cases because there is significant
                   locking overhead involved.  This function takes a single global lock over the entire  virtual
                   address  range  which  serializes  all  allocations.   Using  slightly  different  allocation
                   functions for small and large objects allows us to handle a wide range of object sizes.   The
                   spl_kmem_cache_kmem_limit  value  is  used  to  determine  this cutoff size.  One quarter the
                   PAGE_SIZE is used as the default value because spl_kmem_cache_obj_per_slab  defaults  to  16.
                   This means that at most we will need to allocate four contiguous pages.

                   Default value: PAGE_SIZE/4

       spl_kmem_alloc_warn (uint)
                   As a general rule kmem_alloc() allocations should be small, preferably just a few pages since
                   they must by physically contiguous.  Therefore, a rate limited warning will be printed to the
                   console for any kmem_alloc() which exceeds a reasonable threshold.

                   The  default warning threshold is set to eight pages but capped at 32K to accommodate systems
                   using large pages.  This value was  selected  to  be  small  enough  to  ensure  the  largest
                   allocations  are  quickly  noticed and fixed.  But large enough to avoid logging any warnings
                   when a allocation size is larger than optimal but not a serious concern.  Since this value is
                   tunable, developers are  encouraged  to  set  it  lower  when  testing  so  any  new  largish
                   allocations  are  quickly caught.  These warnings may be disabled by setting the threshold to
                   zero.

                   Default value: 32,768

       spl_kmem_alloc_max (uint)
                   Large kmem_alloc() allocations will fail if they exceed KMALLOC_MAX_SIZE.  Allocations  which
                   are  marginally  smaller  than  this limit may succeed but should still be avoided due to the
                   expense of locating a contiguous range of free pages.  Therefore, a maximum  kmem  size  with
                   reasonable  safely  margin  of  4x is set.  Kmem_alloc() allocations larger than this maximum
                   will quickly fail.  Vmem_alloc() allocations less than  or  equal  to  this  value  will  use
                   kmalloc(), but shift to vmalloc() when exceeding this value.

                   Default value: KMALLOC_MAX_SIZE/4

       spl_kmem_cache_magazine_size (uint)
                   Cache magazines are an optimization designed to minimize the cost of allocating memory.  They
                   do  this  by keeping a per-cpu cache of recently freed objects, which can then be reallocated
                   without taking a lock. This can improve performance on  highly  contended  caches.   However,
                   because  objects  in  magazines  will  prevent  otherwise  empty slabs from being immediately
                   released this may not be ideal for low memory machines.

                   For this reason spl_kmem_cache_magazine_size can be used to  set  a  maximum  magazine  size.
                   When  this  value is set to 0 the magazine size will be automatically determined based on the
                   object size.  Otherwise magazines will be limited to 2-256  objects  per  magazine  (i.e  per
                   cpu).  Magazines may never be entirely disabled in this implementation.

                   Default value: 0

       spl_hostid (ulong)
                   The  system hostid, when set this can be used to uniquely identify a system.  By default this
                   value is set to zero which indicates the hostid is disabled.  It can be explicitly enabled by
                   placing a unique non-zero value in /etc/hostid/.

                   Default value: 0

       spl_hostid_path (charp)
                   The expected path to locate the system hostid when specified.  This value may  be  overridden
                   for non-standard configurations.

                   Default value: /etc/hostid

       spl_taskq_thread_bind (int)
                   Bind  taskq  threads  to  specific  CPUs.  When enabled all taskq threads will be distributed
                   evenly  over the available CPUs.  By default, this behavior is disabled to  allow  the  Linux
                   scheduler the maximum flexibility to determine where a thread should run.

                   Default value: 0

       spl_taskq_thread_dynamic (int)
                   Allow  dynamic  taskqs.  When enabled taskqs which set the TASKQ_DYNAMIC flag will by default
                   create only a single thread.  New threads will be created on demand up to a  maximum  allowed
                   number to facilitate the completion of outstanding tasks.  Threads which are no longer needed
                   will  be  promptly  destroyed.  By default this behavior is enabled but it can be disabled to
                   aid performance analysis or troubleshooting.

                   Default value: 1

       spl_taskq_thread_priority (int)
                   Allow newly created taskq threads to set a non-default scheduler priority.  When enabled  the
                   priority  specified  when  a  taskq is created will be applied to all threads created by that
                   taskq.  When disabled all threads will use the default  Linux  kernel  thread  priority.   By
                   default, this behavior is enabled.

                   Default value: 1

       spl_taskq_thread_sequential (int)
                   The  number of items a taskq worker thread must handle without interruption before requesting
                   a new worker thread be spawned.  This is used to control  how  quickly  taskqs  ramp  up  the
                   number  of  threads  processing the queue.  Because Linux thread creation and destruction are
                   relatively inexpensive a small default value has been selected.   This  means  that  normally
                   threads  will  be created aggressively which is desirable.  Increasing this value will result
                   in a slower thread creation rate which may be preferable for some configurations.

                   Default value: 4

                                                  Nov 18, 2013                          SPL-MODULE-PARAMETERS(5)