Re: [RFC][PATCH -mm 3/3] mm,vmscan: evict inactive file pages first

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Howdy Rik,

On Wed, Aug 08, 2012 at 05:49:04PM -0400, Rik van Riel wrote:
> @@ -1687,6 +1700,14 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
>  		reclaim_stat->recent_rotated[1] /= 2;
>  	}
>  
> +	/* Lots of inactive file pages? Reclaim those only. */
> +	if (reclaim_file_only(lruvec, sc, anon, file)) {
> +		fraction[0] = 0;
> +		fraction[1] = 1;
> +		denominator = 1;
> +		goto out;
> +	}
> +

This hunk causes a &zone->lru_lock spinlock lockup down this path:
 shrink_zone()->shrink_lruvec()->shrink_list()->shrink_inactive_list()

I could trigger it by doing a Kernel RPM install on a 2GB guest, for all shots.
---8<---
...
============================================= 
[ INFO: possible recursive locking detected ]
3.6.0-rc1+ #197 Not tainted
---------------------------------------------
kswapd0/29 is trying to acquire lock:
 (&(&zone->lru_lock)->rlock){....-.}, at: [<ffffffff81167b34>]
shrink_inactive_list+0xd4/0x4b0
but task is already holding lock:
 (&(&zone->lru_lock)->rlock){....-.}, at: [<ffffffff81168037>]
shrink_lruvec+0x127/0x630
         
other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&(&zone->lru_lock)->rlock);
  lock(&(&zone->lru_lock)->rlock);

 *** DEADLOCK ***

 May be due to missing lock nesting notation

1 lock held by kswapd0/29:
 #0:  (&(&zone->lru_lock)->rlock){....-.}, at: [<ffffffff81168037>]
shrink_lruvec+0x127/0x630

stack backtrace:
Pid: 29, comm: kswapd0 Not tainted 3.6.0-rc1+ #197
Call Trace:
 [<ffffffff810cedda>] __lock_acquire+0x125a/0x1660
 [<ffffffff8108a618>] ? __kernel_text_address+0x58/0x80
 [<ffffffff810cf27f>] lock_acquire+0x9f/0x190
 [<ffffffff81167b34>] ? shrink_inactive_list+0xd4/0x4b0
 [<ffffffff8169c9dd>] _raw_spin_lock_irq+0x4d/0x60
 [<ffffffff81167b34>] ? shrink_inactive_list+0xd4/0x4b0
 [<ffffffff811612cf>] ? lru_add_drain+0x2f/0x40
 [<ffffffff81167b34>] shrink_inactive_list+0xd4/0x4b0
 [<ffffffff81168037>] ? shrink_lruvec+0x127/0x630
 [<ffffffff81168395>] shrink_lruvec+0x485/0x630
 [<ffffffff81168743>] shrink_zone+0x203/0x2a0
 [<ffffffff8116991b>] kswapd+0x85b/0xf60
 [<ffffffff8108e4f0>] ? wake_up_bit+0x40/0x40
 [<ffffffff811690c0>] ? zone_reclaim+0x420/0x420
 [<ffffffff8108dd8e>] kthread+0xbe/0xd0
 [<ffffffff816a74c4>] kernel_thread_helper+0x4/0x10
 [<ffffffff8169d630>] ? retint_restore_args+0x13/0x13
 [<ffffffff8108dcd0>] ? __init_kthread_worker+0x70/0x70
 [<ffffffff816a74c0>] ? gs_change+0x13/0x13
...
---8<---

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


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]