Features Download
From: John Stultz <john.stultz <at> linaro.org>
Subject: [PATCH 0/5][RFC] Fallocate Volatile Ranges v5
Newsgroups: gmane.linux.kernel
Date: Wednesday 27th June 2012 04:17:10 UTC (over 4 years ago)
After sending out my last iteration, I got very little feedback, so
I wanted to try sending this out again for comment.

This patchset has two parts:

The first 3 patches add generic volatile range management code, as 
well as tmpfs support for FALLOC_FL_MARK_VOLATILE, which uses a
shrinker to purge ranges, and converts ashmem to use
FALLOC_FL_MARK_VOLATILE, almost reducing the driver in half.

Since Kosaki-san objected to using the shrinker, as its not numa aware,
and is only called after we shrink normal lru lists. The second half of
this patch set provides a different method that is not shrinker based.
In this method we deactivate the pages in the volatile range, and then
when writepage is called on a volatile page, we purge the entire range.
Due to my unfamiliar with the details of the VM, this second part is
less likely to be 100% correct or ideal, but seems to work properly in
my testing.

Since last sending this out, I was able to do some further performance
analysis on the extra costs of deactivating all of the pages in the
range when marking a range volatile, and the overhead is significant.
Hopefully folks have some suggestions on how to maybe reduce this.

Given that the shrinker approach is much faster, I've been also
looking at other alternatives: One idea I believe suggested by 
Minchan (although I may have misunderstood) was to provide a
separate list to purge volatile ranges before we do the lru
shrinking. So I've considered adding a "early_shrinker" list,
which callbacks can be registered against and these shrinkers are
called prior to lru shrinking. They still would be numa-unaware,
but would still allow for volatile ranges to be zapped before
we swap anything out. I realize this isn't what Minchan recently
proposed (basically adding a new per-zone ERECLAIM LRU list), but
my worry with the ERECLAIM list idea is we still have to touch the
pages individually when marking them volatile. If folks are curious
about this approach, I can post it as well, but I wanted to try to
get further review on my current approach before jumping off onto
another tangent.

What's new in this iteration:
* At Michel Lespinasse's and Dmitry Adamushko's earlier suggestion
  I dropped the generic interval tree implementation to use the
  prio_tree code which seems to function fine for my needs.
* I added some pagevec batching in the activating/deactivating
  paths which helped improve performance of non-shrinker method,
  but there's still a ways to go.
* Minor cleanups.

Thanks again for the feedback so far!


(Also, given the number of revisions this patchset, and previous
attempts, have been through the CC list is getting crazy long,
so feel free to ping me privately and I'll drop you if you're
really not wanting to be flooded every week or so with these
patches as I iterate)

CC: Andrew Morton 
CC: Android Kernel Team 
CC: Robert Love 
CC: Mel Gorman 
CC: Hugh Dickins 
CC: Dave Hansen 
CC: Rik van Riel 
CC: Dmitry Adamushko 
CC: Dave Chinner 
CC: Neil Brown 
CC: Andrea Righi 
CC: Aneesh Kumar K.V 
CC: Taras Glek 
CC: Mike Hommey 
CC: Jan Kara <[email protected]>
CC: KOSAKI Motohiro 
CC: Michel Lespinasse <[email protected]>
CC: Minchan Kim 
CC: [email protected] 

John Stultz (5):
  [RFC] Add volatile range management code
  [RFC] ashmem: Convert ashmem to use volatile ranges
  [RFC][HACK] tmpfs: Purge volatile ranges on writepage instead of
    using shrinker
  [RFC][HACK] mm: Change memory management of anonymous pages on
    swapless systems

 drivers/staging/android/ashmem.c |  331 +--------------------------
 fs/open.c                        |    3 +-
 include/linux/falloc.h           |    7 +-
 include/linux/pagevec.h          |    5 +-
 include/linux/swap.h             |   23 +-
 include/linux/volatile.h         |   40 ++++
 mm/Makefile                      |    2 +-
 mm/shmem.c                       |  123 +++++++++-
 mm/swap.c                        |   13 +-
 mm/vmscan.c                      |    9 -
 mm/volatile.c                    |  467
 11 files changed, 673 insertions(+), 350 deletions(-)
 create mode 100644 include/linux/volatile.h
 create mode 100644 mm/volatile.c


To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email:  email@kvack.org 
CD: 46ms