linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* swapoff throttling and speedup?
@ 2009-06-03 17:01 Joel Krauska
  2009-06-04  2:04 ` KAMEZAWA Hiroyuki
  2009-06-04 15:50 ` Hugh Dickins
  0 siblings, 2 replies; 6+ messages in thread
From: Joel Krauska @ 2009-06-03 17:01 UTC (permalink / raw)
  To: linux-mm

On occasion we need to unswap a system that's gotten unruly.

Scenario: Some leaky app eats up way more RAM than it should, and pushes
a few gigs of the running system in to swap.  The leaky app is killed, 
but there's still lots of good stuff sitting in swap that we need to tidy
up to get the system back to normal performance levels.


The normal recourse is to run
 swapoff -a ; swapon -a


I have two related questions about the swap tools and how they work.


1. Has anyone tried making a nicer swapoff?
Right now swapoff can be pretty aggressive if the system is otherwise
heavily loaded.  On systems that I need to leave running other jobs,
swapoff compounds the slowness of the system overall by burning up
a single CPU and lots of IO

I wrote a perl wrapper that briefly runs swapoff 
and then kills it, but it would seem more reasonable to have a knob
to make swapoff less aggressive. (max kb/s, etc)  

It looked to me like the swapoff code was immediately hitting kernel 
internals instead of doing more lifting itself (and making it 
obvious where I could insert some sleeps)

Has anyone found better options here?



2. A faster(multithreaded?) swapoff?
>From what I can tell, swapoff is single threaded, which seems to make 
unswapping a CPU bound activity.  

In the opposite use case of my first question, on systems that I /can/
halt all the running code (assuming if they've gone off the deep end and have
several gigs in SWAP) it can take quite a long time for unswap to 
tidy up the mess.  

Has anyone considered improvements to swapoff to speed it up?
(multiple threads?)


I'm hoping others have been down this road before.

As a rule, we try to avoid swapping when possible, but using:
vm.swappiness = 1

But it does still happen on occasion and that lead to this mail.

Cheers,

Joel

--
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] 6+ messages in thread

* Re: swapoff throttling and speedup?
  2009-06-03 17:01 swapoff throttling and speedup? Joel Krauska
@ 2009-06-04  2:04 ` KAMEZAWA Hiroyuki
  2009-06-04  2:43   ` Joel Krauska
  2009-06-04 15:50 ` Hugh Dickins
  1 sibling, 1 reply; 6+ messages in thread
From: KAMEZAWA Hiroyuki @ 2009-06-04  2:04 UTC (permalink / raw)
  To: Joel Krauska; +Cc: linux-mm

On Wed, 03 Jun 2009 10:01:39 -0700
Joel Krauska <jkrauska@gmail.com> wrote:

> On occasion we need to unswap a system that's gotten unruly.
> 
> Scenario: Some leaky app eats up way more RAM than it should, and pushes
> a few gigs of the running system in to swap.  The leaky app is killed, 
> but there's still lots of good stuff sitting in swap that we need to tidy
> up to get the system back to normal performance levels.
> 
> 
> The normal recourse is to run
>  swapoff -a ; swapon -a
> 
> 
> I have two related questions about the swap tools and how they work.
> 
> 
> 1. Has anyone tried making a nicer swapoff?
> Right now swapoff can be pretty aggressive if the system is otherwise
> heavily loaded.  On systems that I need to leave running other jobs,
> swapoff compounds the slowness of the system overall by burning up
> a single CPU and lots of IO
> 
> I wrote a perl wrapper that briefly runs swapoff 
> and then kills it, but it would seem more reasonable to have a knob
> to make swapoff less aggressive. (max kb/s, etc)  
> 
> It looked to me like the swapoff code was immediately hitting kernel 
> internals instead of doing more lifting itself (and making it 
> obvious where I could insert some sleeps)
> 
I haven't heard this swapoff issue for years.

Hmm, swapoff -a is proper operation ? (I don't think so..)
I think most of people just want "fast" swapoff.

> Has anyone found better options here?
> 
> 
If you know what are the leaky apps, memory cgroup may be a help for
avoiding unnecessary swap-out.
 
How about throttling swapoff's cpu usage by cpu scheduler cgroup ?
No help ?

> 
> 2. A faster(multithreaded?) swapoff?
> From what I can tell, swapoff is single threaded, which seems to make 
> unswapping a CPU bound activity.  
> 
> In the opposite use case of my first question, on systems that I /can/
> halt all the running code (assuming if they've gone off the deep end and have
> several gigs in SWAP) it can take quite a long time for unswap to 
> tidy up the mess.  
> 
> Has anyone considered improvements to swapoff to speed it up?
> (multiple threads?)
> 
not heared of in this mailing list.

But I think swapoff() is a system-call and making it as multithreaded is
not easy. (And we have to take care of complex racy cases...)

> 
> I'm hoping others have been down this road before.
> 
> As a rule, we try to avoid swapping when possible, but using:
> vm.swappiness = 1
> 
> But it does still happen on occasion and that lead to this mail.
> 


Thanks,
-Kame

--
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] 6+ messages in thread

* Re: swapoff throttling and speedup?
  2009-06-04  2:04 ` KAMEZAWA Hiroyuki
