mm: use global_dirty_limit in throttle_vm_writeout()
Subsystems (2)
PATCH 1/1 mm: use global_dirty_limit in throttle_vm_writeout()
When starting a memory hog task, a desktop box w/o swap is found to go unresponsive for a long time. It's solely caused by lots of congestion waits in throttle_vm_writeout():
gnome-system-mo-4201 553.073384: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 gnome-system-mo-4201 553.073386: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000
gtali-4237 553.080377: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1
gtali-4237 553.080378: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000
Xorg-3483 553.103375: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1
Xorg-3483 553.103377: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000The root cause is, the dirty threshold is knocked down a lot by the memory hog task. Fixed by using global_dirty_limit which decreases gradually on such events and can guarantee we stay above (the also decreasing) nr_dirty in the progress of following down to the new dirty threshold.
--- mm/page-writeback.c | 1 + 1 file changed, 1 insertion(+)
mm/page-writeback.c +1 -0
@@ -1472,6 +1472,7 @@ void throttle_vm_writeout(gfp_t gfp_maskfor ( ; ; ) {global_dirty_limits (&background_thresh, &dirty_thresh); + dirty_thresh =hard_dirty_limit (dirty_thresh);/* * Boost the allowable dirty threshold a bit for page
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 11 lines · Fengguang Wu
When starting a memory hog task, a desktop box w/o swap is found to go unresponsive for a long time. It's solely caused by lots of congestion waits in
throttle_vm_writeout():gnome-system-mo-4201 553.073384:
congestion_wait:throttle_vm_writeout+0x70/0x7fshrink_mem_cgroup_zone+0x48f/0x4a1gnome-system-mo-4201 553.073386:writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000gtali-4237 553.080377: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 gtali-4237 553.080378: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000 Xorg-3483 553.103375: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 Xorg-3483 553.103377: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000
Quoted 7 lines
The root cause is, the dirty threshold is knocked down a lot by the memory hog task. Fixed by using
global_dirty_limitwhich decreases gradually on such events and can guarantee we stay above (the also decreasing)nr_dirtyin the progress of following down to the new dirty threshold.Signed-off-by Fengguang Wu<[email protected]>
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 11 lines · Fengguang Wu
When starting a memory hog task, a desktop box w/o swap is found to go unresponsive for a long time. It's solely caused by lots of congestion waits in
throttle_vm_writeout():gnome-system-mo-4201 553.073384:
congestion_wait:throttle_vm_writeout+0x70/0x7fshrink_mem_cgroup_zone+0x48f/0x4a1gnome-system-mo-4201 553.073386:writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000gtali-4237 553.080377: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 gtali-4237 553.080378: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000 Xorg-3483 553.103375: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 Xorg-3483 553.103377: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000
Quoted 7 lines
The root cause is, the dirty threshold is knocked down a lot by the memory hog task. Fixed by using
global_dirty_limitwhich decreases gradually on such events and can guarantee we stay above (the also decreasing)nr_dirtyin the progress of following down to the new dirty threshold.Signed-off-by Fengguang Wu <[email protected]>
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Hi Wu,
Sorry for late response.
I have a question.
Quoted 6 lines · Fengguang Wu
When starting a memory hog task, a desktop box w/o swap is found to go unresponsive for a long time. It's solely caused by lots of congestion waits in
throttle_vm_writeout():gnome-system-mo-4201 553.073384:
congestion_wait:throttle_vm_writeout+0x70/0x7fshrink_mem_cgroup_zone+0x48f/0x4a1gnome-system-mo-4201 553.073386:writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000
Quoted 7 lines
gtali-4237 553.080377: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 gtali-4237 553.080378: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000 Xorg-3483 553.103375: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1 Xorg-3483 553.103377: writeback_congestion_wait: usec_timeout=100000 usec_delayed=100000The root cause is, the dirty threshold is knocked down a lot by the memory hog task. Fixed by using
global_dirty_limitwhich decreases
AFAIUC, memory hog task, you mean it consumes lots of anon pages, not file-backed pages. So global_dirty_limits would get small available_memory by global_reclaimable_pages so that it ends up dirty threshold is knocked down.
Could you confirm my understanding?
Thanks.
Quoted 12 lines
gradually on such events and can guarantee we stay above (the also decreasing)
nr_dirtyin the progress of following down to the new dirty threshold.Signed-off-by Fengguang Wu <[email protected]>--- mm/page-writeback.c | 1 + 1 file changed, 1 insertion(+)
mm/page-writeback.c void throttle_vm_writeout(gfp_t gfp_mask · line 1478
Quoted 7 lines
mm/page-writeback.c +1
-0@@ -1472,6 +1472,7 @@ void throttle_vm_writeout(gfp_t gfp_maskfor ( ; ; ) {global_dirty_limits (&background_thresh, &dirty_thresh); + dirty_thresh =hard_dirty_limit (dirty_thresh);/* * Boost the allowable dirty threshold a bit for page
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>