From: Avi Kivity <avi@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
qemu-devel@nongnu.org, Chris Wright <chrisw@sous-sol.org>,
kvm@vger.kernel.org
Subject: Re: [Qemu-devel] [PATCH] qemu-kvm: introduce cpu_start/cpu_stop commands
Date: Tue, 23 Nov 2010 16:00:53 +0200 [thread overview]
Message-ID: <4CEBC915.2010006@redhat.com> (raw)
In-Reply-To: <4CEBC6E4.1000307@codemonkey.ws>
On 11/23/2010 03:51 PM, Anthony Liguori wrote:
> On 11/23/2010 12:41 AM, Avi Kivity wrote:
>> On 11/23/2010 01:00 AM, Anthony Liguori wrote:
>>> qemu-kvm vcpu threads don't response to SIGSTOP/SIGCONT. Instead of
>>> teaching
>>> them to respond to these signals, introduce monitor commands that
>>> stop and start
>>> individual vcpus.
>>>
>>> The purpose of these commands are to implement CPU hard limits using
>>> an external
>>> tool that watches the CPU consumption and stops the CPU as appropriate.
>>>
>>> The monitor commands provide a more elegant solution that signals
>>> because it
>>> ensures that a stopped vcpu isn't holding the qemu_mutex.
>>>
>>
>> From signal(7):
>>
>> The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
>>
>> Perhaps this is a bug in kvm?
>
> I need to dig deeper than.
Signals are a bottomless pit.
> Maybe its something about sending SIGSTOP to a process?
AFAIK sending SIGSTOP to a process should stop all of its threads?
SIGSTOPping a thread should also work.
>>
>> If we could catch SIGSTOP, then it would be easy to unblock it only
>> while running in guest context. It would then stop on exit to userspace.
>
> Yeah, that's not a bad idea.
Except we can't.
>
>> Using monitor commands is fairly heavyweight for something as high
>> frequency as this. What control period do you see people using?
>> Maybe we should define USR1 for vcpu start/stop.
>>
>> What happens if one vcpu is stopped while another is running? Spin
>> loops, synchronous IPIs will take forever. Maybe we need to stop the
>> entire process.
>
> It's the same problem if a VCPU is descheduled while another is running.
We can fix that with directed yield or lock holder preemption
prevention. But if a vcpu is stopped by qemu, we suddenly can't.
> The problem with stopping the entire process is that a big motivation
> for this is to ensure that benchmarks have consistent results
> regardless of CPU capacity. If you just monitor the full process,
> then one VCPU may dominate the entitlement resulting in very erratic
> benchmarking.
What's the desired behaviour? Give each vcpu 300M cycles per second, or
give a 2vcpu guest 600M cycles per second?
You could monitor threads separately but stop the entire process.
Stopping individual threads will break apart as soon as they start
taking locks.
--
error compiling committee.c: too many arguments to function
WARNING: multiple messages have this Message-ID (diff)
From: Avi Kivity <avi@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Chris Wright <chrisw@sous-sol.org>,
Anthony Liguori <aliguori@us.ibm.com>,
qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: Re: [Qemu-devel] [PATCH] qemu-kvm: introduce cpu_start/cpu_stop commands
Date: Tue, 23 Nov 2010 16:00:53 +0200 [thread overview]
Message-ID: <4CEBC915.2010006@redhat.com> (raw)
In-Reply-To: <4CEBC6E4.1000307@codemonkey.ws>
On 11/23/2010 03:51 PM, Anthony Liguori wrote:
> On 11/23/2010 12:41 AM, Avi Kivity wrote:
>> On 11/23/2010 01:00 AM, Anthony Liguori wrote:
>>> qemu-kvm vcpu threads don't response to SIGSTOP/SIGCONT. Instead of
>>> teaching
>>> them to respond to these signals, introduce monitor commands that
>>> stop and start
>>> individual vcpus.
>>>
>>> The purpose of these commands are to implement CPU hard limits using
>>> an external
>>> tool that watches the CPU consumption and stops the CPU as appropriate.
>>>
>>> The monitor commands provide a more elegant solution that signals
>>> because it
>>> ensures that a stopped vcpu isn't holding the qemu_mutex.
>>>
>>
>> From signal(7):
>>
>> The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
>>
>> Perhaps this is a bug in kvm?
>
> I need to dig deeper than.
Signals are a bottomless pit.
> Maybe its something about sending SIGSTOP to a process?
AFAIK sending SIGSTOP to a process should stop all of its threads?
SIGSTOPping a thread should also work.
>>
>> If we could catch SIGSTOP, then it would be easy to unblock it only
>> while running in guest context. It would then stop on exit to userspace.
>
> Yeah, that's not a bad idea.
Except we can't.
>
>> Using monitor commands is fairly heavyweight for something as high
>> frequency as this. What control period do you see people using?
>> Maybe we should define USR1 for vcpu start/stop.
>>
>> What happens if one vcpu is stopped while another is running? Spin
>> loops, synchronous IPIs will take forever. Maybe we need to stop the
>> entire process.
>
> It's the same problem if a VCPU is descheduled while another is running.
We can fix that with directed yield or lock holder preemption
prevention. But if a vcpu is stopped by qemu, we suddenly can't.
> The problem with stopping the entire process is that a big motivation
> for this is to ensure that benchmarks have consistent results
> regardless of CPU capacity. If you just monitor the full process,
> then one VCPU may dominate the entitlement resulting in very erratic
> benchmarking.
What's the desired behaviour? Give each vcpu 300M cycles per second, or
give a 2vcpu guest 600M cycles per second?
You could monitor threads separately but stop the entire process.
Stopping individual threads will break apart as soon as they start
taking locks.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2010-11-23 14:01 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-22 23:00 [PATCH] qemu-kvm: introduce cpu_start/cpu_stop commands Anthony Liguori
2010-11-22 23:00 ` [Qemu-devel] " Anthony Liguori
2010-11-22 23:03 ` Anthony Liguori
2010-11-22 23:03 ` [Qemu-devel] " Anthony Liguori
2010-11-22 23:04 ` Chris Wright
2010-11-22 23:04 ` [Qemu-devel] " Chris Wright
2010-11-22 23:44 ` Anthony Liguori
2010-11-22 23:44 ` [Qemu-devel] " Anthony Liguori
2010-11-22 23:56 ` Chris Wright
2010-11-22 23:56 ` [Qemu-devel] " Chris Wright
2010-11-23 0:24 ` Anthony Liguori
2010-11-23 0:24 ` [Qemu-devel] " Anthony Liguori
2010-11-23 6:35 ` Avi Kivity
2010-11-23 6:41 ` [Qemu-devel] " Avi Kivity
2010-11-23 6:41 ` Avi Kivity
2010-11-23 8:16 ` Dor Laor
2010-11-23 8:16 ` Dor Laor
2010-11-23 13:57 ` Anthony Liguori
2010-11-23 13:57 ` Anthony Liguori
2010-11-23 13:51 ` Anthony Liguori
2010-11-23 13:51 ` Anthony Liguori
2010-11-23 14:00 ` Avi Kivity [this message]
2010-11-23 14:00 ` Avi Kivity
2010-11-23 14:24 ` Anthony Liguori
2010-11-23 14:24 ` Anthony Liguori
2010-11-23 14:35 ` Avi Kivity
2010-11-23 14:35 ` Avi Kivity
2010-11-23 7:29 ` Gleb Natapov
2010-11-23 7:29 ` [Qemu-devel] " Gleb Natapov
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=4CEBC915.2010006@redhat.com \
--to=avi@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=anthony@codemonkey.ws \
--cc=chrisw@sous-sol.org \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.