@ 2009-06-04  2:43   ` Joel Krauska
  2009-06-04  2:54     ` KAMEZAWA Hiroyuki
  0 siblings, 1 reply; 6+ messages in thread
From: Joel Krauska @ 2009-06-04  2:43 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki; +Cc: linux-mm

KAMEZAWA Hiroyuki wrote:
>> 1. Has anyone tried making a nicer swapoff?
>> Right now swapoff can be pretty aggressive if the system is otherwise
>> heavily loaded.  On systems that I need to leave running other jobs,
>> swapoff compounds the slowness of the system overall by burning up
>> a single CPU and lots of IO
>>
>> I wrote a perl wrapper that briefly runs swapoff 
>> and then kills it, but it would seem more reasonable to have a knob
>> to make swapoff less aggressive. (max kb/s, etc)  
>>
>> It looked to me like the swapoff code was immediately hitting kernel 
>> internals instead of doing more lifting itself (and making it 
>> obvious where I could insert some sleeps)
>>

I find I need a slower swapoff when a system that's already running very hot
needs to be recovered from lots of swapping without overly impacting the other
running processes.

The bulk of the work is still being done in normal RAM, and the overhead
of consuming an entire CPU just for swapoff degrades my other running processes.

> How about throttling swapoff's cpu usage by cpu scheduler cgroup ?
> No help ?

I think swapoff is all done as systemcalls, not in userspace, so I'm not
sure that cgroups would apply here.  (granted I had never heard of control
groups until just now...)

My initial analogy and insight for this was the MD RAID rebuild throttle toggles.
/proc/sys/dev/raid/speed_limit_max

Which I've had to tune down on occasion to reduce impact to other running processes.
(aside: MD RAID rebuilds do seem to be multi-threaded?)

Thanks Kame,

Joel

--
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] 6+ messages in thread

* Re: swapoff throttling and speedup?
  2009-06-04  2:43   ` Joel Krauska
@ 2009-06-04  2:54     ` KAMEZAWA Hiroyuki
  0 siblings, 0 replies; 6+ messages in thread
From: KAMEZAWA Hiroyuki @ 2009-06-04  2:54 UTC (permalink / raw)
  To: Joel Krauska; +Cc: linux-mm

On Wed, 03 Jun 2009 19:43:06 -0700
Joel Krauska <jkrauska@gmail.com> wrote:

> KAMEZAWA Hiroyuki wrote:
> >> 1. Has anyone tried making a nicer swapoff?
> >> Right now swapoff can be pretty aggressive if the system is otherwise
> >> heavily loaded.  On systems that I need to leave running other jobs,
> >> swapoff compounds the slowness of the system overall by burning up
> >> a single CPU and lots of IO
> >>
> >> I wrote a perl wrapper that briefly runs swapoff 
> >> and then kills it, but it would seem more reasonable to have a knob
> >> to make swapoff less aggressive. (max kb/s, etc)  
> >>
> >> It looked to me like the swapoff code was immediately hitting kernel 
> >> internals instead of doing more lifting itself (and making it 
> >> obvious where I could insert some sleeps)
> >>
> 
> I find I need a slower swapoff when a system that's already running very hot
> needs to be recovered from lots of swapping without overly impacting the other
> running processes.
> 
> The bulk of the work is still being done in normal RAM, and the overhead
> of consuming an entire CPU just for swapoff degrades my other running processes.
> 
> > How about throttling swapoff's cpu usage by cpu scheduler cgroup ?
> > No help ?
> 
> I think swapoff is all done as systemcalls, not in userspace, so I'm not
> sure that cgroups would apply here.  (granted I had never heard of control
> groups until just now...)
> 
IIUC, some "cond_resched()" , means "reschedule if necessary", are inserted to
swapoff's main loop. Then, limiting usage of cpu may have effects, I think.

Thanks,
-Kame

--
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] 6+ messages in thread

* Re: swapoff throttling and speedup?
  2009-06-03 17:01 swapoff throttling and speedup? Joel Krauska
  2009-06-04  2:04 ` KAMEZAWA Hiroyuki
@ 2009-06-04 15:50 ` Hugh Dickins
  2009-06-04 16:25   ` KAMEZAWA Hiroyuki
  1 sibling, 1 reply; 6+ messages in thread
From: Hugh Dickins @ 2009-06-04 15:50 UTC (permalink / raw)
  To: Joel Krauska; +Cc: KAMEZAWA Hiroyuki, linux-mm

On Wed, 3 Jun 2009, Joel Krauska wrote:

> On occasion we need to unswap a system that's gotten unruly.
> 
> Scenario: Some leaky app eats up way more RAM than it should, and pushes
> a few gigs of the running system in to swap.  The leaky app is killed, but
> there's still lots of good stuff sitting in swap that we need to tidy
> up to get the system back to normal performance levels.
> 
> 
> The normal recourse is to run
> swapoff -a ; swapon -a
> 
> 
> I have two related questions about the swap tools and how they work.
> 
> 
> 1. Has anyone tried making a nicer swapoff?
> Right now swapoff can be pretty aggressive if the system is otherwise
> heavily loaded.  On systems that I need to leave running other jobs,
> swapoff compounds the slowness of the system overall by burning up
> a single CPU and lots of IO
> 
> I wrote a perl wrapper that briefly runs swapoff and then kills it, but it
> would seem more reasonable to have a knob
> to make swapoff less aggressive. (max kb/s, etc)  

Though what you're doing is inelegant, it does seem a good solution to me:
why add fancy kernel tunables, for what is (I think) a rare use case?

> It looked to me like the swapoff code was immediately hitting kernel internals
> instead of doing more lifting itself (and making it obvious where I could
> insert some sleeps)

Yes, all the hard work is in the one swapoff(2) system call.
You could add an option to swapoff(8), to alarm and sleep and retry;
but why bother when you've already got your perl script?

> 
> Has anyone found better options here?

Could the answer be in your question: "a nicer swapoff?"
Does running "nice swapoff -a" behave more as you want?
Won't help on the IO side, I suppose.

> 
> 2. A faster(multithreaded?) swapoff?
> From what I can tell, swapoff is single threaded, which seems to make
> unswapping a CPU bound activity.  
> In the opposite use case of my first question, on systems that I /can/
> halt all the running code (assuming if they've gone off the deep end and have
> several gigs in SWAP) it can take quite a long time for unswap to tidy up the
> mess.  
> Has anyone considered improvements to swapoff to speed it up?
> (multiple threads?)

Until there's some unforeseen revolution in swap usage, swapoff will
always be nasty.

It's hugely inefficient, but you're one of the very few people to be
hurt by that: for most people, it's something that only gets run at
shutdown time, when there's very little work left for it to do, and
nothing left to mind anyway.

Certainly there are ways in which swapoff could be made much nicer;
but at the cost of maintaining additional pointers which use more
memory and slow down codepaths critical to performance, when most
critical processes will never go to swap in the first place.

So, in view of the tradeoffs, swapoff has remained a nasty backwater:
it goes about its business in that hugely inefficient way, to save
the rest of mm from having to support it throughout normal usage.

Multiple threads?  Hmm, never pondered on that.  It would certainly
make your first case worse, occupying all CPUs instead of just one.

If you can muster a chorus of other users upset by swapoff's
behaviour, then it would be fun to improve it somewhat; but I'd
much rather cut down its CPU usage, than spread the same across CPUs.

I've often thought that the 16 bits of the swap_map are poorly used
(rarely can more than 2 be set): we could make better use of them
with a hash to reduce the amount of blind scanning by an order or
two of magnitude.  But that's always seemed more a bloat of kernel
text than a good use of a developer's time.

And it's a very long time since I tried swapin_readahead() instead
of the read_swap_cache_async() in try_to_unuse(): more likely to
help with your first use case (when you've competing IO) than your
second (when the disk is likely to be caching the readahead anyway).

> 
> I'm hoping others have been down this road before.
> 
> As a rule, we try to avoid swapping when possible, but using:
> vm.swappiness = 1
> 
> But it does still happen on occasion and that lead to this mail.

Thanks for taking the trouble to write: opinions, anyone?

Hugh

--
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] 6+ messages in thread

* Re: swapoff throttling and speedup?
  2009-06-04 15:50 ` Hugh Dickins
@ 2009-06-04 16:25   ` KAMEZAWA Hiroyuki
  0 siblings, 0 replies; 6+ messages in thread
From: KAMEZAWA Hiroyuki @ 2009-06-04 16:25 UTC (permalink / raw)
  To: Hugh Dickins; +Cc: Joel Krauska, KAMEZAWA Hiroyuki, linux-mm

Hugh Dickins wrote:
> On Wed, 3 Jun 2009, Joel Krauska wrote:
>> I'm hoping others have been down this road before.
>>
>> As a rule, we try to avoid swapping when possible, but using:
>> vm.swappiness = 1
>>
>> But it does still happen on occasion and that lead to this mail.
>
> Thanks for taking the trouble to write: opinions, anyone?
>

Is there anyone who wants a system call like this ?

  int mem_swapin(int pid, start-addr, size)
  - try to swap in pages from range [addr, addr+size) of pid.
    we can do this force-pagein against file caches and shmem now.
    this is for swap.

I doubts there are no one who can make use of this in sane way. But I'm
sometimes surprised to find that there are people make use of swap
intentionally...

Thanks,
-Kame



--
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] 6+ messages in thread

end of thread, other threads:[~2009-06-04 16:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-03 17:01 swapoff throttling and speedup? Joel Krauska
2009-06-04  2:04 ` KAMEZAWA Hiroyuki
2009-06-04  2:43   ` Joel Krauska
2009-06-04  2:54     ` KAMEZAWA Hiroyuki
2009-06-04 15:50 ` Hugh Dickins
2009-06-04 16:25   ` KAMEZAWA Hiroyuki

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