[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Re: [Qemu-devel] [PATCH 01/13] Handle terminating signals.



Ian Jackson wrote:
Anthony Liguori writes ("Re: [Xen-devel] Re: [Qemu-devel] [PATCH 01/13] Handle 
terminating signals."):
Then you need a pipe per-signal and you can't accurately simulate threadfd() (since you can't communicate siginfo).

No, you don't need a pipe per signal.  You only need multiple pipes if
you have multiple different event loops which are each capable of
handling only a subset of the signals, _and_ you're unwilling to use
an atomic flag variable (eg, cpu_interrupt) or its equivalent.

But we already have cpu_interrupt, and of course the aio completion
system has its own recording of what's going on.  So that does not
apply to qemu.

All that's needed is a reliable, race-free, way of avoiding spuriously
blocking in a syscall when an event occurs between checking the state
variables (aio_error, cpu interrupt check) and the call to select().
One fd is sufficient for that.

Just to make that concrete, even if we extended my patch to use its
mechanism for SIGINT et al I don't think a second pipe would be
needed.

In KVM, we do use the signal number to determine action. We could use globals but since we're multi-threaded, that gets pretty nasty. The same would apply to a threaded QEMU.

I don't see threads as a problem.  Are you concerned about mini-OS?

Minios certainly doesn't currently have any threads and it would
probably be a severe pain to introduce them.  That's just one example
of a portability problem.

We're definitely not going to avoid threads forever in QEMU. KVM requires threads to support multiple VCPUs. Threads are also needed to support true SMP with TCG.

And right now, implementing a thread pool is the only sane way to get reasonable disk IO in userspace.

I share your concerns about threading, which is why we have to use them in a very careful way. My signalfd() patch uses them in a very isolated way that is pretty easily verified.

You could always add proper signalfd() support to minios. You can also certainly implement a signalfd() emulation that uses pipe(). signalfd() is really the right solution to this problem (and it doesn't require threads by default).

Regards,

Anthony Liguori

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.