[Samba] Re: Also seeing high winbindd CPU usage

David Eisner
Fri, 08 Aug 2008 17:22:26 -0000

On Tue, Aug 5, 2008 at 5:01 PM, David Eisner <deisner@gmail.com>
wrote:
> I've compiled (with Sun Studio cc) and installed samba-3.2.1 on a
> Solaris 10 x64 box, which is a member of a (Windows Server 2003
> controlled) domain.  I previously had samba 3.0.28a running on the
> same machine without any problems.  Now winbindd is eating up all of
> the CPU (on the CPU it's assigned to).
...
> Is this potentially a known bug?


Guess not.  Here's some more information.  First, this is what I see with
top:

   PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
  2005 root       1  20    0  231M  221M cpu/1    2:46 49.96% winbindd
  2006 root       1  54    0   17M 6792K sleep    0:26  3.87% winbindd


First some poor man's profiling: When I attach a debugger to the
parent process (pid 2005), and suspend it, the stack typically looks
like this:

(dbx) where
current thread: t@1
  [1] __pollsys(0x8047550, 0x4, 0x8047630, 0x0), at 0xfe8f51d7
  [2] _pollsys(0x8047550, 0x4, 0x8047630, 0x0), at 0xfe8e98a4
  [3] _pselect(0x11, 0x8047750, 0x80477d0, 0xfe920318, 0x8047630,
0x0), at 0xfe8a317a
  [4] _select(0x11, 0x8047750, 0x80477d0, 0x0, 0x8047850), at 0xfe8a3470
=>[5] sys_select(maxfd = 17, readfds = 0x8047750, writefds 0x80477d0,
errorfds = (nil), tval = 0x8047850), line 93 in "select.c"
  [6] process_loop(), line 911 in "winbindd.c"
  [7] main(argc = 2, argv = 0x8047b60, envp = 0x8047b6c), line 1283 in
"winbindd.c"
(dbx)

[I could only get dbx to work -- gdb complained and dumped core].

And when I attach to the child process, which uses less CPU, I see this:

(dbx) where
current thread: t@1
  [1] __pollsys(0x8045b50, 0x2, 0x0, 0x0), at 0xfe8f51d7
  [2] _pollsys(0x8045b50, 0x2, 0x0, 0x0), at 0xfe8e98a4
  [3] _pselect(0x12, 0x80473a8, 0xfe920318, 0xfe920318, 0x0, 0x0), at
0xfe8a317a
  [4] _select(0x12, 0x80473a8, 0x0, 0x0, 0x0), at 0xfe8a3470
=>[5] sys_select(maxfd = 18, readfds = 0x80473a8, writefds = (nil),
errorfds = (nil), tval = (nil)), line 93 in "select.c"
  [6] fork_domain_child(child = 0x885a2fc), line 1178 in
"winbindd_dual.c"
  [7] schedule_async_request(child = 0x885a2fc), line 297 in
"winbindd_dual.c"
  [8] async_request(mem_ctx = 0x8854a78, child = 0x885a2fc, request 0x88535f0,
response = 0x885b170, continuation = 0x815c810
&`winbindd`winbindd_util.c`init_child_recv(void *private_data, _Bool
success), private_data = 0x8853e58), line 141 in "winbindd_dual.c"
  [9] init_child_connection(domain = 0x8859d38, continuation 0x8193f60 =
&`winbindd`winbindd_dual.c`domain_init_recv(void
*private_data_data, _Bool success), private_data = 0x88596f0), line
573 in "winbindd_util.c"
  [10] async_domain_request(mem_ctx = 0x8856570, domain = 0x8859d38,
request = 0x88524a0, response = 0x885a390, continuation = 0x815b74c
&`winbindd`winbindd_util.c`trustdom_recv(void *private_data, _Bool
success), private_data_data = 0x8856930), line 359 in
"winbindd_dual.c"
  [11] add_trusted_domains(domain = 0x8859d38), line 249 in
"winbindd_util.c"
  [12] rescan_trusted_domains(), line 510 in "winbindd_util.c"
  [13] process_loop(), line 862 in "winbindd.c"
  [14] main(argc = 2, argv = 0x8047b60, envp = 0x8047b6c), line 1283
in "winbindd.c"


By the way, this is with samba recompiled with debugging enabled and
no optimization.

I'll continue slogging through the code, but if anybody can tell from
this where the problem might be, please let me know.  Thanks.

-David

--
David Eisner http://cradle.brokenglass.com