sysmp(2) sysmp(2)
sysmp - multiprocessing control
#include <sys/types.h>
#include <sys/sysmp.h>
#include <sys/sysinfo.h> /* for SAGET and MINFO structures */
int sysmp (int cmd, ...);
ptrdiff_t sysmp (int cmd, ...);"
sysmp provides control/information for miscellaneous system services.
This system call is usually used by system programs and is not intended
for general use. The arguments arg1, arg2, arg3, arg4 are provided for
command-dependent use.
As specified by cmd, the following commands are available:
MP_CLEARCFSSTAT [Toc] [Back]
MP_CLEARNFSSTAT
MP_NUMA_GETCPUNODEMAP
MP_NUMA_GETDISTMATRIX
These are all interfaces that are used to implement
various system library functions. They are all subject to
change and should not be called directly by applications.
MP_PGSIZE The page size of the system is returned (see
getpagesize(2)).
MP_SCHED Interface for the schedctl(2) system call.
MP_NPROCS Returns the number of processors physically configured.
MP_NAPROCS Returns the number of processors that are available to
schedule unrestricted processes.
MP_STAT The processor ids and status flag bits of the physically
configured processors are copied into an array of pda_stat
structures to which arg1 points. The array must be large
enough to hold as many pda_stat structures as the number
of processors returned by the MP_NPROCS sysmp command.
The pda_stat structure and the various status bits are
defined in <sys/pda.h>.
MP_EMPOWER The processor number given by arg1, interpreted as an
'int', is empowered to run any unrestricted processes.
This is the default for all processors. This command
requires superuser authority.
MP_RESTRICT The processor number given by arg1, interpreted as an
'int', is restricted from running any processes except
those assigned to it by a MP_MUSTRUN or MP_MUSTRUN_PID
Page 1
sysmp(2) sysmp(2)
command, a runon(1) command or because of hardware
necessity. Note that processor 0 cannot be restricted.
This command requires superuser authority. On Challenge
Series machines, all timers belonging to the processor are
moved to the processor that owns the clock as reported by
MP_CLOCK.
MP_ISOLATE The processor number given by arg1, interpreted as an
'int', is isolated from running any processes except those
assigned to it by a MP_MUSTRUN command, a runon(1) command
or because of hardware necessity. Instruction cache and
Translation Lookaside Buffer synchronization across
processors in the system is minimized or delayed on an
isolated processor until system services are requested.
Note that processor 0 cannot be isolated. This command
requires superuser authority. On Challenge Series
machines, all timers belonging to the processor are moved
to the processor that owns the clock as reported by
MP_CLOCK.
MP_UNISOLATE The processor number given by arg1, interpreted as an
'int', is unisolated and empowered to run any unrestricted
processes. This is the default system configuration for
all processors. This command requires superuser
authority.
MP_PREEMPTIVE The processor number given by arg1, interpreted as an
'int', has its clock scheduler enabled. This is the
default for all processors. This command requires
superuser authority.
MP_NONPREEMPTIVE [Toc] [Back]
The processor number given by arg1, interpreted as an
'int', has its clock scheduler disabled. Normal process
time slicing is no longer enforced on that processor. As
a result of turning off the clock interrupt, the interrupt
latency on this processor will be lower. This command
requires superuser authority and is allowed only on an
isolated processor. This command is not allowed on the
clock processor (see MP_CLOCK).
MP_CLOCK The processor number given by arg1, interpreted as an
'int', is given charge of the operating system software
clock (see timers(5)). This command requires superuser
authority.
MP_FASTCLOCK The processor number given by arg1, interpreted as an
'int', is given charge of the operating system software
fast clock (see timers(5)). This command requires
superuser authority.
Page 2
sysmp(2) sysmp(2)
MP_MISER_GETREQUEST [Toc] [Back]
MP_MISER_SENDREQUEST
MP_MISER_RESPOND
MP_MISER_GETRESOURCE
MP_MISER_SETRESOURCE
MP_MISER_CHECKACCESS
These are all interfaces that are used to implement
various miser(1) functions. These are all subject to
change and should not be called directly by applications.
MP_MUSTRUN Assigns the calling process to run only on the processor
number by arg1, interpreted as an 'int', except as
required for communications with hardware devices. A
process that has allocated a CC sync register (see
ccsync(7m)) is restricted to running on a particular cpu.
Attempts to reassign such a process to another cpu will
fail until the CC sync register has been relinquished.
After a sucessful assignment to a cpu, any subsequent fork
or sproc call that creates a new process is also assigned
to the same cpu as the parent (see fork(2) and sproc(2)).
This command should not be used within a pthreaded
application (see pthread_setrunon_np(3P)).
MP_MUSTRUN_PID Assigns the process specified by arg2 to run only on the
processor number specified by arg1, both interpreted as
'int', except as required for communications with hardware
devices. A process that has allocated a CC sync register
(see ccsync(7m)) is restricted to running on a particular
cpu. Attempts to reassign such a process to another cpu
will fail until the CC sync register has been
relinquished. After a sucessful assignment to a cpu, any
subsequent fork or sproc call performed by the specified
process that creates a new process is also assigned to the
same cpu as the parent (see fork(2) and sproc(2)). This
command will give unpredictable results if the specified
process is a pthreaded process.
MP_GETMUSTRUN Returns the processor the current process has been set to
run on using the MP_MUSTRUN command. If the current
process has not been assigned to a specific processor, -1
is returned and errno is set to EINVAL. This command
should not be used within a pthreaded application (see
pthread_setrunon_np(3P)).
MP_GETMUSTRUN_PID [Toc] [Back]
Returns the processor that the process specified by arg1
has been set to run on using the MP_MUSTRUN or
MP_MUSTRUN_PID command. If the process has not been
assigned to a specific processor, -1 is returned and errno
is set to EINVAL. This command will give unpredictable
results if the specified process is a pthreaded process.
Page 3
sysmp(2) sysmp(2)
MP_RUNANYWHERE Frees the calling process to run on whatever processor the
system deems suitable.
MP_RUNANYWHERE_PID [Toc] [Back]
Frees the process specified by arg1 to run on whatever
processor the system deems suitable.
MP_KERNADDR Returns the address of various kernel data structures.
The structure returned is selected by arg1. The list of
available structures is detailed in <sys/sysmp.h>. This
option is used by many system programs to avoid having to
look in /unix for the location of the data structures.
MP_SASZ Returns the size of various system accounting structures.
As above, the structure returned is governed by arg1.
MP_SAGET1 Returns the contents of various system accounting
structures. The information is only for the processor
specified by arg4. As above, the structure returned is
governed by arg1. arg2 points to a buffer in the address
space of the calling process and arg3 specifies the
maximum number of bytes to transfer.
MP_SAGET Returns the contents of various system accounting
structures. The information is summed across all
processors before it is returned. As above, the structure
returned is governed by arg1. arg2 points to a buffer in
the address space of the calling process and arg3
specifies the maximum number of bytes to transfer.
Possible errors from sysmp are:
[EPERM] The effective user ID is not superuser. Many of the commands
require superuser privilege.
[EPERM] The user ID of the sending process is not superuser, and its
real or effective user ID does not match the real, saved, or
effective user ID of the receiving process.
[ESRCH] No process corresponding to that specified by a
MP_MUSTRUN_PID, MP_GETMUSTRUN_PID, or MP_RUNANYWHERE_PID
could be found.
[EINVAL] The processor named by a MP_EMPOWER, MP_RESTRICT, MP_CLOCK or
MP_SAGET1 command does not exist.
[EINVAL] The cmd argument is invalid.
[EINVAL] The arg1 argument to a MP_KERNADDR command is invalid.
Page 4
sysmp(2) sysmp(2)
[EINVAL] An attempt was made via MP_MUSTRUN or MP_MUSTRUN_PID to move
a process owning a CC sync register from the cpu controlling
the CC sync register.
[EINVAL] The target of the MP_GETMUSTRUN command has not been set to
run on a specific processor.
[EINVAL] The target process of the MP_MUSTRUN_PID command is a
pthreaded process.
[EBUSY] An attempt was made to restrict the only unrestricted
processor or to restrict the master processor.
[EFAULT] An invalid buffer address has been supplied by the calling
process.
mpadmin(1), runon(1), getpagesize(2), schedctl(2),
pthread_setrunon_np(3P), timers(5)
Upon successful completion, the cmd dependent data is returned.
Otherwise, a value of -1 is returned and errno is set to indicate the
error.
PPPPaaaaggggeeee 5555 [ Back ]
|