From: leichter@lrw.com (Jerry Leichter)
Newsgroups: comp.os.vms
Subject: RE: Resource Quotas
Date: 4 Sep 92 11:12:28 GMT
Distribution: world
Organization: The Internet


	I have been looking at the resource quotas in Authorize and trying to
	understand exactly the diffrence between POOLED, SYSTEM-WIDE,
	DEDUCTABLE AND NON-DEDUCTABLE resource process limits.  Can anyone
	give discribe exactly what these mean and how they relate to the total
	system resources. By the way (I have looked at "GUIDE TO SETTING UP A
	VMS SYSTEM" and still have questions about what the manual is trying
	to say.

The difference between pooled, deductible, and non-deductible quotas are only
visible when there are multiple processes in a job tree.

Processes in VMS are organized in groups called jobs.  At the top of a job is
a detached process, which has no parent; below it are any number of subpro-
cesses.

A pooled quota is charged to the job tree as a whole:  There is one counter of
how much of the controlled resource is in use, and every process in the tree
adds and subtracts its usage from that counter.  The quota limits how large
the counter can get.  An example of a pooled quota is FILLM, which controls
channel (open file) slots.  If FILLM is 100, then all the processes in a job
tree can have at most a total of 100 files open at any one time.  A pooled
quota effectively flows back and forth among the processes in the job tree on
an as-needed basis.

A deductible quota is split between a parent process and a subprocess at the
time the subprocess is created.  During the life of the subprocess, it
retains ownership of that piece of quota (though it may, in turn, split it
with its own subprocesses).  The subprocess can't take more of the parent's
quota, nor can the parent take back the deductible quota it has granted its
subprocess.  When the subprocess terminates, any remaining deductible quota
units are returned to the parent.   There is only one deductible quota:  The
CPU time limit.

A non-deductible quota is "the remaining case".  This a terrible name; it
should really be called something like an "independent quota".  Each process
in the job tree has an independent counter of how much of a resource control-
led by such a quota it is using, and each counter independently is limited
by the quota.  When a subprocess is created, the parent process specifies
how much of each non-deductible quota it should have.  This quota is not taken
away from the parent, but it is limited to at most the parent's own value of
that quota.  An example of a non-deductible quota id BIOLM, the number of
buffered I/O operations a process may have pending at once.  If BIOLM is 10,
then each process in the job tree may have 10 buffered I/O operations pending
at any time, independent of what the other processes in the job tree are
doing.  (Actually, like several other non-deductible quotas, the real effect
of BIOLM is also limited by a pooled quota:  A buffered I/O request requires
allocation of system buffer space to the process, and that allocation is
limited by BYTLM, which is pooled.)

There are no system-wide quotas as such.  There are, however, system paramet-
ers that influence the quota values that $CREPRC, which creates all processes
in a VMS system, will assign.  For quota q, parameter PQL_Mq establishes a
minimum value for q; if $CREPRC is asked to create a process with a smaller
value for q, it will ignore the request and assign PQL_Mq units instead.
$CREPRC allows the parent process to leave any (or all) of the quota values
unspecified.  If q is left unspecified, the value $CREPRC uses is PQL_Dq.
(The check against the minimum value, PQL_Mq, is done AFTER assignment of
defaults, so if PQL_Dq < PQL_Mq, $CREPRC will end up using the Minimum in
place of the Default.)
							-- Jerry

Newsgroups: comp.os.vms