* [PATCH] reclaim dirty dead swapcache pages
@ 2001-05-30 17:51 Marcelo Tosatti
2001-05-30 20:32 ` Marcelo Tosatti
0 siblings, 1 reply; 6+ messages in thread
From: Marcelo Tosatti @ 2001-05-30 17:51 UTC (permalink / raw)
To: lkml, Linus Torvalds; +Cc: Alan Cox
Hi,
The following untested patch against 2.4.5-ac2 makes page_launder() free
dead swap cache pages by ignoring their age and/or referenced bits.
refill_inactive_scan() will move those pages to the inactive dirty list
whatever their age/referenced bit.
Testers are welcome (hum, needed).
Linus,
I gaveup on the writepage() changes because
1) it would (and it could not) ignore the page age.
2) changing the API for such a reason on 2.4 is not reasonable, I think.
I definately want writepage() changed to include the 'priority' argument,
in 2.5.
--- linux.orig/mm/vmscan.c Wed May 30 14:51:21 2001
+++ linux/mm/vmscan.c Wed May 30 16:18:41 2001
@@ -461,6 +461,28 @@
continue;
}
+ /*
+ * FIXME: this is a hack.
+ *
+ * Check for dead swap cache pages and clean
+ * them as fast as possible, before doing any other checks.
+ *
+ * Note: We are guaranteeing that this page will never
+ * be touched in the future because a dirty page with no
+ * other users than the swapcache will never be referenced
+ * again.
+ *
+ */
+
+ if (PageSwapCache(page) && PageDirty(page) &&
+ (page_count(page) - !!page->buffers) == 1 &&
+ swap_count(page) == 1) {
+ ClearPageDirty(page);
+ ClearPageReferenced(page);
+ page->age = 0;
+ }
+
+
/* Page is or was in use? Move it to the active list. */
if (PageReferenced(page) || page->age > 0 ||
(!page->buffers && page_count(page) > 1) ||
@@ -686,6 +708,21 @@
nr_active_pages--;
continue;
}
+
+ /*
+ * FIXME: hack
+ *
+ * Special case for dead swap cache pages.
+ * See comment on page_launder() for more info.
+ */
+ if (PageSwapCache(page) && PageDirty(page) &&
+ (page_count(page) - !!page->buffers) == 1 &&
+ swap_count(page) == 1) {
+ deactivate_page_nolock(page);
+ nr_deactivated++;
+ continue;
+ }
+
/* Do aging on the pages. */
if (PageTestandClearReferenced(page)) {
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] reclaim dirty dead swapcache pages
2001-05-30 17:51 [PATCH] reclaim dirty dead swapcache pages Marcelo Tosatti
@ 2001-05-30 20:32 ` Marcelo Tosatti
2001-05-30 22:15 ` J . A . Magallon
2001-05-31 18:20 ` Vasco Figueira
0 siblings, 2 replies; 6+ messages in thread
From: Marcelo Tosatti @ 2001-05-30 20:32 UTC (permalink / raw)
To: lkml, Linus Torvalds; +Cc: Alan Cox
On Wed, 30 May 2001, Marcelo Tosatti wrote:
>
> Hi,
>
> The following untested patch against 2.4.5-ac2 makes page_launder() free
> dead swap cache pages by ignoring their age and/or referenced bits.
I tested it and yes, it works.
However I want more results before trying to push this to Alan.
Its at
http://bazar.conectiva.com.br/~marcelo/patches/v2.4/2.4.5ac4/reapswap.patch
Please test.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] reclaim dirty dead swapcache pages
2001-05-30 22:15 ` J . A . Magallon
@ 2001-05-30 20:48 ` Marcelo Tosatti
0 siblings, 0 replies; 6+ messages in thread
From: Marcelo Tosatti @ 2001-05-30 20:48 UTC (permalink / raw)
To: J . A . Magallon; +Cc: lkml
On Thu, 31 May 2001, J . A . Magallon wrote:
>
> On 05.30 Marcelo Tosatti wrote:
> >
> >
> > Its at
> > http://bazar.conectiva.com.br/~marcelo/patches/v2.4/2.4.5ac4/reapswap.patch
> >
> > Please test.
> >
>
> Which kind of test, something like the gcc think I posted recently ?
I don't remember that, sorry. What was it again?
> Just stress vm, fill swap, and try to do it again ?
For example.
I would _prefer_ tests non artifical tests, though. (ie not the kind of
workloads where tasks are trying to consume all available resources all
the time)
Still, any kind of report is welcome, of course.
Thanks a lot!
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] reclaim dirty dead swapcache pages
2001-05-30 20:32 ` Marcelo Tosatti
@ 2001-05-30 22:15 ` J . A . Magallon
2001-05-30 20:48 ` Marcelo Tosatti
2001-05-31 18:20 ` Vasco Figueira
1 sibling, 1 reply; 6+ messages in thread
From: J . A . Magallon @ 2001-05-30 22:15 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: lkml
On 05.30 Marcelo Tosatti wrote:
>
>
> Its at
> http://bazar.conectiva.com.br/~marcelo/patches/v2.4/2.4.5ac4/reapswap.patch
>
> Please test.
>
Which kind of test, something like the gcc think I posted recently ?
Just stress vm, fill swap, and try to do it again ?
--
J.A. Magallon # Let the source be with you...
mailto:jamagallon@able.es
Linux Mandrake release 8.1 (Cooker) for i586
Linux werewolf 2.4.5-ac4 #1 SMP Wed May 30 00:17:45 CEST 2001 i686
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] reclaim dirty dead swapcache pages
2001-05-30 20:32 ` Marcelo Tosatti
2001-05-30 22:15 ` J . A . Magallon
@ 2001-05-31 18:20 ` Vasco Figueira
2001-05-31 19:31 ` Vasco Figueira
1 sibling, 1 reply; 6+ messages in thread
From: Vasco Figueira @ 2001-05-31 18:20 UTC (permalink / raw)
To: linux-kernel
Hi,
Marcelo Tosatti wrote:
> I tested it and yes, it works.
(...)
> Please test.
I've tested it against vanilla 2.4.5 and it resolves the freeze problem,
though:
I've opened x, gnome, mozilla, mozilla -mail, 3 gnome-terminals, pan,
xmms, some files and javac. Swap was totally filled up and it didn't
froze (good!). However suddently it came very busy (i thougth it was
going to freeze again), the music stopped, and came back to normal
again. It had killed xmms, I noticed after.
Is it intentional to kill processes? Well, it does reolve the problem,
but kills some processes, probably the most eager ones. I will keep
using this patch and report again if something relevant is found.
So far, so good, this is better tha having to swapoff & swapon all the
time. Nice work Marcelo.
--
Regards,
Vasco Figueira
http://students.fct.unl.pt/users/vaf12086/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] reclaim dirty dead swapcache pages
2001-05-31 18:20 ` Vasco Figueira
@ 2001-05-31 19:31 ` Vasco Figueira
0 siblings, 0 replies; 6+ messages in thread
From: Vasco Figueira @ 2001-05-31 19:31 UTC (permalink / raw)
To: linux-kernel
Hi again,
Vasco Figueira wrote:
>I've opened x, gnome, mozilla, mozilla -mail, 3 gnome-terminals, pan,
>xmms, some files and javac. Swap was totally filled up and it didn't
>froze (good!). However suddently it came very busy (i thougth it was
>going to freeze again), the music stopped, and came back to normal
>again. It had killed xmms, I noticed after.
>Is it intentional to kill processes? Well, it does reolve the problem,
>but kills some processes, probably the most eager ones. I will keep
>using this patch and report again if something relevant is found.
>So far, so good, this is better tha having to swapoff & swapon all the
>time. Nice work Marcelo.
Continuing the saga of testing this patch, some more things:
* Swap gets *really* filled up. I don't remember having swap totally
filled with 2.2. and this has 20M more (doesn't have to do with this
patch, I think)
* kernel appears to try to free pages only when they are desperatly
needed, i.e., when swap is full and a big process is needing mem. As an
example, i was calm editing some text files (swap was full), and called
javac. System went down to his knees, music stopped, mouse had repent
stops and javac outputed:"Killed". I assume it was killed :-)
javac was called again and then ran more smootly. Perhaps because his
pages were already there, no?
It may be better to try to free pages before we get into heavy load. If
not, we get a pseudo-freeze and a killed process. Wich is not... wonderful.
Comments?
--
Regards,
Vasco Figueira
http://students.fct.unl.pt/users/vaf12086/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2001-05-31 19:29 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-05-30 17:51 [PATCH] reclaim dirty dead swapcache pages Marcelo Tosatti
2001-05-30 20:32 ` Marcelo Tosatti
2001-05-30 22:15 ` J . A . Magallon
2001-05-30 20:48 ` Marcelo Tosatti
2001-05-31 18:20 ` Vasco Figueira
2001-05-31 19:31 ` Vasco Figueira
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox