commit-hurd
[Top][All Lists]
Advanced

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

[gnumach] 02/05: patches/99_revert-page-cache-policy.patch: Drop


From: Samuel Thibault
Subject: [gnumach] 02/05: patches/99_revert-page-cache-policy.patch: Drop
Date: Sun, 22 May 2016 18:40:37 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch master
in repository gnumach.

commit cff50a385e5d05d94ba741c3284b9453882c2ad2
Author: Samuel Thibault <address@hidden>
Date:   Sat May 21 22:30:43 2016 +0000

    patches/99_revert-page-cache-policy.patch: Drop
    
    performance regression fixed upstream.
---
 debian/changelog                                 |   2 +
 debian/patches/99_revert-page-cache-policy.patch | 441 -----------------------
 debian/patches/series                            |   1 -
 3 files changed, 2 insertions(+), 442 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index b731ea2..173c5c9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,8 @@
 gnumach (2:1.7-1) UNRELEASED; urgency=medium
 
   * New upstream release & snapshot
+  * patches/99_revert-page-cache-policy.patch: Drop, performance regression
+    fixed upstream.
 
  -- Samuel Thibault <address@hidden>  Sat, 21 May 2016 22:29:51 +0000
 
diff --git a/debian/patches/99_revert-page-cache-policy.patch 
b/debian/patches/99_revert-page-cache-policy.patch
deleted file mode 100644
index ad12f00..0000000
--- a/debian/patches/99_revert-page-cache-policy.patch
+++ /dev/null
@@ -1,441 +0,0 @@
-Revert c774e89387a43d737abbdd99781a294c1cceebb2 and
-98d64d1a78172b1efc26cac36a367eec8496926f to work around performance regression
-
-diff --git a/vm/vm_object.c b/vm/vm_object.c
-index bc30128..e7cfff1 100644
---- a/vm/vm_object.c
-+++ b/vm/vm_object.c
-@@ -64,6 +64,8 @@ void memory_object_release(
-       pager_request_t pager_request,
-       ipc_port_t      pager_name); /* forward */
- 
-+void vm_object_deactivate_pages(vm_object_t);
-+
- /*
-  *    Virtual memory objects maintain the actual data
-  *    associated with allocated virtual memory.  A given
-@@ -164,9 +166,8 @@ vm_object_t                kernel_object = 
&kernel_object_store;
-  *
-  *    The kernel may choose to terminate objects from this
-  *    queue in order to reclaim storage.  The current policy
-- *    is to let memory pressure dynamically adjust the number
-- *    of unreferenced objects. The pageout daemon attempts to
-- *    collect objects after removing pages from them.
-+ *    is to permit a fixed maximum number of unreferenced
-+ *    objects (vm_object_cached_max).
-  *
-  *    A simple lock (accessed by routines
-  *    vm_object_cache_{lock,lock_try,unlock}) governs the
-@@ -182,6 +183,7 @@ vm_object_t                kernel_object = 
&kernel_object_store;
-  */
- queue_head_t  vm_object_cached_list;
- int           vm_object_cached_count;
-+int           vm_object_cached_max = 4000;    /* may be patched*/
- 
- decl_simple_lock_data(,vm_object_cached_lock_data)
- 
-@@ -303,7 +305,6 @@ void vm_object_bootstrap(void)
- 
-       vm_object_template.paging_in_progress = 0;
-       vm_object_template.can_persist = FALSE;
--      vm_object_template.cached = FALSE;
-       vm_object_template.internal = TRUE;
-       vm_object_template.temporary = TRUE;
-       vm_object_template.alive = TRUE;
-@@ -350,60 +351,6 @@ void vm_object_init(void)
- }
- 
- /*
-- *    Object cache management functions.
-- *
-- *    Both the cache and the object must be locked
-- *    before calling these functions.
-- */
--
--static void vm_object_cache_add(
--      vm_object_t     object)
--{
--      assert(!object->cached);
--      queue_enter(&vm_object_cached_list, object, vm_object_t, cached_list);
--      vm_object_cached_count++;
--      vm_object_cached_pages_update(object->resident_page_count);
--      object->cached = TRUE;
--}
--
--static void vm_object_cache_remove(
--      vm_object_t     object)
--{
--      assert(object->cached);
--      queue_remove(&vm_object_cached_list, object, vm_object_t, cached_list);
--      vm_object_cached_count--;
--      vm_object_cached_pages_update(-object->resident_page_count);
--      object->cached = FALSE;
--}
--
--void vm_object_collect(
--      register vm_object_t    object)
--{
--      vm_object_unlock(object);
--
--      /*
--       *      The cache lock must be acquired in the proper order.
--       */
--
--      vm_object_cache_lock();
--      vm_object_lock(object);
--
--      /*
--       *      If the object was referenced while the lock was
--       *      dropped, cancel the termination.
--       */
--
--      if (!vm_object_collectable(object)) {
--              vm_object_unlock(object);
--              vm_object_cache_unlock();
--              return;
--      }
--
--      vm_object_cache_remove(object);
--      vm_object_terminate(object);
--}
--
--/*
-  *    vm_object_reference:
-  *
-  *    Gets another reference to the given object.
-@@ -463,31 +410,103 @@ void vm_object_deallocate(
- 
-               /*
-                *      See whether this object can persist.  If so, enter
--               *      it in the cache.
-+               *      it in the cache, then deactivate all of its
-+               *      pages.
-                */
--              if (object->can_persist && (object->resident_page_count > 0)) {
--                      vm_object_cache_add(object);
-+              if (object->can_persist) {
-+                      boolean_t       overflow;
-+
-+                      /*
-+                       *      Enter the object onto the queue
-+                       *      of "cached" objects.  Remember whether
-+                       *      we've caused the queue to overflow,
-+                       *      as a hint.
-+                       */
-+
-+                      queue_enter(&vm_object_cached_list, object,
-+                              vm_object_t, cached_list);
-+                      overflow = (++vm_object_cached_count > 
vm_object_cached_max);
-+                      
vm_object_cached_pages_update(object->resident_page_count);
-                       vm_object_cache_unlock();
-+
-+                      vm_object_deactivate_pages(object);
-                       vm_object_unlock(object);
--                      return;
--              }
- 
--              if (object->pager_created &&
--                  !object->pager_initialized) {
-+                      /*
-+                       *      If we didn't overflow, or if the queue has
-+                       *      been reduced back to below the specified
-+                       *      minimum, then quit.
-+                       */
-+                      if (!overflow)
-+                              return;
-+
-+                      while (TRUE) {
-+                              vm_object_cache_lock();
-+                              if (vm_object_cached_count <=
-+                                  vm_object_cached_max) {
-+                                      vm_object_cache_unlock();
-+                                      return;
-+                              }
-+
-+                              /*
-+                               *      If we must trim down the queue, take
-+                               *      the first object, and proceed to
-+                               *      terminate it instead of the original
-+                               *      object.  Have to wait for pager init.
-+                               *  if it's in progress.
-+                               */
-+                              object= (vm_object_t)
-+                                  queue_first(&vm_object_cached_list);
-+                              vm_object_lock(object);
-+
-+                              if (!(object->pager_created &&
-+                                  !object->pager_initialized)) {
-+
-+                                      /*
-+                                       *  Ok to terminate, hang on to lock.
-+                                       */
-+                                      break;
-+                              }
-+
-+                              vm_object_assert_wait(object,
-+                                      VM_OBJECT_EVENT_INITIALIZED, FALSE);
-+                              vm_object_unlock(object);
-+                              vm_object_cache_unlock();
-+                              thread_block((void (*)()) 0);
-+
-+                              /*
-+                               *  Continue loop to check if cache still
-+                               *  needs to be trimmed.
-+                               */
-+                      }
- 
-                       /*
--                       *      Have to wait for initialization.
--                       *      Put reference back and retry
--                       *      when it's initialized.
-+                       *      Actually remove object from cache.
-                        */
- 
--                      object->ref_count++;
--                      vm_object_assert_wait(object,
--                              VM_OBJECT_EVENT_INITIALIZED, FALSE);
--                      vm_object_unlock(object);
--                      vm_object_cache_unlock();
--                      thread_block((void (*)()) 0);
--                      continue;
-+                      queue_remove(&vm_object_cached_list, object,
-+                                      vm_object_t, cached_list);
-+                      vm_object_cached_count--;
-+
-+                      assert(object->ref_count == 0);
-+              }
-+              else {
-+                      if (object->pager_created &&
-+                          !object->pager_initialized) {
-+
-+                              /*
-+                               *      Have to wait for initialization.
-+                               *      Put reference back and retry
-+                               *      when it's initialized.
-+                               */
-+                              object->ref_count++;
-+                              vm_object_assert_wait(object,
-+                                      VM_OBJECT_EVENT_INITIALIZED, FALSE);
-+                              vm_object_unlock(object);
-+                              vm_object_cache_unlock();
-+                              thread_block((void (*)()) 0);
-+                              continue;
-+                        }
-               }
- 
-               /*
-@@ -514,6 +533,8 @@ void vm_object_deallocate(
-       }
- }
- 
-+boolean_t     vm_object_terminate_remove_all = FALSE;
-+
- /*
-  *    Routine:        vm_object_terminate
-  *    Purpose:
-@@ -618,7 +639,6 @@ void vm_object_terminate(
- 
-       assert(object->ref_count == 0);
-       assert(object->paging_in_progress == 0);
--      assert(!object->cached);
- 
-       /*
-        *      Throw away port rights... note that they may
-@@ -851,6 +871,28 @@ kern_return_t memory_object_destroy(
- }
- 
- /*
-+ *    vm_object_deactivate_pages
-+ *
-+ *    Deactivate all pages in the specified object.  (Keep its pages
-+ *    in memory even though it is no longer referenced.)
-+ *
-+ *    The object must be locked.
-+ */
-+void vm_object_deactivate_pages(
-+      register vm_object_t    object)
-+{
-+      register vm_page_t      p;
-+
-+      queue_iterate(&object->memq, p, vm_page_t, listq) {
-+              vm_page_lock_queues();
-+              if (!p->busy)
-+                      vm_page_deactivate(p);
-+              vm_page_unlock_queues();
-+      }
-+}
-+
-+
-+/*
-  *    Routine:        vm_object_pmap_protect
-  *
-  *    Purpose:
-@@ -1804,8 +1846,12 @@ vm_object_t vm_object_lookup(
- 
-                       assert(object->alive);
- 
--                      if (object->ref_count == 0)
--                              vm_object_cache_remove(object);
-+                      if (object->ref_count == 0) {
-+                              queue_remove(&vm_object_cached_list, object,
-+                                           vm_object_t, cached_list);
-+                              vm_object_cached_count--;
-+                              
vm_object_cached_pages_update(-object->resident_page_count);
-+                      }
- 
-                       object->ref_count++;
-                       vm_object_unlock(object);
-@@ -1832,8 +1878,12 @@ vm_object_t vm_object_lookup_name(
- 
-                       assert(object->alive);
- 
--                      if (object->ref_count == 0)
--                              vm_object_cache_remove(object);
-+                      if (object->ref_count == 0) {
-+                              queue_remove(&vm_object_cached_list, object,
-+                                           vm_object_t, cached_list);
-+                              vm_object_cached_count--;
-+                              
vm_object_cached_pages_update(-object->resident_page_count);
-+                      }
- 
-                       object->ref_count++;
-                       vm_object_unlock(object);
-@@ -1865,8 +1915,12 @@ void vm_object_destroy(
- 
-       object = (vm_object_t) pager->ip_kobject;
-       vm_object_lock(object);
--      if (object->ref_count == 0)
--              vm_object_cache_remove(object);
-+      if (object->ref_count == 0) {
-+              queue_remove(&vm_object_cached_list, object,
-+                              vm_object_t, cached_list);
-+              vm_object_cached_count--;
-+              vm_object_cached_pages_update(-object->resident_page_count);
-+      }
-       object->ref_count++;
- 
-       object->can_persist = FALSE;
-@@ -2014,8 +2068,12 @@ restart:
- 
-       if ((object != VM_OBJECT_NULL) && !must_init) {
-               vm_object_lock(object);
--              if (object->ref_count == 0)
--                      vm_object_cache_remove(object);
-+              if (object->ref_count == 0) {
-+                      queue_remove(&vm_object_cached_list, object,
-+                                      vm_object_t, cached_list);
-+                      vm_object_cached_count--;
-+                      
vm_object_cached_pages_update(-object->resident_page_count);
-+              }
-               object->ref_count++;
-               vm_object_unlock(object);
- 
-@@ -2524,7 +2582,6 @@ void vm_object_collapse(
-                       );
- 
-                       assert(backing_object->alive);
--                      assert(!backing_object->cached);
-                       backing_object->alive = FALSE;
-                       vm_object_unlock(backing_object);
- 
-@@ -2653,7 +2710,7 @@ void vm_object_page_remove(
-        *      It balances vm_object_lookup vs iteration.
-        */
- 
--      if (atop(end - start) < object->resident_page_count/16) {
-+      if (atop(end - start) < (unsigned)object->resident_page_count/16) {
-               vm_object_page_remove_lookup++;
- 
-               for (; start < end; start += PAGE_SIZE) {
-@@ -2880,7 +2937,7 @@ void vm_object_print(
-               (vm_offset_t) object, (vm_offset_t) object->size,
-               object->ref_count);
-       printf("\n");
--      iprintf("%lu resident pages,", object->resident_page_count);
-+      iprintf(" %d resident pages,", object->resident_page_count);
-        printf(" %d absent pages,", object->absent_count);
-        printf(" %d paging ops\n", object->paging_in_progress);
-       indent += 1;
-diff --git a/vm/vm_object.h b/vm/vm_object.h
-index eb8a0c2..71c8545 100644
---- a/vm/vm_object.h
-+++ b/vm/vm_object.h
-@@ -72,7 +72,7 @@ struct vm_object {
-                                                */
- 
-       int                     ref_count;      /* Number of references */
--      unsigned long           resident_page_count;
-+      int                     resident_page_count;
-                                               /* number of resident pages */
- 
-       struct vm_object        *copy;          /* Object that should receive
-@@ -148,9 +148,8 @@ struct vm_object {
-                                                */
-       /* boolean_t */         use_shared_copy : 1,/* Use shared (i.e.,
-                                                * delayed) copy on write */
--      /* boolean_t */         shadowed: 1,    /* Shadow may exist */
-+      /* boolean_t */         shadowed: 1;    /* Shadow may exist */
- 
--      /* boolean_t */         cached: 1;      /* Object is cached */
-       queue_chain_t           cached_list;    /* Attachment point for the list
-                                                * of objects cached as a result
-                                                * of their can_persist value
-@@ -170,7 +169,6 @@ vm_object_t        kernel_object;          /* the single 
kernel object */
- 
- extern void           vm_object_bootstrap(void);
- extern void           vm_object_init(void);
--extern void           vm_object_collect(vm_object_t);
- extern void           vm_object_terminate(vm_object_t);
- extern vm_object_t    vm_object_allocate(vm_size_t);
- extern void           vm_object_reference(vm_object_t);
-@@ -292,10 +290,6 @@ vm_object_t vm_object_copy_delayed(
-  *    Routines implemented as macros
-  */
- 
--#define vm_object_collectable(object)                                 \
--      (((object)->ref_count == 0)                                     \
--      && ((object)->resident_page_count == 0))
--
- #define       vm_object_paging_begin(object)                                  
\
-       ((object)->paging_in_progress++)
- 
-diff --git a/vm/vm_pageout.c b/vm/vm_pageout.c
-index 72f96cb..f06e8f8 100644
---- a/vm/vm_pageout.c
-+++ b/vm/vm_pageout.c
-@@ -748,12 +748,7 @@ void vm_pageout_scan(void)
-                   reclaim_page:
-                       vm_page_free(m);
-                       vm_page_unlock_queues();
--
--                      if (vm_object_collectable(object))
--                              vm_object_collect(object);
--                      else
--                              vm_object_unlock(object);
--
-+                      vm_object_unlock(object);
-                       continue;
-               }
- 
-diff --git a/vm/vm_resident.c b/vm/vm_resident.c
-index 79481a7..21ab570 100644
---- a/vm/vm_resident.c
-+++ b/vm/vm_resident.c
-@@ -372,7 +372,7 @@ void vm_page_insert(
-        */
- 
-       object->resident_page_count++;
--      assert(object->resident_page_count != 0);
-+      assert(object->resident_page_count >= 0);
- 
-       if (object->can_persist && (object->ref_count == 0))
-               vm_object_cached_pages_update(1);
-@@ -479,7 +479,7 @@ void vm_page_replace(
-        */
- 
-       object->resident_page_count++;
--      assert(object->resident_page_count != 0);
-+      assert(object->resident_page_count >= 0);
- 
-       if (object->can_persist && (object->ref_count == 0))
-               vm_object_cached_pages_update(1);
diff --git a/debian/patches/series b/debian/patches/series
index 1d64b0f..b804345 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,4 +4,3 @@
 50_initrd.patch
 60_bigmem.patch
 70_dde.patch
-99_revert-page-cache-policy.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/gnumach.git



reply via email to

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