Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Feb 2012 16:45:52 +0100 (CET)
From:      Wojciech Puchar <wojtek@wojtek.tensor.gdynia.pl>
To:        freebsd-hackers@freebsd.org
Cc:        Grzegorz Kulewski <grzegorz@kulewski.pl>
Subject:   improving VM - questions
Message-ID:  <alpine.BSF.2.00.1202251630560.1436@wojtek.tensor.gdynia.pl>

next in thread | raw e-mail | index | archive | help
it is easy to see that VM settings are not fine for MODERN hardware.

We have gigabytes, not megabytes of RAM, hard disks can be efficient only 
if average I/O size is in order of megabyte or so, not tens of kB.

In spite of having gigabytes of RAM, sometimes we DO NEED swapping.

often we have process taking lots of RAM that is not used for a long etc.

For now swapping generates too small I/Os

i tried that patch

--- swap_pager.c.orig   2012-02-25 16:22:25.000000000 +0100
+++ swap_pager.c        2012-02-25 13:19:51.000000000 +0100
@@ -119,7 +119,7 @@
  * The 32-page limit is due to the radix code (kern/subr_blist.c).
  */
 #ifndef MAX_PAGEOUT_CLUSTER
-#define MAX_PAGEOUT_CLUSTER 16
+#define MAX_PAGEOUT_CLUSTER 256
 #endif

 #if !defined(SWB_NPAGES)
--- vm_fault.c.orig     2011-10-12 22:08:25.000000000 +0200
+++ vm_fault.c  2012-02-25 13:20:02.000000000 +0100
@@ -114,8 +114,8 @@
 static int vm_fault_additional_pages(vm_page_t, int, int, vm_page_t *, 
int *);
 static void vm_fault_prefault(pmap_t, vm_offset_t, vm_map_entry_t);

-#define VM_FAULT_READ_AHEAD 8
-#define VM_FAULT_READ_BEHIND 7
+#define VM_FAULT_READ_AHEAD 128
+#define VM_FAULT_READ_BEHIND 127
 #define VM_FAULT_READ (VM_FAULT_READ_AHEAD+VM_FAULT_READ_BEHIND+1)

 struct faultstate {

--- param.h~	2011-06-08 05:45:40.000000000 +0200
+++ param.h	2011-06-15 19:00:32.000000000 +0200
@@ -131,7 +131,7 @@
 #define DFLTPHYS	(64 * 1024)	/* default max raw I/O transfer size */
 #endif
 #ifndef MAXPHYS
-#define MAXPHYS		(128 * 1024)	/* max raw I/O transfer size */
+#define MAXPHYS		(2048 * 1024)	/* max raw I/O transfer size */
 #endif
 #ifndef MAXDUMPPGS
 #define MAXDUMPPGS	(DFLTPHYS/PAGE_SIZE)


-----


param.h patch works great for filesystem I/O with big files. i use it for 
a long. 

vm_fault.c patch seems to make starting big programs faster as well, 
systat/vmstat confirms I/O sizes are larger.

but swap_pager.c patch seems not to work. i observe 64kB pageouts, no 
more.

what is wrong in it?


Other question - tmpfs, it not in memory, seems to ALWAYS generate exactly 
one page sized I/Os at pagein (no matter what i do). What is wrong in it?





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.1202251630560.1436>