LVS
lvs-users
Google
 
Web LinuxVirtualServer.org

Re: lvs sync, unusual load

To: Dean Manners <deanm@xxxxxxxxxxxxx>, <lvs-users@xxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: lvs sync, unusual load
From: Horms <horms@xxxxxxxxxxxx>
Date: Fri, 10 Nov 2006 15:46:59 +0900
On Fri, Nov 10, 2006 at 03:15:05PM +0900, Horms wrote:
> On Fri, Nov 10, 2006 at 02:54:20PM +1100, Dean Manners wrote:
> > Horms,
> > 
> > ip_vs_sync.c: 
> > 885:        __set_current_state(TASK_UNINTERRUPTIBLE);
> > 886:        add_wait_queue(&stop_sync_wait, &wait);
> > 887:        set_stop_sync(state, 1);
> > 888:        ip_vs_sync_state -= state;
> > 889:        wake_up(&sync_wait);
> > 890:        schedule();
> > 891:        __set_current_state(TASK_RUNNING);
> > 892:        remove_wait_queue(&stop_sync_wait, &wait);
> > 
> > Seems to have changed? Theres no "schedule_timeout(HZ);" throughout.
> 
> Actually, that is the shutdown code.
> 
> The problem is almost certainly caused inside sync_master_loop()
> somewhere. Though it is using ssleep(), but perhaps its schemantics have
> changed somehow.. I can readily reproduce the problem here. I will see

Is there any chance you could test out the change below to see if it
helps. It seems to work on my end.

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/


[IPVS] use msleep_interruptable() instead of ssleep() aka msleep()

Dean Manners notices that when an IPVS synchonisation daemons are
started the system load slowly climbs up to 1. This seems to be related
to the call to ssleep(1) (aka msleep(1000) in the main loop. Replacing
this with a call to msleep_interruptable() seems to make the problem go
away. Though I'm not sure that it is correct.

Cc: Dean Manners <deanm@xxxxxxxxxxxxx>
Signed-Off-By: Simon Horman <horms@xxxxxxxxxxxx>

Index: linux-2.6/net/ipv4/ipvs/ip_vs_sync.c
===================================================================
--- linux-2.6.orig/net/ipv4/ipvs/ip_vs_sync.c   2006-11-10 15:33:42.000000000 
+0900
+++ linux-2.6/net/ipv4/ipvs/ip_vs_sync.c        2006-11-10 15:33:52.000000000 
+0900
@@ -657,7 +657,7 @@
                if (stop_master_sync)
                        break;
 
-               ssleep(1);
+               msleep_interruptible(1000);
        }
 
        /* clean up the sync_buff queue */

<Prev in Thread] Current Thread [Next in Thread>