cpusetSetFlags(3x)                                          cpusetSetFlags(3x)


NAME
     cpusetSetFlags - Set the mask of flags for a cpuset

SYNOPSIS
     #include <cpuset.h>

     int cpusetSetFlags(cpuset_QueueDef_t *qdef, int flags);

DESCRIPTION
     The cpusetSetFlags function is used to set the mask of attribute flags to
     be used when creating a cpuset.  The argument qdef is a pointer to a
     structure allocated by a call to cpusetAllocQueueDef(3x), and the mask of
     attribute flags will be set in this structure.

     The referenced qdef structure will later be used as an argument to the
     function cpusetCreate(3x) when creating the cpuset.

     The flags member is used to specify various control options for the
     cpuset queue.  It is formed by OR-ing together zero or more of the
     following values:

     CPUSET_CPU_EXCLUSIVE
            Defines a cpuset to be restricted.  Only threads attached to the
            cpuset queue (descendents of an attached thread inherit the
            attachement) may execute on the CPUs contained in the cpuset.

     CPUSET_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 to be included in the cpuset must be specified
            using the MEM or NODE directives.

     CPUSET_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.

     CPUSET_MEMORY_EXCLUSIVE
            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.  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.


     CPUSET_MEMORY_KERNEL_AVOID
            The kernel should 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. (This avoidance
            currently extends only to keeping buffer cache away from the
            protected nodes.)

     CPUSET_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.

     CPUSET_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.

     CPUSET_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.

     CPUSET_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.

     CPUSET_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.

     The return value of the function indicates if the function was
     successfully executed.

EXAMPLES
     This example sets the flags for a new cpuset queue definition

               cpuset_QueueDef_t *qdef;

               qdef = cpusetAllocQueueDef(numcpus);
               /* Set the mask of flags */
               if (!cpusetSetFlags(qdef,
                            CPU_EXCLUSIVE|EXPLICIT


                            |MEMORY_MANDATORY)) ) {
                   perror("cpusetSetFlags");
                   exit(1);
               }
               .......
               cpusetCreate("set1", qdef);


NOTES
     cpusetSetFlags is found in the library "libcpuset.so", and will be loaded
     if the option -lcpuset is used with cc(1) or ld(1).

SEE ALSO
     cpuset(1), cpusetAllocQueueDef(3x), cpusetCreate(3x), cpusetSetFlags(3x),
     cpuset(5).

DIAGNOSTICS
     If successful, cpusetSetFlags returns 1.  If cpusetSetFlags fails, it
     returns 0 and errno is set to indicate the error.


                                                                        Page 3