On 13.08.2014 12:52, Jérôme Glisse wrote:
From: Jérôme Glisse jglisse@redhat.com
When experiencing memory pressure we want to minimize pool size so that memory we just shrinked is not added back again just as the next thing.
This will divide by 2 the maximum pool size for each device each time the pool have to shrink. The limit is bumped again is next allocation happen after one second since the last shrink. The one second delay is obviously an arbitrary choice.
Signed-off-by: Jérôme Glisse jglisse@redhat.com
[...]
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index 09874d6..ab41adf 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c @@ -68,6 +68,8 @@
- @list: Pool of free uc/wc pages for fast reuse.
- @gfp_flags: Flags to pass for alloc_page.
- @npages: Number of pages in pool.
- @cur_max_size: Current maximum size for the pool.
*/
- @shrink_timeout: Timeout for pool maximum size restriction.
struct ttm_page_pool { spinlock_t lock; @@ -76,6 +78,8 @@ struct ttm_page_pool { gfp_t gfp_flags; unsigned npages; char *name;
- unsigned cur_max_size;
- unsigned long last_shrink;
s/last_shrink/shrink_timeout/
Looks like maybe you posted an untested stale set of patches?
@@ -289,6 +293,16 @@ static void ttm_pool_update_free_locked(struct ttm_page_pool *pool, pool->nfrees += freed_pages; }
+static inline void ttm_pool_update_max_size(struct ttm_page_pool *pool) +{
- if (time_before(jiffies, pool->shrink_timeout))
return;
- /* In case we reached zero bounce back to 512 pages. */
- pool->cur_max_size = max(pool->cur_max_size << 1, 512);
Another 'comparison of distinct pointer types lacks a cast' warning.
Both issues apply to ttm_page_alloc_dma.c as well.