Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1444297
| From | Mel Gorman <mgorman@techsingularity.net> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 3/5] mm, pagevec: Release/reacquire lru_lock on pgdat change |
| Date | 2016-07-15 15:10 +0200 |
| Message-ID | <rVb2r-7js-33@gated-at.bofh.it> (permalink) |
| References | <rVb2q-7js-21@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
With node-lru, the locking is based on the pgdat. Previously it was
required that a pagevec drain released one zone lru_lock and acquired
another zone lru_lock on every zone change. Now, it's only necessary if
the node changes. The end-result is fewer lock release/acquires if the
pages are all on the same node but in different zones.
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
---
mm/swap.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/mm/swap.c b/mm/swap.c
index 77af473635fe..75c63bb2a1da 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -179,26 +179,26 @@ static void pagevec_lru_move_fn(struct pagevec *pvec,
void *arg)
{
int i;
- struct zone *zone = NULL;
+ struct pglist_data *pgdat = NULL;
struct lruvec *lruvec;
unsigned long flags = 0;
for (i = 0; i < pagevec_count(pvec); i++) {
struct page *page = pvec->pages[i];
- struct zone *pagezone = page_zone(page);
+ struct pglist_data *pagepgdat = page_pgdat(page);
- if (pagezone != zone) {
- if (zone)
- spin_unlock_irqrestore(zone_lru_lock(zone), flags);
- zone = pagezone;
- spin_lock_irqsave(zone_lru_lock(zone), flags);
+ if (pagepgdat != pgdat) {
+ if (pgdat)
+ spin_unlock_irqrestore(&pgdat->lru_lock, flags);
+ pgdat = pagepgdat;
+ spin_lock_irqsave(&pgdat->lru_lock, flags);
}
- lruvec = mem_cgroup_page_lruvec(page, zone->zone_pgdat);
+ lruvec = mem_cgroup_page_lruvec(page, pgdat);
(*move_fn)(page, lruvec, arg);
}
- if (zone)
- spin_unlock_irqrestore(zone_lru_lock(zone), flags);
+ if (pgdat)
+ spin_unlock_irqrestore(&pgdat->lru_lock, flags);
release_pages(pvec->pages, pvec->nr, pvec->cold);
pagevec_reinit(pvec);
}
--
2.6.4
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
[PATCH 3/5] mm, pagevec: Release/reacquire lru_lock on pgdat change Mel Gorman <mgorman@techsingularity.net> - 2016-07-15 15:10 +0200 Re: [PATCH 3/5] mm, pagevec: Release/reacquire lru_lock on pgdat change Minchan Kim <minchan@kernel.org> - 2016-07-15 18:00 +0200 Re: [PATCH 3/5] mm, pagevec: Release/reacquire lru_lock on pgdat change Johannes Weiner <hannes@cmpxchg.org> - 2016-07-18 18:30 +0200
csiph-web