ts_dptbl man page on SunOS

Man page or keyword search:  
man Server   20652 pages
apropos Keyword Search (all sections)
Output format
SunOS logo
[printable version]

ts_dptbl(4)			 File Formats			   ts_dptbl(4)

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 pol‐
       icy, used to schedule processes within that class. Associated with each
       scheduling class is a set of priority queues on which ready to run pro‐
       cesses are linked. These priority queues are mapped by the system  con‐
       figuration  into a set of global scheduling priorities which are avail‐
       able 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-depen‐
       dent  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).
       Processes in the	 inter-active  scheduling  class  are  also  scheduled
       according  to  the  parameters in the time-sharing dispatcher parameter
       table. (Time-sharing processes and inter-active	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	 (config_ts_dptbl[])  of  parameter  structures	 (struct  tsd‐
       pent_t),	 one  for  each	 of the n priority levels used by time-sharing
       processes and inter-active processes in user mode. The  structures  are
       accessed	 via  a pointer, (ts_dptbl), to the array. The properties of a
       given priority level i are specified by the ith parameter structure  in
       this array (ts_dptbl[ i] ).

       A parameter structure consists of the following members. These are also
       described in the /usr/include/sys/ts.h header.

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

			       In  the	high resolution clock mode (hires_tick
			       set to 1), the value of	hz  is	set  to	 1000.
			       Increase quantums to maintain the same absolute
			       time quantums.

       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 initial‐
			       ized to zero each time a time-sharing or inter-
			       active 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  a  dis‐
			       patcher	or sleep queue. If a process' ts_disp‐
			       wait value exceeds the ts_maxwait value for its
			       level, the process' 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. Since processes in the
       time-sharing and inter-active scheduling classes share  the  same  dis‐
       patch  parameter	 table	(ts_dptbl),  changes to this table will affect
       both scheduling classes. There are  two	methods	 available  for	 doing
       this:  reconfigure with a loadable module at boot-time or by using dis‐
       padmin(1M) at run-time.

   ts_dptbl Loadable Module
       The ts_dptbl can be reconfigured with a loadable module which  contains
       a  new  time sharing dispatch table. The module containing the dispatch
       table is separate from the TS loadable module which contains  the  rest
       of  the time-sharing and inter-active software. 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 and
       inter-active  classes.  The  relevant  procedure	 and  source  code  is
       described in the REPLACING THE TS_DPTBL LOADABLE MODULE section.

   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 or inter-active 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 # sym‐
       bol 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 exam‐
       ple, 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  resolu‐
       tion.

       The  remaining lines in the file are used to specify the parameter val‐
       ues for each of the time-sharing priority levels. The first line speci‐
       fies the parameters for time-sharing level 0, the second line specifies
       the parameters for time-sharing level 1, etc. There must be exactly one
       line for each configured time-sharing priority level.

EXAMPLES
       Example 1: A Sample From a Configuration File

       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 and interactive
       classes,	 and the mapping between these time-sharing priorities and the
       corresponding global scheduling priorities is determined by the config‐
       uration 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	 ordering;  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

       Example 2: Replacing The ts_dptbl Loadable Module

       In  order  to  change  the size of the time sharing dispatch table, the
       loadable module which contains the dispatch table information will have
       to be built. It is recommended that you save the existing module before
       using the following procedure.

       1.  Place the  dispatch	table  code  shown  below  in  a  file	called
	   ts_dptbl.c An example of this file follows.

       2.  Compile  the	 code  using the given compilation and link lines sup‐
	   plied.

	   cc -c -0 -D_KERNEL
	   ts_dptbl.c
	   ld -r -o TS_DPTBL ts_dptbl.o

       3.  Copy the current dispatch table in /kernel/sched to TS_DPTBL.bak.

       4.  Replace the current TS_DPTBL in /kernel/sched.

       5.  You will have to make changes in the /etc/system  file  to  reflect
	   the	changes	 to  the  sizes	 of the tables. See system(4). The two
	   variables affected are ts_maxupri and ts_maxkmdpri. The syntax  for
	   setting these is as follows:

	   set TS:ts_maxupri=(value for max time-sharing user priority)
	   set TS:ts_maxkmdpri=(number of kernel mode priorities - 1)

       6.  Reboot the system to use the new dispatch table.

       Great  care  should  be used in replacing the dispatch table using this
       method. If you do not get it right, panics may result, thus making  the
       system unusable.

       The  following is an example of a ts_dptbl.c file used for building the
       new ts_dptbl.

       /* BEGIN ts_dptbl.c */
       #include <sys/proc.h>
       #include <sys/priocntl.h>
       #include <sys/class.h>
       #include <sys/disp.h>
       #include <sys/ts.h>
       #include <sys/rtpriocntl.h>
       /*
	* This is the loadable module wrapper.
	*/
       #include <sys/modctl.h>
       extern struct mod_ops mod_miscops;
       /*
	* Module linkage information for the kernel.
	*/
       static struct modlmisc modlmisc = {
	    &mod_miscops, "Time sharing dispatch table"
       };
       static struct modlinkage modlinkage = {
	    MODREV_1, &modlmisc, 0
       };
       _init()
       {
	    return (mod_install(&modlinkage));
       }
       _info(modinfop)
	    struct modinfo *modinfop;
       {
	    return (mod_info(&modlinkage, modinfop));
       }
       /*
	* array of global priorities used by ts procs sleeping or
	* running in kernel mode after sleep. Must have at least
	* 40 values.
	*/
       pri_t config_ts_kmdpris[] = {
		60,61,62,63,64,65,66,67,68,69,
		70,71,72,73,74,75,76,77,78,79,
		80,81,82,83,84,85,86,87,88,89,
		90,91,92,93,94,95,96,97,98,99,
       };
       tsdpent_t config_ts_dptbl[] = {

       /*  glbpri  qntm	 tqexp	slprt  mxwt  lwt  */

	   0,	   100,	 0,	10,    5,    10,
	   1,	   100,	 0,	11,    5,    11,
	   2,	   100,	 1,	12,    5,    12,
	   3,	   100,	 1,	13,    5,    13,
	   4,	   100,	 2,	14,    5,    14
	   5,	   100,	 2,	15,    5,    15,
	   6,	   100,	 3,	16,    5,    16,
	   7,	   100,	 3,	17,    5,    17,
	   8,	   100,	 4,	18,    5,    18,
	   9,	   100,	 4,	19,    5,    19,
	   10,	   80,	 5,	20,    5,    20,
	   11,	   80,	 5,	21,    5,    21,
	   12,	   80,	 6,	22,    5,    22,
	   13,	   80,	 6,	23,    5,    23,
	   14,	   80,	 7,	24,    5,    24,
	   15,	   80,	 7,	25,    5,    25,
	   16,	   80,	 8,	26,    5,    26,
	   17,	   80,	 8,	27,    5,    27,
	   18,	   80,	 9,	28,    5,    28,
	   19,	   80,	 9,	29,    5,    29,
	   20,	   60,	 10,	30,    5,    30,
	   21,	   60,	 11,	31,    5,    31,
	   22,	   60,	 12,	32,    5,    33,
	   24,	   60,	 14,	34,    5,    34,
	   25,	   60,	 15,	35,    5,    35,
	   26,	   60,	 16,	36,    5,    36,
	   27,	   60,	 17,	37,    5,    37,
	   28,	   60,	 18,	38,    5,    38,
	   29,	   60,	 19,	39,    5,    39,
	   30,	   40,	 20,	40,    5,    40,
	   31,	   40,	 21,	41,    5,    41,
	   32,	   40,	 22,	42,    5,    42,
	   33,	   40,	 23,	43,    5,    43,
	   34,	   40,	 24,	44,    5,    44,
	   35,	   40,	 25,	45,    5,    45,
	   36,	   40,	 26,	46,    5,    46,
	   37,	   40,	 27,	47,    5,    47,
	   38,	   40,	 28,	48,    5,    48,
	   39,	   40,	 29,	49,    5,    49,
	   40,	   20,	 30,	50,    5,    50,
	   41,	   20,	 31,	50,    5,    50,
	   42,	   20,	 32,	51,    5,    51,
	   43,	   20,	 33,	51,    5,    51,
	   44,	   20,	 34,	52,    5,    52,
	   45,	   20,	 35,	52,    5,    52,
	   46,	   20,	 36,	53,    5,    53,
	   47,	   20	 37,	53,    5,    53,
	   48,	   20,	 38,	54,    5,    54,
	   49,	   20,	 39,	54,    5,    54,
	   50,	   10,	 40,	55,    5,    55,
	   51,	   10,	 41,	55,    5,    55,
	   52,	   10,	 42,	56,    5,    56,
	   53,	   10,	 43,	56,    5,    56,
	   54,	   10,	 44,	57,    5,    57,
	   55,	   10,	 45,	57,    5,    57,
	   56,	   10,	 46,	58,    5,    58,
	   57,	   10,	 47,	58,    5,    58,
	   58,	   10,	 48,	59,    5,    59,
	   59,	   10,	 49,	59,    5,    59,

       };

       short config_ts_maxumdpri = sizeof (config_ts_dptbl)/16 - 1;
       /*
	* Return the address of config_ts_dptbl
	*/
       tsdpent_t *
       ts_getdptbl()
       {
	     return (config_ts_dptbl);
       }

       /*
	* Return the address of config_ts_kmdpris
	*/
	int *
	ts_getkmdpris()
       {
	     return (config_ts_kmdpris);
       }

       /*
	* Return the address of ts_maxumdpri
	*/
       short
       ts_getmaxumdpri()
       {
	      return (config_ts_maxumdpri);
       }

       /* END ts_dptbl.c */

SEE ALSO
       priocntl(1), dispadmin(1M), priocntl(2), system(4)

       System Administration Guide: Basic Administration

       Programming Interfaces 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 configura‐
       tions  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_DPTBL	 loadable  module.  Specifying	an inconsistent or nonsensical
       ts_dptbl configuration through the TS_DPTBL loadable module could cause
       serious performance problems and/or cause the system to panic.

SunOS 5.10			  15 Oct 2002			   ts_dptbl(4)
[top]

List of man pages available for SunOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net