vmscan: ZVC updates in shrink_active_list() can be done once
Subsystems (3)
PATCH 1/1 vmscan: ZVC updates in shrink_active_list() can be done once
This effectively lifts the unit of nr_inactive_* and pgdeactivate updates from PAGEVEC_SIZE=14 to SWAP_CLUSTER_MAX=32.
--- mm/vmscan.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
mm/vmscan.c +3 -8
@@ -1228,7 +1228,6 @@ static void shrink_active_list(unsigned struct scan_control *sc, int priority, int file) { unsigned long pgmoved; -int pgdeactivate =0 ;unsigned long pgscanned;LIST_HEAD (l_hold);/* The pages which were snipped off */ LIST_HEAD (l_inactive);
@@ -1257,7 +1256,7 @@ static void shrink_active_list(unsigned__mod_zone_page_state (zone,NR_ACTIVE_ANON , -pgmoved);spin_unlock_irq (&zone->lru_lock); - pgmoved =0 ; + pgmoved =0 ;/* count referenced (mapping) mapped pages */ while (!list_empty (&l_hold)) {cond_resched (); page =lru_to_page (&l_hold);
@@ -1291,7 +1290,7 @@ static void shrink_active_list(unsigned*/ reclaim_stat->recent_rotated[!!file] += pgmoved; - pgmoved =0 ; + pgmoved =0 ;/* count pages moved to inactive list */ while (!list_empty (&l_inactive)) { page =lru_to_page (&l_inactive);prefetchw_prev_lru_page (page, &l_inactive, flags);
@@ -1304,10 +1303,7 @@ static void shrink_active_list(unsignedmem_cgroup_add_lru_list (page, lru); pgmoved++;if (!pagevec_add (&pvec, page)) { -__mod_zone_page_state (zone,NR_LRU_BASE + lru, pgmoved);spin_unlock_irq (&zone->lru_lock); - pgdeactivate += pgmoved; - pgmoved =0 ;if (buffer_heads_over_limit)pagevec_strip (&pvec);__pagevec_release (&pvec);
@@ -1315,9 +1311,8 @@ static void shrink_active_list(unsigned } }__mod_zone_page_state (zone,NR_LRU_BASE + lru, pgmoved); - pgdeactivate += pgmoved;__count_zone_vm_events (PGREFILL , zone, pgscanned); -__count_vm_events (PGDEACTIVATE , pgdeactivate); +__count_vm_events (PGDEACTIVATE , pgmoved);spin_unlock_irq (&zone->lru_lock);if (buffer_heads_over_limit)pagevec_strip (&pvec);
--
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: <a href=mailto:"[email protected]"> [email protected] </a>
This fine-grained ZVC update in shrink_active_list was made for determination problem of the dirty ratio(c878538598d1e7ab41ecc0de8894e34e2fdef630).
The 32 page reclaim time in normal reclaim situation is too short to change current VM behavior.
So I think this make sense to me.
Quoted 65 lines · Wu Fengguang
This effectively lifts the unit of nr_inactive_* and pgdeactivate updates from PAGEVEC_SIZE=14 to SWAP_CLUSTER_MAX=32.
Signed-off-by Wu Fengguang <[email protected]>---
mm/vmscan.c | 11 +++--------1 file changed, 3 insertions(+), 8 deletions(-)mm/vmscan.c +0
-1@@ -1228,7 +1228,6 @@ static void shrink_active_list(unsigned struct scan_control *sc, int priority, int file) { unsigned long pgmoved; - int pgdeactivate = 0; unsigned long pgscanned;LIST_HEAD(l_hold); /* The pages which were snipped off */
LIST_HEAD(l_inactive);mm/vmscan.c +3
-8@@ -1257,7 +1256,7 @@ static void shrink_active_list(unsigned __mod_zone_page_state(zone, NR_ACTIVE_ANON, -pgmoved); spin_unlock_irq(&zone->lru_lock); - pgmoved = 0; + pgmoved = 0; /* count referenced (mapping) mapped pages */ while (!list_empty(&l_hold)) { cond_resched(); page = lru_to_page(&l_hold);@@ -1291,7 +1290,7 @@ static void shrink_active_list(unsigned*/ reclaim_stat->recent_rotated[!!file] += pgmoved; - pgmoved = 0; + pgmoved = 0; /* count pages moved to inactive list */ while (!list_empty(&l_inactive)) { page = lru_to_page(&l_inactive); prefetchw_prev_lru_page(page, &l_inactive, flags);@@ -1304,10 +1303,7 @@ static void shrink_active_list(unsigned mem_cgroup_add_lru_list(page, lru); pgmoved++; if (!pagevec_add(&pvec, page)) { - __mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved); spin_unlock_irq(&zone->lru_lock); - pgdeactivate += pgmoved; - pgmoved = 0; if (buffer_heads_over_limit) pagevec_strip(&pvec); __pagevec_release(&pvec);@@ -1315,9 +1311,8 @@ static void shrink_active_list(unsigned } } __mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved); - pgdeactivate += pgmoved; __count_zone_vm_events(PGREFILL, zone, pgscanned); - __count_vm_events(PGDEACTIVATE, pgdeactivate); + __count_vm_events(PGDEACTIVATE, pgmoved); spin_unlock_irq(&zone->lru_lock); if (buffer_heads_over_limit) pagevec_strip(&pvec); --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: <a href=mailto:"[email protected]"> [email protected] </a>
Signature · 8 lines
Thanks, Minchan Kim -- 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: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 4 lines · Wu Fengguang
This effectively lifts the unit of nr_inactive_* and pgdeactivate updates from PAGEVEC_SIZE=14 to SWAP_CLUSTER_MAX=32.
Signed-off-by Wu Fengguang <[email protected]>
Signature · 7 lines
All rights reversed. -- 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: <a href=mailto:"[email protected]"> [email protected] </a>
Johannes Weiner
maintainerQuoted 2 lines · Wu Fengguang
This effectively lifts the unit of nr_inactive_* and pgdeactivate updates from PAGEVEC_SIZE=14 to SWAP_CLUSTER_MAX=32.
For __zone_reclaim() it will be >= SWAP_CLUSTER_MAX, depending on the allocation order.
Hannes
--
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: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 6 lines · Johannes Weiner
Quoted 2 lines · Wu Fengguang
This effectively lifts the unit of nr_inactive_* and pgdeactivate updates from PAGEVEC_SIZE=14 to SWAP_CLUSTER_MAX=32.
For
__zone_reclaim()it will be >=SWAP_CLUSTER_MAX, depending on the allocation order.
Thanks for pointing out this. Changelog updated accordingly.
I'd expect its impact to be negletable, because 1024 pages are not extraordinary large. But sure, that's much larger than 125 pages
- the maximum zone stats update threshold(zone_pcp->stat_threshold).
Thanks,
Fengguang
---
vmscan: ZVC updates in shrink_active_list() can be done once
This effectively lifts the unit of updates to nr_inactive_* and pgdeactivate from PAGEVEC_SIZE=14 to SWAP_CLUSTER_MAX=32, or MAX_ORDER_NR_PAGES=1024 for reclaim_zone().
--- mm/vmscan.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
mm/vmscan.c +3 -8
@@ -1228,7 +1228,6 @@ static void shrink_active_list(unsigned struct scan_control *sc, int priority, int file) { unsigned long pgmoved; -int pgdeactivate =0 ;unsigned long pgscanned;LIST_HEAD (l_hold);/* The pages which were snipped off */ LIST_HEAD (l_inactive);
@@ -1257,7 +1256,7 @@ static void shrink_active_list(unsigned__mod_zone_page_state (zone,NR_ACTIVE_ANON , -pgmoved);spin_unlock_irq (&zone->lru_lock); - pgmoved =0 ; + pgmoved =0 ;/* count referenced (mapping) mapped pages */ while (!list_empty (&l_hold)) {cond_resched (); page =lru_to_page (&l_hold);
@@ -1291,7 +1290,7 @@ static void shrink_active_list(unsigned*/ reclaim_stat->recent_rotated[!!file] += pgmoved; - pgmoved =0 ; + pgmoved =0 ;/* count pages moved to inactive list */ while (!list_empty (&l_inactive)) { page =lru_to_page (&l_inactive);prefetchw_prev_lru_page (page, &l_inactive, flags);
@@ -1304,10 +1303,7 @@ static void shrink_active_list(unsignedmem_cgroup_add_lru_list (page, lru); pgmoved++;if (!pagevec_add (&pvec, page)) { -__mod_zone_page_state (zone,NR_LRU_BASE + lru, pgmoved);spin_unlock_irq (&zone->lru_lock); - pgdeactivate += pgmoved; - pgmoved =0 ;if (buffer_heads_over_limit)pagevec_strip (&pvec);__pagevec_release (&pvec);
@@ -1315,9 +1311,8 @@ static void shrink_active_list(unsigned } }__mod_zone_page_state (zone,NR_LRU_BASE + lru, pgmoved); - pgdeactivate += pgmoved;__count_zone_vm_events (PGREFILL , zone, pgscanned); -__count_vm_events (PGDEACTIVATE , pgdeactivate); +__count_vm_events (PGDEACTIVATE , pgmoved);spin_unlock_irq (&zone->lru_lock);if (buffer_heads_over_limit)pagevec_strip (&pvec);
--
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: <a href=mailto:"[email protected]"> [email protected] </a>