Amiga Unix — 68040 · 68060

Manual pages › File formats and configuration files (4)

ts_dptbl(4)

time-sharing dispatcher parameter table

From the original Amiga UNIX 2.1 manual. Some things it mentions may not be in this release.

NAME

ts_dptbl - time-sharing dispatcher parameter table

DESCRIPTION

The process scheduler (or dispatcher) is the portion of the kernel that controls allocation of the CPU to processes. The scheduler supports the notion of scheduling classes where each class defines a scheduling policy, used to schedule processes within that class. Associated with each scheduling class is a set of priority queues on which ready to run processes are linked. These priority queues are mapped by the system configuration into a set of global scheduling priorities which are available to processes within the class. (The dispatcher always selects for execution the process with the highest global scheduling priority in the system.) The priority queues associated with a given class are viewed by that class as a contiguous set of priority levels numbered from 0 (lowest priority) to n (highest priority-a configuration-dependent value). The set of global scheduling priorities that the queues for a given class are mapped into might not start at zero and might not be contiguous (depending on the configuration). Processes in the time-sharing class which are running in user mode (or in kernel mode before going to sleep) are scheduled according to the parameters in a time-sharing dispatcher parameter table (ts_dptbl). (Time-sharing processes running in kernel mode after sleeping are run within a special range of priorities reserved for such processes and are not affected by the parameters in the ts_dptbl until they return to user mode.) The ts_dptbl consists of an array of parameter structures (struct ts_dpent), one for each of the n priority levels used by time-sharing processes in user mode. The properties of a given priority level i are specified by the ith parameter structure in this array (ts_dptbli). A parameter structure consists of the following members. These are also described in the /usr/include/sys/ts.h header file.

ts_globpri

The global scheduling priority associated with this priority level. The mapping between time-sharing priority levels and global scheduling priorities is determined at boot time by the system configuration. ts_globpri is the only member of the ts_dptbl which cannot be changed with dispadmin(1M).

ts_quantum

The length of the time quantum allocated to processes at this level in ticks (HZ).

ts_tqexp

Priority level of the new queue on which to place a process running at the current level if it exceeds its time quantum. Normally this field links to a lower priority time-sharing level that has a larger quantum.

ts_slpret

Priority level of the new queue on which to place a process, that was previously in user mode at this level, when it returns to user mode after sleeping. Normally this field links to a higher priority level that has a smaller quantum.

ts_maxwait

A per process counter, ts_dispwait is initialized to zero each time a time-sharing process is placed back on the dispatcher queue after its time quantum has expired or when it is awakened (ts_dispwait is not reset to zero when a process is preempted by a higher priority process). This counter is incremented once per second for each process on the dispatcher queue. If a process's ts_dispwait value exceeds the ts_maxwait value for its level, the process's priority is changed to that indicated by ts_lwait. The purpose of this field is to prevent starvation.

ts_lwait

Move a process to this new priority level if ts_dispwait is greater than ts_maxwait.

An administrator can affect the behavior of the time-sharing portion of the scheduler by reconfiguring the ts_dptbl. There are two methods available for doing this.

MASTER FILE

The ts_dptbl can be reconfigured at boot time by specifying the desired values in the ts master file and reconfiguring the system using the auto-configuration boot procedure; see mkboot(1M) and master(4). This is the only method that can be used to change the number of time-sharing priority levels or the set of global scheduling priorities used by the time-sharing class.

DISPADMIN CONFIGURATION FILE

With the exception of ts_globpri all of the members  of  the
ts_dptbl  can  be  examined and modified on a running system
using the dispadmin(1M) command.  Invoking dispadmin for the
time-sharing  class allows the administrator to retrieve the
current ts_dptbl configuration  from  the  kernel's  in-core
table,  or  overwrite  the  in-core table with values from a
configuration file.  The configuration file used  for  input
to  dispadmin  must conform to the specific format described
below.  Blank lines are ignored and any part of  a  line  to
the  right of a # symbol is treated as a comment.  The first
non-blank, non-comment line must indicate the resolution  to
be used for interpreting the ts_quantum time quantum values.
The resolution is specified as
     RES=res
where res is a positive integer between 1 and  1,000,000,000
inclusive  and  the resolution used is the reciprocal of res
in seconds  (for  example,  RES=1000  specifies  millisecond
resolution).  Although very fine (nanosecond) resolution may
be specified, the time quantum lengths are rounded up to the
next  integral  multiple  of  the system clock's resolution.
For example, the finest resolution  currently  available  on
the 3B2 is 10 milliseconds (1 ``tick'').  If res were 1000 a
time quantum value of 34 would specify a quantum of 34  mil-
liseconds,  which  would  be  rounded up to 4 ticks (40 mil-
liseconds) on the 3B2.  The remaining lines in the file  are
used  to  specify the parameter values for each of the time-
sharing priority  levels.   The  first  line  specifies  the
parameters  for time-sharing level 0, the second line speci-
fies the parameters for time-sharing level  1,  etc.   There
must  be  exactly  one line for each configured time-sharing
priority level.

EXAMPLE

The following excerpt from a  dispadmin  configuration  file
illustrates  the format.  Note that for each line specifying
a set of  parameters  there  is  a  comment  indicating  the
corresponding  priority level.  These level numbers indicate
priority within the  time-sharing  class,  and  the  mapping
between  these time-sharing priorities and the corresponding
global scheduling priorities is determined by the configura-
tion specified in the ts master file.  The level numbers are
strictly for the convenience of  the  administrator  reading
the  file  and,  as  with  any  comment, they are ignored by
dispadmin.  dispadmin assumes that the lines in the file are
ordered by consecutive, increasing priority level (from 0 to
the maximum configured time-sharing  priority).   The  level
numbers in the comments should normally agree with this ord-
ering; if for some reason they don't, however, dispadmin  is
unaffected.
# Time-Sharing Dispatcher Configuration File
RES=1000

# ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait  PRIORITY LEVEL
      500        0       10          5        10         #  0
      500        0       11          5        11         #  1
      500        1       12          5        12         #  2
      500        1       13          5        13         #  3
      500        2       14          5        14         #  4
      500        2       15          5        15         #  5
      450        3       16          5        16         #  6
      450        3       17          5        17         #  7

       .         .        .          .         .         .  .
       .         .        .          .         .         .  .
       .         .        .          .         .         .  .
       50       48       59          5        59         #  58
       50       49       59          5        59         #  59

FILES

/usr/include/sys/ts.h

SEE ALSO

dispadmin(1M),    priocntl(1),    priocntl(2),    master(4),
mkboot(1M)    ``Scheduler''    chapter    in    the   System
Administrator's Guide

NOTES

dispadmin does some limited sanity checking on the values supplied in the configuration file. The sanity checking is intended to ensure that the new ts_dptbl values do not cause the system to panic. The sanity checking does not attempt to analyze the effect that the new values will have on the performance of the system. Unusual ts_dptbl configurations may have a dramatic negative impact on the performance of the system. No sanity checking is done on the ts_dptbl values specified in the ts master file. Specifying an inconsistent or nonsensical ts_dptbl configuration through the ts master file could cause serious performance problems and/or cause the system to panic.