diff options
author | neal <neal> | 2008-06-23 19:53:37 +0000 |
---|---|---|
committer | neal <neal> | 2008-06-23 19:53:37 +0000 |
commit | bc31075886288487b51b1a856f8718011a5d69e6 (patch) | |
tree | 91c673659f2c30369cbe59fff38da296803cc824 /viengoos/pager.h | |
parent | 486cab8528a7face71ee827157311272a563f9c5 (diff) |
2008-06-23 Neal H. Walfield <neal@gnu.org>
* pager.h (pager_min_alloc_before_next_collect): New declaration.
(pager_collect_needed): Only collect if AVAILABLE_PAGES >
PAGER_LOW_WATER_MARK and PAGER_MIN_ALLOC_BEFORE_NEXT_COLLECT > 0.
(pager_collect_needed): Don't include the dirty, non-discardable
pages when consider if a collection is required.
* pager.c (pager_min_alloc_before_next_collect): New variable.
(pager_collect): If we don't collect enough pages to exceed the
high water mark, set PAGER_MIN_ALLOC_BEFORE_NEXT_COLLECT to
two-thirds the available pages.
* memory.c (memory_frame_allocate): On success, decrement
PAGER_MIN_ALLOC_BEFORE_NEXT_COLLECT.
Diffstat (limited to 'viengoos/pager.h')
-rw-r--r-- | viengoos/pager.h | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/viengoos/pager.h b/viengoos/pager.h index d5f8cf7..1d8d1ef 100644 --- a/viengoos/pager.h +++ b/viengoos/pager.h @@ -31,8 +31,15 @@ extern int pager_collect (int goal); /* We try to keep at least 1/8 (12.5%) of memory available for - immediate allocation. */ + immediate allocation... */ #define PAGER_LOW_WATER_MARK (memory_total / 8) + +/* ... although we try, we don't always succeed. In such a case, + repeated collections won't help. Instead, we need to hope that + user-tasks clean up a bit. This requires giving them a bit of + time. Thus, we only collect again after this many allocations. */ +extern int pager_min_alloc_before_next_collect; + /* When we start freeing, we try to get at least 3/16 (~19%) of memory available for immediate allocation. */ #define PAGER_HIGH_WATER_MARK \ @@ -45,12 +52,16 @@ static inline int pager_collect_needed (void) { int available_pages = zalloc_memory - + available_list_count (&available) + + available_list_count (&available); +#if 0 + /* XXX: Until we have a disk pager... */ /* We only count the pages on the laundry half as they won't be available immediately. */ + laundry_list_count (&laundry) / 2; +#endif - if (available_pages > PAGER_LOW_WATER_MARK) + if (available_pages > PAGER_LOW_WATER_MARK + || pager_min_alloc_before_next_collect > 0) return 0; return PAGER_HIGH_WATER_MARK - available_pages; |