[fa.info-vax] Paging and VT's

info-vax@ucbvax.ARPA (03/06/85)

From: *Hobbit* <AWalker@RUTGERS.ARPA>

I just brought up and tuned a 785 with 12Mb of memory.  I claim that if
I tweak it correctly, I should be able to do things and not have it 
page at all, if I'm the only person logged in [which has so far been
the case].  No funny servers are running; just OPCOM and ERRFMT and me.
Yet I rack up page faults at a respectable rate.  My process working set
is plenty big enough to do what I've been doing.  I would think that my
process, the few others laying around, and the system image should 
easily all fit into 12 meg.

Am I right in assuming that there is a way to completely eliminate paging,
given ideal conditions [like lots of physical memory]?  If so, what are some
example things I can do in SYSGEN to make it happen?

Aside:  If you have just disconnected from a virtual terminal, and you
had set your UIC to something different for that process, you must set your
UIC to that other one when you log in again before you can connect to the VT.
It doesn't matter how many *privs* you have turned on, your UIC must match.
Just something I found out while wondering where this random ss$_nopriv 
came from...

_H*
-------

rcb@rti-sel.UUCP (Random) (03/06/85)

Try the following to decrease your paging while the program is running.

	Increase wsquota and wsextent and wsdefault to high numbers.
	Increase the maximum ws parameter in sysgen (I don't know the name)
	Modify the program to lock itself into memory.
	Increase the size of the free list and modified list so that
		some of those page faults are not real faults.
	Increase the initial size of your stack if your program
		uses a lot of stack.

However, You can't get rid of all page faults. When a program is run,
it is not loaded into memory. It simply has the page table set up
as showing all the pages as being paged out. The pager then loads
the program as it is needed.

To see how much is real paging, try mon page. If not read or write page
values appear, all of your paging is fake.

					Random
					Research Triangle Institute
					...!mcnc!rti-sel!rcb

info-vax@ucbvax.ARPA (03/06/85)

From: LEICHTER <Leichter@YALE.ARPA>

    I just brought up and tuned a 785 with 12Mb of memory.  I claim that if
    I tweak it correctly, I should be able to do things and not have it 
    page at all, if I'm the only person logged in [which has so far been
    the case].  No funny servers are running; just OPCOM and ERRFMT and me.
    Yet I rack up page faults at a respectable rate....

There is no way to eliminate paging completely.  An image is demand-paged into
memory as you use it; no amount of available memory can avoid this, since the
data has to get into memory at least once.  BUT, the system will still try to
trim your working set if you don't incur any page faults!

Details:

During the run of a single image, once the whole thing is in memory, you can
avoid any further paging by having a large enough working set.  Maximum WS
size is determined by two parameters, the WS quota and WS extent.  The quota
is the maximum number of pages an image can request explicitly.  The extent is
the maximum number of pages the system will grant an image implicitly if it
has a lot of faults and there is a bunch of free memory available.  Both of
these parameters can be changed for a process with the DCL SET WORKING_SET
command.  In addition, the UAF entry for an account sets absolute maximum
values for these parameters.  Finally, the SYSGEN parameter WSMAX sets an
absolute, system-wide limit to the size of any process working set.

BUT, VMS also has a facility for automatic WS size adjustment.  Two
parameters, PFRATL and PFRATH, define a range within which VMS will try to
keep a process's page fault rate.  If a process's page fault rate is less than
PFRATL, VMS will attempt to take away WSDEC pages.  Similarly, it it's above
PFRATH, VMS will try to give it WSINC more pages.  These four parameters are
settable using SYSGEN.  They are all dynamic parameters, by the way, so you
can do experiments on the fly.

If WSINC is 0, automatic working set adjustment is disabled system-wide.  A
process can disable automatic working set adjustment for itself as well; the
DCL SET WORKING_SET command's /[NO]ADJUST qualifier controls this.

Processes can also control the pager in other ways.  For example, pages can be
locked in the working set ($LKWSET), and the entire process can be locked in
the balance set ($SETSWM); or pages can be locked into memory ($LCKPAG).

Finally, it's also important to note that there are "soft" and "hard" page
faults in VMS.  A soft page fault is one that can be satisfied from a page
that is already in memory, perhaps waiting in some queue or look-aside list.
(For example, the Modified Page List.)  It involves no disk I/O.  (A "hard"
page fault is a fault that really goes to the disk.)

What I would guess that you are seeing is:

	- Automatic working set adjustment enabled, so VMS keeps trimming
		your working set down to maintain a "reasonable" number of
		faults;

	- Since there is plenty of free memory around, just about all your
		page faults are "soft".

Try doing a simple SET WORK/NOADJUST; it will probably do the trick.  If you
really want to, there are, as you can see, tons of parameters to hack with
beyond that.  Be warned, however:  It's much, much easier to screw up a VMS
system by trying to "fine-tune" it than it is to actually improve its
performance!  See the V4 "Guide to VAX/VMS Performance Management" for more
details.  A brief summary of this book is:  First, leave things alone.
Second, get more memory.  Third, get more of something else (like a bigger
CPU.)  Finally, if all else fails, tweak just a bit.  (There are obviously
exceptions to this, but they are fairly rare cases of specialized loads.)

							-- Jerry

PS:  The system itself can page, too.  In fact, the recommended settings for
the relevent parameters - like SYSMWCNT, the quota for the system WS - cause a
low but non-zero rate of system page faults.  Paging is not an absolute evil -
it's a matter of balancing various demands for a given resource (main memory).
							-- J
-------

info-vax@ucbvax.ARPA (03/06/85)

From: Mark Johnson <MHJohnson@HI-MULTICS.ARPA>

Two things to look at...

  1)  I you are running your own applications (anything YOU link) then
look at the VMS Linker and the options files.  The CLUSTER line can be
used to change the page-fault-cluster for a section of memory.  If you
set it big enough, one page fault per cluster ought to bring the whole
cluster into memory.  This is in both the V3 (p 3-6) and V4 (p LINK-20)
linker documentation.

  2)  The SYSGEN parameter PFCDEFAULT could also be cranked up to make
the changes system wide.

Lets look at what would happen if you do this.  Each page fault would
bring in a large number of pages into memory.  This increases overall
access to the disk & chews up more memory.  If you run programs
infrequently and have lots of memory to spare, this should be ok.
Response time after the initial load should stay good and if the WS
parameters are set right the CPU overhead should be near NIL.

If you access a lot of programs & are running short of memory, this sort
of change would clobber the system since the I/O to the disk would go
through the roof.  I think the VMS developers assume the VAXen are
normally quite loaded so they skew the numbers away from optimal
performance on lightly loaded systems and give you the tools to put the
parameters where you need them.

I can also forsee some tradeoff's depending on what kind of disks you
use.  The MASSBUS RP07's & other MBA disks are better for fewer large
size transfers than RA81's.  Where the RA disks come out on top is lots
of smaller transfers from many jobs (so seek ordering comes into play).
Its a little late to change your disk drives now, but it is something to
consider for later improvements.

I would also check other parameters that affect your working set.  In
particular, the SYSGEN parameters WSMAX, SYSMWCNT, WSINC, WSDEC, PFRATL,
PFRATH, AWSMIN, AWSTIME, GROWLIM, and BORROWLIM make affects on the
whole system.  For individual jobs, look at the authorization file for
WSDEFAULT, WSEXTENT, and WSQUOTA.  Read the documentation carefully and
check the job with SHOW SYSTEM or something else to check your job has
all the memory you think its getting.

  --Mark <MHJohnson @ HI-MULTICS.ARPA>

info-vax@ucbvax.ARPA (03/06/85)

From: awalker.rx@XEROX.ARPA

hi send me a copy of your status for sysgen
and i will compare it against our system..and yes you cannot get rid of paging
alan

info-vax@ucbvax.ARPA (03/08/85)

From: ihnp4!stolaf!lacroix@BERKELEY (LaCroix, Les)

The VMS image activator merely maps memory tables and image files, and
then lets the paging facility decide what pages from disk are to be brought
in.  That may be what some of your paging is all about, and I don't think
there's anything you can do about that.

Les LaCroix (...{ihnp4,decvax}!stolaf!lacroix)

info-vax@ucbvax.ARPA (03/16/85)

From: ulysses!clyde!watmath!utcsri!orton@BERKELEY (Ed Orton)



Have you increased WSMAX in sysgen to accomodate the larger working set size?
The maximum size of a working set is the maximum allowed for your process OR
WSMAX, whichever is LESS. You are still going to have page faults on starting
up your process if WSDEFAULT for your process is too small.