[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: openldap + pth



PTH is a cooperative threading package which requires the application to voluntarily yield control of the CPU to allow thread switching to occur. A lot of that occurs transparently thru use of wrappers for typical libc functions. Very likely, since epoll is a rather new and Linux-specific interface, PTH doesn't wrap these functions yet. You might try rebuilding slapd with epoll support disabled (so that it uses plain old select()) and see if it behaves any better.

I'm rather surprised that anyone still uses PTH. With the proliferation of multi-processor machines, it has very little to recommend itself.

Dieter Kluenter wrote:
"Dieter Kluenter" <dieter@dkluenter.de> writes:

Hi,
I have just setup an OpenPKG environment in order to run OpenLDAP in
an isolated environment
http://www.openpkg.org
OpenPKG provides openldap-2.3.24, db-4.4.20, cyrus-sasl-2.1.22,
pth-2.0.7, openssl-0.9.8b and a few other tools like gcc-4.1.1, make,
readline, shareutils, binutils, bison, m4 a.s.o.
OpenLDAP has been compiled with
readline
tls
bdb
hdb
ldap
meta
monitor
rewrite
relay
overlays
slurpd

Running slapd in debugging modus shows no errors. Ldapsearching the
server shows an accepted connection, but that's all, nothing
more. Ldapsearch and slapd are waiting forever until the process has
been killed.
Any hints on how debug further?

I just add the strace output of ldapsearch -x -H ldap://localhost -b "" -s base +


-.-.-.-.-.-.- strace log -.-.-.-.-.-.-.-.-
epoll_wait(8, {{EPOLLIN, {u32=10463280, u64=10463280}}}, 1024, 4294967295) = 1
fcntl(10, F_GETFL)                      = 0x2 (flags O_RDWR)
fcntl(10, F_GETFL)                      = 0x2 (flags O_RDWR)
fcntl(10, F_SETFL, O_RDWR|O_NONBLOCK)   = 0
accept(10, {sa_family=AF_INET, sin_port=htons(60043), sin_addr=inet_addr("127.0.0.1")}, [10081870724412211216]) = 11
fcntl(10, F_GETFL)                      = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(10, F_SETFL, O_RDWR)              = 0
fcntl(11, F_GETFL)                      = 0x2 (flags O_RDWR)
setsockopt(11, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(11, SOL_TCP, TCP_NODELAY, [1], 4) = 0
fcntl(11, F_GETFL)                      = 0x2 (flags O_RDWR)
fcntl(11, F_SETFL, O_RDWR|O_NONBLOCK)   = 0
epoll_ctl(8, EPOLL_CTL_ADD, 11, {EPOLLIN, {u32=10491308, u64=10491308}}) = 0
uname({sys="Linux", node="rubin", ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=837, ...}) = 0
write(5, "Aug 09 08:55:54 rubin <debug> sl"..., 104) = 104
epoll_wait(8, {{EPOLLIN, {u32=10491308, u64=10491308}}}, 1024, 4294967295) = 1
read(11, "0\f\2\1\1`\7\2", 8)           = 8
read(11, "\1\3\4\0\200\0", 6)           = 6
mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaaab8ac000
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(11, 0xae89bf, 8)                   = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(8, {{EPOLLIN, {u32=10491308, u64=10491308}}}, 1024, 4294967295) = 1
read(11, "", 8)                         = 0
epoll_ctl(8, EPOLL_CTL_MOD, 11, {0, {u32=10491308, u64=10491308}}) = 0
fcntl(7, F_GETFL)                       = 0x1 (flags O_WRONLY)
fcntl(7, F_GETFL)                       = 0x1 (flags O_WRONLY)
fcntl(7, F_SETFL, O_WRONLY|O_NONBLOCK)  = 0
select(8, NULL, [7], NULL, {0, 0})      = 1 (out [7], left {0, 0})
write(7, "0", 1)                        = 1
fcntl(7, F_GETFL)                       = 0x801 (flags O_WRONLY|O_NONBLOCK)
fcntl(7, F_SETFL, O_WRONLY)             = 0
fcntl(7, F_GETFL)                       = 0x1 (flags O_WRONLY)
fcntl(7, F_GETFL)                       = 0x1 (flags O_WRONLY)
fcntl(7, F_SETFL, O_WRONLY|O_NONBLOCK)  = 0
select(8, NULL, [7], NULL, {0, 0})      = 1 (out [7], left {0, 0})
write(7, "0", 1)                        = 1
fcntl(7, F_GETFL)                       = 0x801 (flags O_WRONLY|O_NONBLOCK)
fcntl(7, F_SETFL, O_WRONLY)             = 0
epoll_wait(8, {{EPOLLIN, {u32=10491288, u64=10491288}}}, 1024, 4294967295) = 1
fcntl(6, F_GETFL)                       = 0 (flags O_RDONLY)
fcntl(6, F_GETFL)                       = 0 (flags O_RDONLY)
select(7, [6], NULL, NULL, {0, 0})      = 1 (in [6], left {0, 0})
read(6, "00", 8192)                     = 2
epoll_wait(8,  <unfinished ...>
-.-.-.-.-.- end strace log -.-.-.-.-.-.-.-.-.-

-Dieter



--
 -- Howard Chu
 Chief Architect, Symas Corp.  http://www.symas.com
 Director, Highland Sun        http://highlandsun.com/hyc
 OpenLDAP Core Team            http://www.openldap.org/project/