linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] Autoregulate vm swappiness cleanup
@ 2003-10-28 13:34 Boszormenyi Zoltan
  2003-10-28 14:39 ` Richard B. Johnson
  0 siblings, 1 reply; 14+ messages in thread
From: Boszormenyi Zoltan @ 2003-10-28 13:34 UTC (permalink / raw)
  To: linux-kernel

Hi,

this patch makes my system even more responsive,
I applied the patch over 2.6.0-test8-mm1.

I have a Glade v1 project that has these source files among others:

$ ls -l callbacks.[ch] interface.[ch]
-rw-rw-r--    1 zozo     zozo       583241 okt 28 13:06 callbacks.c
-rw-rw-r--    1 zozo     zozo        96592 okt 27 22:54 callbacks.h
-rw-rw-r--    1 zozo     zozo      1090912 okt 27 22:54 interface.c
-rw-rw-r--    1 zozo     zozo         1687 okt 27 22:54 interface.h

That said, among others: the projects is *very* large, and is reasonably
modularised before someone says something silly about my programming
capabilities. :-)

gcc-3.3.2 (latest Fedora packages) goes up 160M+ in memory usage,
For a test run I started mozilla with some very long pages, oowriter,
gedit with the listed files opened and some gnome-terminal and a new project
compile with make -j2 so the callbacks.c and interface.c were compiled
simultaneously.

The system is a dual PIII/500 MHz with 512M RAM, not a speedy machine.
With all these, the system used only ~36M swap. Free memory was about 3-6M
then I exited oowriter. Free mem suddenly went up to 75M+, starting
programs was almost instant.

Definitely a win.

-- 
Best regards,
Zoltán Böszörményi

---------------------
What did Hussein say about his knife?
One in Bush worth two in the hand.


^ permalink raw reply	[flat|nested] 14+ messages in thread
* [PATCH] Autoregulate vm swappiness 2.6.0-test8
@ 2003-10-23 13:37 Con Kolivas
  2003-10-23 14:42 ` Martin J. Bligh
  0 siblings, 1 reply; 14+ messages in thread
From: Con Kolivas @ 2003-10-23 13:37 UTC (permalink / raw)
  To: linux kernel mailing list; +Cc: Andrew Morton

[-- Attachment #1: Type: text/plain, Size: 1853 bytes --]

The vm_swappiness dial in 2.6 was never quite the right setting without me 
constantly changing it depending on the workload. If I was copying large 
files or encoding video it was best at 0. If I was using lots of applications 
it was best much higher. Furthermore it depended on the amount of ram in the 
machine I was using. This patch was done just for fun a while back but it 
turned out to be quite effectual so I thought I'd make it available for the 
wider community to play with. Do whatever you like with it.

This patch autoregulates the vm_swappiness dial in 2.6 by making it equal to 
the percentage of physical ram consumed by application pages. 

This has the effect of preventing applications from being swapped out if the 
ram is filling up with cached data. 

Conversely, if many applications are in ram the swappiness increases which 
means the application currently in use gets to stay in physical ram while 
other less used applications are swapped out. 

For desktop enthusiasts this means if you are copying large files around like 
ISO images or leave your machine unattended for a while it will not swap out 
your applications. Conversely if the machine has a lot of applications 
currently loaded it will give the currently running applications preference 
and swap out the less used ones.

The performance effect on larger boxes seems to be either unchanged or slight 
improvement (1%) in database benchmarks.

The value in vm_swappiness is updated only when the vm is under pressure to 
swap and you can check the last vm_swappiness value under pressure by
cat /proc/sys/vm/swappiness

Manually setting the swappiness with this patch in situ has no effect. This 
patch has been heavily tested without noticable harm. Note I am not sure of 
the best way to do this so it may look rather crude.

Patch against 2.6.0-test8

Con

[-- Attachment #2: patch-test8-am --]
[-- Type: text/x-diff, Size: 1420 bytes --]

--- linux-2.6.0-test8-base/mm/vmscan.c	2003-10-19 20:24:36.000000000 +1000
+++ linux-2.6.0-test8-am/mm/vmscan.c	2003-10-22 17:56:18.501329888 +1000
@@ -47,7 +47,7 @@
 /*
  * From 0 .. 100.  Higher means more swappy.
  */
-int vm_swappiness = 60;
+int vm_swappiness = 0;
 static long total_memory;
 
 #ifdef ARCH_HAS_PREFETCH
@@ -595,11 +595,13 @@ refill_inactive_zone(struct zone *zone, 
 	int pgmoved;
 	int pgdeactivate = 0;
 	int nr_pages = nr_pages_in;
+	int pg_size;
 	LIST_HEAD(l_hold);	/* The pages which were snipped off */
 	LIST_HEAD(l_inactive);	/* Pages to go onto the inactive_list */
 	LIST_HEAD(l_active);	/* Pages to go onto the active_list */
 	struct page *page;
 	struct pagevec pvec;
+	struct sysinfo i;
 	int reclaim_mapped = 0;
 	long mapped_ratio;
 	long distress;
@@ -642,6 +644,16 @@ refill_inactive_zone(struct zone *zone, 
 	mapped_ratio = (ps->nr_mapped * 100) / total_memory;
 
 	/*
+	 * Autoregulate vm_swappiness to be application pages % -ck.
+	 */
+	si_meminfo(&i);
+	si_swapinfo(&i);
+	pg_size = get_page_cache_size() - i.bufferram ;
+	vm_swappiness = 100 - (((i.freeram + i.bufferram +
+		(pg_size - swapper_space.nrpages)) * 100) /
+		(i.totalram ? i.totalram : 1));
+
+	/*
 	 * Now decide how much we really want to unmap some pages.  The mapped
 	 * ratio is downgraded - just because there's a lot of mapped memory
 	 * doesn't necessarily mean that page reclaim isn't succeeding.

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2003-11-03  8:15 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-10-28 13:34 [PATCH] Autoregulate vm swappiness cleanup Boszormenyi Zoltan
2003-10-28 14:39 ` Richard B. Johnson
2003-10-28 15:39   ` Valdis.Kletnieks
2003-10-28 15:54     ` Richard B. Johnson
2003-10-28 16:37       ` Valdis.Kletnieks
2003-10-28 16:51         ` Måns Rullgård
2003-10-28 17:33           ` Valdis.Kletnieks
2003-11-03  8:15   ` [OT] " Boszormenyi Zoltan
  -- strict thread matches above, loose matches on Subject: below --
2003-10-23 13:37 [PATCH] Autoregulate vm swappiness 2.6.0-test8 Con Kolivas
2003-10-23 14:42 ` Martin J. Bligh
2003-10-23 15:03   ` Con Kolivas
2003-10-25  6:58     ` [PATCH] Autoregulate vm swappiness cleanup Con Kolivas
2003-10-26 11:22       ` Nick Piggin
2003-10-26 10:36         ` Con Kolivas
2003-10-26 11:42           ` Nick Piggin
2003-10-28 11:04       ` Pavel Machek
2003-10-28 12:40         ` Con Kolivas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).