search for: page_movable_mapcount_value

Displaying 20 results from an estimated 25 matches for "page_movable_mapcount_value".

2016 Apr 05
1
[PATCH v3 04/16] mm/balloon: use general movable page feature into balloon
...redhat.com> > Cc: Konstantin Khlebnikov <koct9i at gmail.com> > Signed-off-by: Gioh Kim <gurugio at hanmail.net> > Signed-off-by: Minchan Kim <minchan at kernel.org> I'm not familiar with the inode and pseudofs stuff, so just some things I noticed: > -#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-256) > +#define PAGE_BALLOON_MAPCOUNT_VALUE PAGE_MOVABLE_MAPCOUNT_VALUE > > static inline int PageMovable(struct page *page) > { > - return ((test_bit(PG_movable, &(page)->flags) && > - atomic_read(&page-&g...
2016 Apr 05
1
[PATCH v3 04/16] mm/balloon: use general movable page feature into balloon
...redhat.com> > Cc: Konstantin Khlebnikov <koct9i at gmail.com> > Signed-off-by: Gioh Kim <gurugio at hanmail.net> > Signed-off-by: Minchan Kim <minchan at kernel.org> I'm not familiar with the inode and pseudofs stuff, so just some things I noticed: > -#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-256) > +#define PAGE_BALLOON_MAPCOUNT_VALUE PAGE_MOVABLE_MAPCOUNT_VALUE > > static inline int PageMovable(struct page *page) > { > - return ((test_bit(PG_movable, &(page)->flags) && > - atomic_read(&page-&g...
2016 Mar 21
0
[PATCH v2 14/18] mm/balloon: use general movable page feature into balloon
...flags.h index 3885064641c4..4853e0487175 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -599,50 +599,58 @@ static inline void __ClearPageBuddy(struct page *page) extern bool is_free_buddy_page(struct page *page); -#define PAGE_BALLOON_MAPCOUNT_VALUE (-256) +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-256) +#define PAGE_BALLOON_MAPCOUNT_VALUE PAGE_MOVABLE_MAPCOUNT_VALUE -static inline int PageBalloon(struct page *page) +static inline int PageMovable(struct page *page) { - return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE; + return (test_bit(PG_movable, &(page)-&...
2016 Apr 04
1
[PATCH v3 02/16] mm/compaction: support non-lru movable page migration
...lse positive on a PG_reclaim page? Can we rely on >> PG_reclaim always (and without races) implying PageLRU() so that we >> don't even attempt isolate_movable_page()? > > For now, we shouldn't have such a false positive because PageMovable > checks page->_mapcount == PAGE_MOVABLE_MAPCOUNT_VALUE as well as PG_movable > under PG_lock. > > But I read your question about user-mapped drvier pages so we cannot > use _mapcount anymore so I will find another thing. A option is this. > > static inline int PageMovable(struct page *page) > { > int ret = 0; >...
2016 Apr 04
1
[PATCH v3 02/16] mm/compaction: support non-lru movable page migration
...lse positive on a PG_reclaim page? Can we rely on >> PG_reclaim always (and without races) implying PageLRU() so that we >> don't even attempt isolate_movable_page()? > > For now, we shouldn't have such a false positive because PageMovable > checks page->_mapcount == PAGE_MOVABLE_MAPCOUNT_VALUE as well as PG_movable > under PG_lock. > > But I read your question about user-mapped drvier pages so we cannot > use _mapcount anymore so I will find another thing. A option is this. > > static inline int PageMovable(struct page *page) > { > int ret = 0; >...
2016 Mar 21
1
[PATCH v2 14/18] mm/balloon: use general movable page feature into balloon
Hi Minchan, [auto build test ERROR on next-20160318] [cannot apply to v4.5-rc7 v4.5-rc6 v4.5-rc5 v4.5] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Minchan-Kim/Support-non-lru-page-migration/20160321-143339 config: x86_64-randconfig-x000-201612 (attached as .config) reproduce: # save
2016 Mar 21
1
[PATCH v2 14/18] mm/balloon: use general movable page feature into balloon
Hi Minchan, [auto build test ERROR on next-20160318] [cannot apply to v4.5-rc7 v4.5-rc6 v4.5-rc5 v4.5] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Minchan-Kim/Support-non-lru-page-migration/20160321-143339 config: x86_64-randconfig-x000-201612 (attached as .config) reproduce: # save
2016 Mar 30
0
[PATCH v3 04/16] mm/balloon: use general movable page feature into balloon
...M_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); - atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE); -} - -static inline void __ClearPageBalloon(struct page *page) -{ - VM_BUG_ON_PAGE(!PageBalloon(page), page); - atomic_set(&page->_mapcount, -1); -} - -#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-256) +#define PAGE_BALLOON_MAPCOUNT_VALUE PAGE_MOVABLE_MAPCOUNT_VALUE static inline int PageMovable(struct page *page) { - return ((test_bit(PG_movable, &(page)->flags) && - atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOU...
2016 Apr 01
2
[PATCH v3 02/16] mm/compaction: support non-lru movable page migration
...t races) implying PageLRU() so that we don't even attempt isolate_movable_page()? > }; > > #ifndef __GENERATING_BOUNDS_H > @@ -614,6 +618,33 @@ static inline void __ClearPageBalloon(struct page *page) > atomic_set(&page->_mapcount, -1); > } > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) IIRC this was what Gioh's previous attempts used instead of PG_movable? Is it still needed? Doesn't it prevent a driver providing movable *and* mapped pages? If it's to distinguish the PG_reclaim alias that I mention above, it seems like an overkill to me. Why would be need bo...
2016 Apr 01
2
[PATCH v3 02/16] mm/compaction: support non-lru movable page migration
...t races) implying PageLRU() so that we don't even attempt isolate_movable_page()? > }; > > #ifndef __GENERATING_BOUNDS_H > @@ -614,6 +618,33 @@ static inline void __ClearPageBalloon(struct page *page) > atomic_set(&page->_mapcount, -1); > } > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) IIRC this was what Gioh's previous attempts used instead of PG_movable? Is it still needed? Doesn't it prevent a driver providing movable *and* mapped pages? If it's to distinguish the PG_reclaim alias that I mention above, it seems like an overkill to me. Why would be need bo...
2016 Mar 22
2
[PATCH v2 13/18] mm/compaction: support non-lru movable page migration
...movable pages */ > + PG_movable = PG_reclaim, > + PG_isolated = PG_owner_priv_1, > }; > > #ifndef __GENERATING_BOUNDS_H > @@ -614,6 +618,31 @@ static inline void __ClearPageBalloon(struct page *page) > atomic_set(&page->_mapcount, -1); > } > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > + > +static inline int PageMovable(struct page *page) > +{ > + return ((test_bit(PG_movable, &(page)->flags) && > + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) > + || PageBalloon(page)); > +} > + > +/* > + * Caller sho...
2016 Mar 22
2
[PATCH v2 13/18] mm/compaction: support non-lru movable page migration
...movable pages */ > + PG_movable = PG_reclaim, > + PG_isolated = PG_owner_priv_1, > }; > > #ifndef __GENERATING_BOUNDS_H > @@ -614,6 +618,31 @@ static inline void __ClearPageBalloon(struct page *page) > atomic_set(&page->_mapcount, -1); > } > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > + > +static inline int PageMovable(struct page *page) > +{ > + return ((test_bit(PG_movable, &(page)->flags) && > + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) > + || PageBalloon(page)); > +} > + > +/* > + * Caller sho...
2016 Mar 23
1
[PATCH v2 13/18] mm/compaction: support non-lru movable page migration
...priv_1, > > > }; > > > > > > #ifndef __GENERATING_BOUNDS_H > > > @@ -614,6 +618,31 @@ static inline void __ClearPageBalloon(struct page *page) > > > atomic_set(&page->_mapcount, -1); > > > } > > > > > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > > > + > > > +static inline int PageMovable(struct page *page) > > > +{ > > > + return ((test_bit(PG_movable, &(page)->flags) && > > > + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) > > > + || Pag...
2016 Mar 23
1
[PATCH v2 13/18] mm/compaction: support non-lru movable page migration
...priv_1, > > > }; > > > > > > #ifndef __GENERATING_BOUNDS_H > > > @@ -614,6 +618,31 @@ static inline void __ClearPageBalloon(struct page *page) > > > atomic_set(&page->_mapcount, -1); > > > } > > > > > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > > > + > > > +static inline int PageMovable(struct page *page) > > > +{ > > > + return ((test_bit(PG_movable, &(page)->flags) && > > > + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) > > > + || Pag...
2016 Apr 04
0
[PATCH v3 02/16] mm/compaction: support non-lru movable page migration
...What if it's a false positive on a PG_reclaim page? Can we rely on > PG_reclaim always (and without races) implying PageLRU() so that we > don't even attempt isolate_movable_page()? For now, we shouldn't have such a false positive because PageMovable checks page->_mapcount == PAGE_MOVABLE_MAPCOUNT_VALUE as well as PG_movable under PG_lock. But I read your question about user-mapped drvier pages so we cannot use _mapcount anymore so I will find another thing. A option is this. static inline int PageMovable(struct page *page) { int ret = 0; struct address_space *mapping; st...
2016 Mar 21
0
[PATCH v2 13/18] mm/compaction: support non-lru movable page migration
...*/ PG_double_map = PG_private_2, + + /* non-lru movable pages */ + PG_movable = PG_reclaim, + PG_isolated = PG_owner_priv_1, }; #ifndef __GENERATING_BOUNDS_H @@ -614,6 +618,31 @@ static inline void __ClearPageBalloon(struct page *page) atomic_set(&page->_mapcount, -1); } +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) + +static inline int PageMovable(struct page *page) +{ + return ((test_bit(PG_movable, &(page)->flags) && + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) + || PageBalloon(page)); +} + +/* + * Caller should hold a PG_lock */ +static inline void __SetPag...
2016 Mar 11
0
[PATCH v1 02/19] mm/compaction: support non-lru movable page migration
...*/ PG_double_map = PG_private_2, + + /* non-lru movable pages */ + PG_movable = PG_reclaim, + PG_isolated = PG_owner_priv_1, }; #ifndef __GENERATING_BOUNDS_H @@ -612,6 +616,31 @@ static inline void __ClearPageBalloon(struct page *page) atomic_set(&page->_mapcount, -1); } +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) + +static inline int PageMovable(struct page *page) +{ + return ((test_bit(PG_movable, &(page)->flags) && + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) + || PageBalloon(page)); +} + +static inline void __SetPageMovable(struct page *page) +{ + WARN_ON...
2016 Mar 30
0
[PATCH v3 02/16] mm/compaction: support non-lru movable page migration
...*/ PG_double_map = PG_private_2, + + /* non-lru movable pages */ + PG_movable = PG_reclaim, + PG_isolated = PG_owner_priv_1, }; #ifndef __GENERATING_BOUNDS_H @@ -614,6 +618,33 @@ static inline void __ClearPageBalloon(struct page *page) atomic_set(&page->_mapcount, -1); } +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) + +static inline int PageMovable(struct page *page) +{ + return ((test_bit(PG_movable, &(page)->flags) && + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) + || PageBalloon(page)); +} + +/* Caller should hold a PG_lock */ +static inline void __SetPageMov...
2016 Mar 22
0
[PATCH v2 13/18] mm/compaction: support non-lru movable page migration
...aim, > > + PG_isolated = PG_owner_priv_1, > > }; > > > > #ifndef __GENERATING_BOUNDS_H > > @@ -614,6 +618,31 @@ static inline void __ClearPageBalloon(struct page *page) > > atomic_set(&page->_mapcount, -1); > > } > > > > +#define PAGE_MOVABLE_MAPCOUNT_VALUE (-255) > > + > > +static inline int PageMovable(struct page *page) > > +{ > > + return ((test_bit(PG_movable, &(page)->flags) && > > + atomic_read(&page->_mapcount) == PAGE_MOVABLE_MAPCOUNT_VALUE) > > + || PageBalloon(page)); > > +}...
2016 Mar 30
33
[PATCH v3 00/16] Support non-lru page migration
Recently, I got many reports about perfermance degradation in embedded system(Android mobile phone, webOS TV and so on) and failed to fork easily. The problem was fragmentation caused by zram and GPU driver pages. Their pages cannot be migrated so compaction cannot work well, either so reclaimer ends up shrinking all of working set pages. It made system very slow and even to fail to fork easily.