4.2 does not properly size the virtual memory paging point

Keith Muller muller at sdcc3.UUCP
Sun Dec 30 09:43:30 AEST 1984


Index:	sys/sys/vm_sched.c sys/vax/vmparam.h 4.2BSD

Description:
	At boot time 4.2 will size the paging point and swapping point
	according to the amount of free main memory is available. The
	algorithim used for sizing lotsfree (the paging point) does not
	have an upper bound, but always sets the paging point to be 1/4
	of free memory. This can be quite a large value for machines with
	with greater than around 3 megabytes of main memory (with memory
	prices getting lower, machines with more than 4 megs are quite common).
	This is a real performance problem in these large memory machines
	as they will begin paging when the machine is not even close to
	running out of memory. This premature paging begins to use up
	cpu cycles causing the machines throughput to rapidly decline (and
	also tends to offset any gains obtained by increasing the amount
	of main memory a machine might have).

	The swapping point maximium (desfree) is set a bit too large.

Repeat-By:
	Load up your machine with a lot of memory intensive programs and watch
	the virtual memory system with a vmstat 3. The sr (scan rate) should
	always be as small as possible to maximize throughput (scanning costs
	cpu cycles).  The fr value (free memory) indicates the size of free
	memory in the system. On large memory machines the sr can be quite
	high (100 or more) with 1 megabyte (or more) of main memory free.
Fix:
	The fix has two parts:
	1) adding a new #define to vax/vmparam.h for the maximium limit on
	   lotsfree and changing the swapping point.
	2) changing the code in sys/vm_sched.c that sizes lotsfree.

	The diffs are below:

RCS file: RCS/vmparam.h,v
retrieving revision 1.1
diff -c -r1.1 vmparam.h
*** /tmp/,RCSt1029938	Sat Dec 29 15:16:36 1984
--- vmparam.h	Sat Dec 29 14:31:03 1984
***************
*** 97,105
  
  /*
   * Paging thresholds (see vm_sched.c).
!  * Strategy of 4/22/81:
!  *	lotsfree is 1/4 of memory free.
!  *	desfree is 200k bytes, but at most 1/8 of memory
   *	minfree is 64k bytes, but at most 1/2 of desfree
   */
  #define	LOTSFREEFRACT	4

--- 97,105 -----
  
  /*
   * Paging thresholds (see vm_sched.c).
!  * Strategy of 9/28/84:
!  *	lotsfree is 512k bytes, but at most 1/4 of memory
!  *	desfree is 128k bytes, but at most 1/8 of memory
   *	minfree is 64k bytes, but at most 1/2 of desfree
   */
  #define	LOTSFREE	(512 * 1024)
***************
*** 102,107
   *	desfree is 200k bytes, but at most 1/8 of memory
   *	minfree is 64k bytes, but at most 1/2 of desfree
   */
  #define	LOTSFREEFRACT	4
  #define	DESFREE		(200 * 1024)
  #define	DESFREEFRACT	8

--- 102,108 -----
   *	desfree is 128k bytes, but at most 1/8 of memory
   *	minfree is 64k bytes, but at most 1/2 of desfree
   */
+ #define	LOTSFREE	(512 * 1024)
  #define	LOTSFREEFRACT	4
  #define	DESFREE		(128 * 1024)
  #define	DESFREEFRACT	8
***************
*** 103,109
   *	minfree is 64k bytes, but at most 1/2 of desfree
   */
  #define	LOTSFREEFRACT	4
! #define	DESFREE		(200 * 1024)
  #define	DESFREEFRACT	8
  #define	MINFREE		(64 * 1024)
  #define	MINFREEFRACT	2

--- 104,110 -----
   */
  #define	LOTSFREE	(512 * 1024)
  #define	LOTSFREEFRACT	4
! #define	DESFREE		(128 * 1024)
  #define	DESFREEFRACT	8
  #define	MINFREE		(64 * 1024)
  #define	MINFREEFRACT	2

--------------------------------------------------------------------
RCS file: RCS/vm_sched.c,v
retrieving revision 1.1
diff -c -r1.1 vm_sched.c
*** /tmp/,RCSt1029948	Sat Dec 29 15:17:11 1984
--- vm_sched.c	Sat Dec 29 14:44:32 1984
***************
*** 55,61
  	 *			tolerable.
  	 */
  	if (lotsfree == 0)
! 		lotsfree = LOOPPAGES / LOTSFREEFRACT;
  	if (desfree == 0) {
  		desfree = DESFREE / NBPG;
  		if (desfree > LOOPPAGES / DESFREEFRACT)

--- 55,63 -----
  	 *			tolerable.
  	 */
  	if (lotsfree == 0)
! 		lotsfree = LOTSFREE / NBPG;
! 		if (lotsfree > LOOPPAGES / LOTSFREEFRACT)
! 			lotsfree = LOOPPAGES / LOTSFREEFRACT;
  	if (desfree == 0) {
  		desfree = DESFREE / NBPG;
  		if (desfree > LOOPPAGES / DESFREEFRACT)

---------------------------------------------------------------------

	Keith Muller
	University of California, San Diego
	Academic Computer Center
	ucbvax!sdcsvax!muller
	muller at nprdc



More information about the Comp.unix.wizards mailing list