bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH gnumach 3/3] vm: evict clean pages first


From: Justus Winter
Subject: [PATCH gnumach 3/3] vm: evict clean pages first
Date: Sat, 21 Feb 2015 16:02:03 +0100

* vm/vm_pageout.c (vm_pageout_scan): Evict clean pages from the list
of clean pages first, without requiring an expensive scan through the
inactive list.
---
 vm/vm_pageout.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/vm/vm_pageout.c b/vm/vm_pageout.c
index eb68b20..740a465 100644
--- a/vm/vm_pageout.c
+++ b/vm/vm_pageout.c
@@ -681,6 +681,28 @@ void vm_pageout_scan(void)
                        /*NOTREACHED*/
                }
 
+               /* Try to evict a clean page first.  */
+               simple_lock (&vm_page_queue_clean);
+               int tries;
+               for (tries = vm_page_clean_count; tries; tries--)
+                 {
+                   assert (! queue_empty (&vm_page_queue_clean));
+                   queue_remove_first (&vm_page_queue_clean,
+                                       m, vm_page_t, cleanq);
+                   if (! m->active && m->inactive
+                       && (want_pages || m->external))
+                     {
+                       m->cleanq.next = NULL;
+                       vm_page_clean_count -= 1;
+                       simple_unlock (&vm_page_queue_clean);
+                       goto got_one;
+                     }
+                   else
+                     queue_enter (&vm_page_queue_clean,
+                                  m, vm_page_t, cleanq);
+                 }
+               simple_unlock (&vm_page_queue_clean);
+
                vm_pageout_inactive++;
 
                /* Find a page we are interested in paging out.  If we
@@ -697,7 +719,7 @@ void vm_pageout_scan(void)
                    if (!m)
                      goto pause;
                  }
-               
+       got_one:
                object = m->object;
 
                /*
-- 
2.1.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]