|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 00/12] libxl: fork: SIGCHLD flexibility
Jim Fehlig wrote:
> Ian Jackson wrote:
>
>> libvirt reaps its children synchronously and has no central pid
>> registry and no dispatch mechanism. libxl does have a pid registry so
>> can provide a selective reaping facility, but that is not currently
>> exposed. Here we expose it.
>>
>> Also, libvirt has multiple libxl ctxs. Prior to this series it is not
>> possible for those to share SIGCHLD: libxl expects either the
>> application, or _one_ libxl ctx, to own SIGCHLD. In the final patch
>> of this series we relax this restriction by having libxl maintain a
>> process-wide list of the libxl ctxs that are supposed to be interested
>> in SIGCHLD.
>>
>> I have not tested the selective reaping functionality. The most
>> plausible test environment for that is a suitably modified libvirt.
>>
>>
>
> I've been testing this series (plus 1/3 in your "tools: Miscellanous
> fixes for 4.4" series) on a suitably modified libvirt and the results
> look good so far :).
>
> I'm running four scripts concurrently that
>
> - start / stop domA
> - save / restore domB
> - reboot domC
> - get stats on dom{A,B,C}
>
> They have been running for about an hour now, and I haven't noticed any
> problems
>
I let this run over the weekend and today noticed libvirtd was deadlocked
Thread 5 (Thread 0x7ffff10ea700 (LWP 42142)):
#0 0x00007ffff4d20b7d in read () from /lib64/libpthread.so.0
#1 0x00007fffeb88d028 in libxl__self_pipe_eatall (fd=39) at
libxl_event.c:1369
#2 0x00007fffeb88f52c in sigchld_selfpipe_handler (egc=0x7ffff10e9270,
ev=0x5555559986e8, fd=39,
events=1, revents=1) at libxl_fork.c:501
#3 0x00007fffeb88bbf5 in afterpoll_internal (egc=0x7ffff10e9270,
poller=0x5555559a2b40, nfds=3,
fds=0x5555558d96a0, now=...) at libxl_event.c:990
#4 0x00007fffeb88d2d2 in eventloop_iteration (egc=0x7ffff10e9270,
poller=0x5555559a2b40)
at libxl_event.c:1431
#5 0x00007fffeb88de18 in libxl__ao_inprogress (ao=0x5555559beb30,
file=0x7fffeb8a0a1b "libxl_create.c", line=1356,
func=0x7fffeb8a1530 <__func__.16339> "do_domain_create") at
libxl_event.c:1676
#6 0x00007fffeb86813f in do_domain_create (ctx=0x555555998550,
d_config=0x7ffff10e94d0,
domid=0x7ffff10e944c, restore_fd=-1, checkpointed_stream=0,
ao_how=0x0, aop_console_how=0x0)
at libxl_create.c:1356
#7 0x00007fffeb86820d in libxl_domain_create_new (ctx=0x555555998550,
d_config=0x7ffff10e94d0,
domid=0x7ffff10e944c, ao_how=0x0, aop_console_how=0x0) at
libxl_create.c:1377
#8 0x00007fffebad01b6 in libxlVmStart (driver=0x5555558b7be0,
vm=0x5555558d3280,
start_paused=false, restore_fd=-1) at libxl/libxl_driver.c:630
#9 0x00007fffebad7594 in libxlDomainCreateWithFlags
(dom=0x5555559b9c00, flags=0)
at libxl/libxl_driver.c:2924
#...
Thread 1 (Thread 0x7ffff7fc7840 (LWP 42135)):
#0 0x00007ffff4d2089c in __lll_lock_wait () from /lib64/libpthread.so.0
#1 0x00007ffff4d1c4f2 in _L_lock_957 () from /lib64/libpthread.so.0
#2 0x00007ffff4d1c35a in pthread_mutex_lock () from /lib64/libpthread.so.0
#3 0x00007fffeb88943a in libxl__ctx_lock (ctx=0x555555998550) at
libxl_internal.h:2760
#4 0x00007fffeb88bf3d in libxl_osevent_occurred_fd (ctx=0x555555998550,
for_libxl=0x5555559953e0, fd=45, events_ign=0, revents_ign=1) at
libxl_event.c:1049
#5 0x00007fffebacd56c in libxlDomainObjFDEventCallback (watch=40,
fd=45, vir_events=1,
fd_info=0x5555559b5b80) at libxl/libxl_domain.c:132
#...
It looks like libxl is waiting for a read with a ctx locked on thread 5,
then receives an occurred_fd event on the same ctx in thread 1. But it
is not clear to me why read() is blocking...
Regards,
Jim
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |