linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RFC][PATCH] Simply Break in throttle_vm_writeout to prevent NetworkStorageDeadlock
@ 2008-09-01  2:28 Michael Yao
  0 siblings, 0 replies; only message in thread
From: Michael Yao @ 2008-09-01  2:28 UTC (permalink / raw)
  To: linux-mm

Dear List,

I have a NAS server with kernel 2.6.24.2 which has a memory deadlock
issue, and I found two related pages here:

REF1:
Storage over network has a deadlock problem, where it can take memory
to free memory.
http://linux-mm.org/NetworkStorageDeadlock

REF2:
[RFC] [PATCH] A clean approach to writeout throttling
http://marc.info/?l=linux-kernel&m=119689957014639&w=2

At first I tried the patch in REF2 (
http://marc.info/?l=linux-kernel&m=119689957014639&w=2 ),
but ran into a problem of XFS, described here
http://code.google.com/p/zumastor/issues/detail?id=146&q=xfs

The sysrq-t trace shows that many processes locked in throttle_vm_writeout,
and smbd seems to be blocked at balance_dirty_pages:

kswapd0       D 00000000     0   101      2
Call Trace:
[cfa37c40] [0000000a] 0xa (unreliable)
[cfa37d00] [c0009214] __switch_to+0x5c/0x74
[cfa37d20] [c0288a9c] schedule+0x2e8/0x320
[cfa37d50] [c0288f90] schedule_timeout+0x90/0xc0
[cfa37d90] [c0288eac] io_schedule_timeout+0x30/0x54
[cfa37db0] [c00458ec] congestion_wait+0x70/0x98
[cfa37e00] [c003f7a8] throttle_vm_writeout+0x74/0x94
[cfa37e20] [c004403c] shrink_zone+0x954/0x96c
[cfa37f20] [c004458c] kswapd+0x2d4/0x400
[cfa37fd0] [c0027f84] kthread+0x48/0x84
[cfa37ff0] [c000461c] kernel_thread+0x44/0x60

smbd          D 0fa6a450     0 11693  11511
Call Trace:
[cc789ab0] [c0007324] do_softirq+0x3c/0x54 (unreliable)
[cc789b70] [c0009214] __switch_to+0x5c/0x74
[cc789b90] [c0288a9c] schedule+0x2e8/0x320
[cc789bc0] [c0288f90] schedule_timeout+0x90/0xc0
[cc789c00] [c0288eac] io_schedule_timeout+0x30/0x54
[cc789c20] [c00458ec] congestion_wait+0x70/0x98
[cc789c70] [c003f684] balance_dirty_pages_ratelimited_nr+0x1a0/0x250
[cc789ce0] [c003acfc] generic_file_buffered_write+0x1bc/0x5d4
[cc789d80] [d1bbf874] xfs_write+0x4f4/0x748 [xfs]
[cc789e20] [d1bbab2c] xfs_file_aio_write+0x6c/0x7c [xfs]
[cc789e30] [c005c760] do_sync_write+0xb8/0x10c
[cc789ef0] [c005c87c] vfs_write+0xc8/0x15c
[cc789f10] [c005cb24] sys_pwrite64+0x64/0x98
[cc789f40] [c00022e0] ret_from_syscall+0x0/0x3c


My first thought is to break the infinite loop in throttle_vm_writeout
after 200 seconds and see what will happen after bailing out the loop.
Surprisingly, it solves the Deadlock problem after I break the loop,
so I did not try the patch in REF1 ( http://lwn.net/Articles/146652/
).

Maybe the reason is my /etc/sysctl.conf?
vm.min_free_kbytes=8192
vm.swap_token_timeout=30
vm.vfs_cache_pressure=300
vm.dirty_background_ratio=1
vm.dirty_ratio=1

Any comments is appreciated, thanks.

Michael Yao



diff -ur linux-2.6.24.2/mm/page-writeback.c
linux-2.6.24.2.my/mm/page-writeback.c
--- linux-2.6.24.2/mm/page-writeback.c	2008-09-01 09:35:58.000000000 +0800
+++ linux-2.6.24.2.my/mm/page-writeback.c	2008-09-01 09:38:21.000000000 +0800
@@ -508,7 +508,9 @@
 {
 	long background_thresh;
 	long dirty_thresh;
+	unsigned long start;

+        start = jiffies;
         for ( ; ; ) {
 		get_dirty_limits(&background_thresh, &dirty_thresh, NULL, NULL);

@@ -530,6 +532,12 @@
 		 */
 		if ((gfp_mask & (__GFP_FS|__GFP_IO)) != (__GFP_FS|__GFP_IO))
 			break;
+		/* break the loop after X seconds  */		
+		if (time_after(jiffies, (start + 200*HZ))) {
+			printk("[%lu] break throttle_vm_writeout: background_thresh=%ld
dirty_thresh=%ld NR_UNSTABLE_NFS=%ld NR_WRITEBACK=%ld\n",
+			jiffies - start, background_thresh, dirty_thresh,
global_page_state(NR_UNSTABLE_NFS), global_page_state(NR_WRITEBACK));
+			break;
+		}
         }
 }

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-09-01  2:28 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-01  2:28 [RFC][PATCH] Simply Break in throttle_vm_writeout to prevent NetworkStorageDeadlock Michael Yao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox