kernel - Change the vfs.vm_cycle_point default from 23 to 40
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 23 Mar 2010 05:44:33 +0000 (22:44 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 23 Mar 2010 05:44:33 +0000 (22:44 -0700)
* Large volumes of filesystem activity can cause a lot of data cycling
  to occur and we generally want this cycling to occur within the inactive
  queue where it doesn't push-out idle but strategic pages related to
  resident programs in the active queue.

  A larger vm_cycle_point value will tend to cause VM pages related to
  released buffer cache buffers to be cycled back into the inactive queue,
  leaving the pages in the active queue alone.  A smaller vm_cycle_point
  value will move the more often-used buffer cache buffer pages to the
  active queue when the buffer is released.

* Unfortunately there are typically a lot of VM pages related to resident
  programs such as xterms and databases which can remain idle for long
  periods of time.  Excessive cycling of buffer cache pages to the
  active queue can cause these long-idle pages to be pushed out to
  swap and/or freed.

  This results in an annoyance when these processes go active again,
  particular ssh, xterm, and other interactive programs.  These are
  not necessarily going to perform badly once the pages are paged back
  in, however.

* It has been found that certain large-scale scans of the filesystem such
  as the HAMMER reblocker and overnight cron jobs could push active pages
  out unnecessarily.  Raising vfs.vm_cycle_point to 40 essentially fixes
  this problem but at the cost of potentially starving the 'file cache'
  for data sets which would otherwise fit into memory (and for which the
  sysop might desire to fit into memory).  So YMMV.

Testing-by: Francois Tigeot <ftigeot@wolfpond.org>
sys/kern/vfs_bio.c

index d8c9a95..09fc526 100644 (file)
@@ -133,7 +133,7 @@ static int bd_request;              /* locked by needsbuffer_spin */
 static int bd_request_hw;      /* locked by needsbuffer_spin */
 static u_int bd_wake_ary[BD_WAKE_SIZE];
 static u_int bd_wake_index;
-static u_int vm_cycle_point = ACT_INIT + ACT_ADVANCE * 6;
+static u_int vm_cycle_point = 40; /* 23-36 will migrate more act->inact */
 static struct spinlock needsbuffer_spin;
 static int debug_commit;