From: Anthony Liguori <aliguori@us.ibm.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <rth@twiddle.net>,
qemu-devel <qemu-devel@nongnu.org>, kvm <kvm@vger.kernel.org>,
Sasha Levin <levinsasha928@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v2] Register Linux dyntick timer as per-thread signal
Date: Sat, 23 Jul 2011 11:52:21 -0500 [thread overview]
Message-ID: <4E2AFC45.1090709@us.ibm.com> (raw)
In-Reply-To: <4DFB1D9D.7060108@siemens.com>
On 06/17/2011 04:25 AM, Jan Kiszka wrote:
> Derived from kvm-tool patch
> http://thread.gmane.org/gmane.comp.emulators.kvm.devel/74309
>
> Ingo Molnar pointed out that sending the timer signal to the whole
> process, just blocking it everywhere, is suboptimal with an increasing
> number of threads. QEMU is also using this pattern so far.
>
> Linux provides a (non-portable) way to restrict the signal to a single
> thread: We can use SIGEV_THREAD_ID unless we are forced to emulate
> signalfd via an additional thread. That case could theoretically be
> optimized as well, but it doesn't look worth bothering.
>
> Signed-off-by: Jan Kiszka<jan.kiszka@siemens.com>
Applied. Thanks.
Regards,
Anthony Liguori
> ---
>
> Changes in v2:
> - refactored dynticks_start_timer changes as suggested by Richard
> Henderson
> - added reference to original kvm-tool patch
>
> compatfd.c | 11 +++++++++++
> compatfd.h | 1 +
> qemu-timer.c | 8 ++++++++
> 3 files changed, 20 insertions(+), 0 deletions(-)
>
> diff --git a/compatfd.c b/compatfd.c
> index 41586ce..31654c6 100644
> --- a/compatfd.c
> +++ b/compatfd.c
> @@ -115,3 +115,14 @@ int qemu_signalfd(const sigset_t *mask)
>
> return qemu_signalfd_compat(mask);
> }
> +
> +bool qemu_signalfd_available(void)
> +{
> +#ifdef CONFIG_SIGNALFD
> + errno = 0;
> + syscall(SYS_signalfd, -1, NULL, _NSIG / 8);
> + return errno != ENOSYS;
> +#else
> + return false;
> +#endif
> +}
> diff --git a/compatfd.h b/compatfd.h
> index fc37915..6b04877 100644
> --- a/compatfd.h
> +++ b/compatfd.h
> @@ -39,5 +39,6 @@ struct qemu_signalfd_siginfo {
> };
>
> int qemu_signalfd(const sigset_t *mask);
> +bool qemu_signalfd_available(void);
>
> #endif
> diff --git a/qemu-timer.c b/qemu-timer.c
> index 72066c7..743cf96 100644
> --- a/qemu-timer.c
> +++ b/qemu-timer.c
> @@ -803,6 +803,8 @@ static int64_t qemu_next_alarm_deadline(void)
>
> #if defined(__linux__)
>
> +#include "compatfd.h"
> +
> static int dynticks_start_timer(struct qemu_alarm_timer *t)
> {
> struct sigevent ev;
> @@ -822,6 +824,12 @@ static int dynticks_start_timer(struct qemu_alarm_timer *t)
> memset(&ev, 0, sizeof(ev));
> ev.sigev_value.sival_int = 0;
> ev.sigev_notify = SIGEV_SIGNAL;
> +#ifdef SIGEV_THREAD_ID
> + if (qemu_signalfd_available()) {
> + ev.sigev_notify = SIGEV_THREAD_ID;
> + ev._sigev_un._tid = qemu_get_thread_id();
> + }
> +#endif /* SIGEV_THREAD_ID */
> ev.sigev_signo = SIGALRM;
>
> if (timer_create(CLOCK_REALTIME,&ev,&host_timer)) {
prev parent reply other threads:[~2011-07-23 16:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-16 9:31 [Qemu-devel] [RFC][PATCH] Register Linux dyntick timer as per-thread signal Jan Kiszka
2011-06-16 10:26 ` Ingo Molnar
2011-06-16 14:39 ` Richard Henderson
2011-06-16 15:24 ` Alexandre Raymond
2011-06-17 9:25 ` Jan Kiszka
2011-06-17 9:25 ` [Qemu-devel] [PATCH v2] " Jan Kiszka
2011-06-17 18:06 ` Richard Henderson
2011-07-23 16:52 ` Anthony Liguori [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E2AFC45.1090709@us.ibm.com \
--to=aliguori@us.ibm.com \
--cc=jan.kiszka@siemens.com \
--cc=kvm@vger.kernel.org \
--cc=levinsasha928@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).