Re: [PATCH] Warn if we run out of swap space

KAMEZAWA Hiroyuki
2009-05-27T00:26:52Z

On Tue, 26 May 2009 13:55:27 -0700
Andrew Morton <akpm@linux-foundation.org> wrote:

> On Tue, 26 May 2009 13:45:13 -0700
> Randy Dunlap <randy.dunlap@oracle.com> wrote:
>
> > Andrew Morton wrote:
> > > On Tue, 26 May 2009 10:23:36 -0400 (EDT)
> > > Christoph Lameter <cl@linux.com> wrote:
> > >
> > >> @@ -410,6 +412,11 @@ swp_entry_t get_swap_page(void)
> > >> }
> > >>
> > >> nr_swap_pages++;
> > >> + if (!out_of_swap_message_printed) {
> > >> + out_of_swap_message_printed = 1;
> > >> + printk(KERN_WARNING "All of swap is in use. Some pages "
> > >> + "cannot be swapped out.\n");
> > >> + }
> > >> noswap:
> > >> spin_unlock(&swap_lock);
> > >> return (swp_entry_t) {0};
> > >> Index: linux-2.6/mm/vmscan.c
> > >> ===================================================================
> > >> --- linux-2.6.orig/mm/vmscan.c 2009-05-26 09:06:03.000000000 -0500
> > >> +++ linux-2.6/mm/vmscan.c 2009-05-26 09:20:30.000000000 -0500
> > >> @@ -1945,6 +1945,15 @@ out:
> > >> goto loop_again;
> > >> }
> > >>
> > >> + /*
> > >> + * If we had an out of swap condition but things have improved then
> > >> + * reset the flag so that we print the message again when we run
> > >> + * out of swap again.
> > >> + */
> > >> +#ifdef CONFIG_SWAP
> > >> + if (out_of_swap_message_printed && !vm_swap_full())
> > >> + out_of_swap_message_printed = 0;
> > >> +#endif
> > >> return sc.nr_reclaimed;
> > >> }
> > >
> > > I still worry that there may be usage patterns which will result in
> > > this message coming out many times.
> >
> > and using printk_ratelimit() or printk_timed_ratelimit() would be OK or not?
>
> Well... it would help. We'd then get the same thing in the logs
> thousands of times rather than hundreds of thousands of times.
>
>
> But what's wrong with printing the thing just once, and not printing it
> again until after someone ran swapon or swapoff? I think that matches up
> with the operator's actions pretty closely?
>
IMHO, when the system is used every day without reboot and shared by users,
following behavior can be shown.

Monday : UserA uses.
Tuesday : UserA uses
Wednesday: UserA uses and near to swap full.
Thursday : UserB uses
Friday : UserB uses and near to swap full.

If the appliation can be changed while the system is alive, multiple message is
not very bad. And...I don't think swapon/swapoff is usual operation for users.

Anyway, I think vm_swap_full() does all necessary work as Christoph explained in
other thread.

Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>

Thanks,
-Kame