cpuset(4)                                                            cpuset(4)


NAME
     cpuset, miser_cpuset - cpuset configuration files

DESCRIPTION
     A cpuset is defined by a cpuset configuration file and a name.  The
     cpuset configuration file is used to list the CPUs that are members of
     the cpuset and contains any additional parameters needed to define the
     cpuset.  The file permissions of the configuration file define access to
     the cpuset.  Every time permissions need to be checked, the current
     permissions of the file are used.  It is therefore possible to change
     access to a particular cpuset, without having to tear it down and
     recreate it, simply by changing the access permissions. Read access
     allows a user to retrieve information about a cpuset while execute
     permission allows the user to attach a process to the cpuset.

     The name of the cpuset is a three to eight character string.  Queue names
     having one or two characters are reserved for use by IRIX.

     For information on how to use cpusets in a Trusted IRIX environment, see
     the cpuset(1) man page.

EXAMPLE
     The following configuration file describes an exclusive cpuset containing
     8 CPUs:

     #cpuset configuration file
     EXCLUSIVE
     MEMORY_LOCAL
     MEMORY_EXCLUSIVE

     CPU 16
     CPU 17-19, 21, 23
     CPU 25
     CPU 27


     This specification will create a cpuset containing 8 CPUs, and will
     restrict those cpus to running threads that have been explicitly assigned
     to the cpuset.  Jobs running on the cpuset will use memory from nodes
     containing the cpus in the cpuset.  Jobs running on other cpusets or on
     the global cpuset will not use memory from these nodes.

SUMMARY
     Commands are newline terminated, characters following the comment
     delimiter '#' are ignored, case matters, and tokens are separated by
     whitespace which is ignored.

     The valid tokens are:

     EXCLUSIVE
          Defines a cpuset to be restricted.  It can occur anywhere in the
          file.  Anything else on the line is ignored.


     EXPLICIT
          By default, if a CPU is part of a cpuset the memory on the node
          where the CPU is located is also part of the cpuset.  This flag
          overrides the default behavior.  If this directive is present, the
          nodes with memory that are to be included in the cpuset must be
          specified using the MEM or NODE directives.

     MEMORY_LOCAL
          Threads assigned to the cpuset will attempt to assign memory only
          from nodes within the cpuset.  Assignment of memory from outside the
          cpuset will occur only if no free memory is available from within
          the cpuset.  No restrictions are made on memory assignment to
          threads running outside the cpuset.

     MEMORY_EXCLUSIVE
          Threads not assigned to the cpuset will not use memory from within
          the cpuset unless no memory outside the cpuset is available.

          If, at the time a cpuset is created, memory is already assigned to
          threads that are already running, no attempt will be made to
          explicitly move this memory.  If page migration is enabled, the
          pages will be migrated when the system detects that most references
          to the pages are non-local.

     MEMORY_KERNEL_AVOID
          The kernel will attempt to avoid allocating memory from nodes
          contained in this cpuset.  If kernel memory requests cannot be
          satisfied from outside this cpuset, this option will be ignored and
          allocations will occur from within the cpuset.

          WARNING: It is strongly recommended that this option not be used for
          most cpuset configurations.  A side effect of this option is that
          kernel memory allocations become concentrated on the remaining
          system nodes, which may in turn degrade system performance.  This
          option is effective only for certain workload patterns, and could
          cause severe performance penalties in other situations.  It is
          recommended that this option be used only when indicated by SGI
          support.

          Currently this option prevents only the system buffer cache from
          being placed on the specified nodes.  Future IRIX releases may
          expand the scope of this protection to exclude other kernel memory
          allocations from the specified nodes.

          This option was introduced in IRIX 6.5.7.

     MEMORY_MANDATORY
          The kernel will limit all memory allocations to nodes that are
          contained in this cpuset.  If memory requests cannot be satisfied,
          the allocating process will sleep until memory is available.  The
          process will be killed if no more memory can be allocated.  See
          policies below.


     POLICY_PAGE
          Requires MEMORY_MANDATORY.  This is the default policy if no policy
          is specified.  This policy will cause the kernel to page user pages
          to the swap file (see swap(1M)) to free physical memory on the nodes
          contained in this cpuset.  If swap space is exhausted, the process
          will be killed.

     POLICY_KILL
          Requires MEMORY_MANDATORY.  The kernel will attempt to free as much
          space as possible from kernel heaps, but will not page user pages to
          the swap file.  If all physical memory on the nodes contained in
          this cpuset are exhausted, the process will be killed.

     POLICY_SHARE_WARN
          When creating a cpuset, if it is possible for the new cpuset to
          share memory on a node with another cpuset the new cpuset will be
          created but a warning message will be issued.  POLICY_SHARE_WARN and
          POLICY_SHARE_FAIL cannot be used together.

     POLICY_SHARE_FAIL
          When creating a cpuset, if it is possible for the new cpuset to
          share memory on a node with another cpuset the new cpuset will fail
          to be created and an error message will be issued. POLICY_SHARE_WARN
          and POLICY_SHARE_FAIL cannot be used together.

     CPU cpuid or cpuids
          Specifies a single CPU or a list of CPUs that will be part of the
          cpuset. The user can mix a single cpu line with a cpu list line.
          For example:


             CPU 2
             CPU 3-4,5,7,9-12


     MEM nodeid or nodeids
          Specifies a single node's memory or a list of nodes' memory that
          will be part of the cpuset.  The specification of nodes follows the
          same syntax as the CPU specification.

     NODE nodeid or nodeids
          Specifies a single node's CPUs and memory, or a list of nodes' CPUs
          and memory that will be part of the cpuset.  This directive is used
          to specify that all node resources (CPU and memory) are to be
          included in the cpuset.  The specification of nodes follows the same
          syntax as the CPU specification.

     MEMORY_SIZE_ADVISORY size
          Upon creation of a new cpuset, if the memory to be included is below
          the specified size, a warning message will be issued and the cpuset
          will continue to be created.  The value for size, is specified as an
          integer suffixed by a size factor: B indicates bytes, K indicates


          kilobytes, M indicates megabytes, G indicates gigabytes, and T to
          indicate terabytes.  MEMORY_SIZE_ADVISORY and MEMORY_SIZE_MANDATORY
          can be used together.


             MEMORY_SIZE_ADVISORY 130965K   # 130.964 MegaBytes
             MEMORY_SIZE_ADVISORY 8192M     # 8.192 GigaBytes
             MEMORY_SIZE_ADVISORY 4G        # 4 GigaBytes
             MEMORY_SIZE_ADVISORY 1T        # 1 TeraByte


     MEMORY_SIZE_MANDATORY size
          Upon creation of a new cpuset, if the memory to be included is below
          the specified size, an error message will be issued and the cpuset
          will fail to be created.  The value for size, is specified as an
          integer suffixed by a size factor: B indicates bytes, K indicates
          kilobytes, M indicates megabytes, G indicates gigabytes, and T to
          indicate terabytes.  MEMORY_SIZE_ADVISORY and MEMORY_SIZE_MANDATORY
          can be used together.  An example of the  syntax for specifying the
          size is seen in the example for MEMORY_SIZE_ADVISORY.

     CPU_COUNT_ADVISORY count
          Upon creation of a new cpuset, if the number of CPUs to be included
          is below the specified count, a warning message will be issued and
          the cpuset will continue to be created.  CPU_COUNT_ADVISORY and
          CPU_COUNT_MANDATORY can be used together.  An example follows:

             CPU_COUNT_ADVISORY 128  # If number CPUs < 128 warn

     CPU_COUNT_MANDATORY count
          Upon creation of a new cpuset, if the number of CPUs to be included
          is below the specified count, an error message will be issued and
          the cpuset will fail to be created.  CPU_COUNT_ADVISORY and
          CPU_COUNT_MANDATORY can be used together. An example follows:

             CPU_COUNT_MANDATORY 96  # If number CPUs < 96 fail

NOTES
     In a cluster environment, the cpuset configuration file should reside on
     the root filesystem. If the cpuset configuration file resides on a
     filesystem other than the root filesystem and  you attempt to unmount the
     filesystem, the vnode for the cpuset remains active and the unmount (see
     mount(1M) command fails.

     Make sure that your workload manager sets the configuration file to
     reside on the root filesystem.

SEE ALSO


     IRIX Admin: Resource Administration


                                                                        Page 5