From: Sean Christopherson <seanjc@google.com>
To: Zide Chen <zide.chen@intel.com>
Cc: linux-kselftest@vger.kernel.org, pbonzini@redhat.com
Subject: Re: [PATCH V2] KVM: selftests: Take large C-state exit latency into consideration
Date: Mon, 15 Apr 2024 16:23:20 -0700 [thread overview]
Message-ID: <Zh226A1xyCW6PtZ5@google.com> (raw)
In-Reply-To: <20240413053749.74313-1-zide.chen@intel.com>
On Fri, Apr 12, 2024, Zide Chen wrote:
> Currently, the migration worker delays 1-10 us, assuming that one
> KVM_RUN iteration only takes a few microseconds. But if C-state exit
> latencies are large enough, for example, hundreds or even thousands
> of microseconds on server CPUs, it may happen that it's not able to
> bring the target CPU out of C-state before the migration worker starts
> to migrate it to the next CPU.
>
> If the system workload is light, most CPUs could be at a certain level
> of C-state, which may result in less successful migrations and fail the
> migration/KVM_RUN ratio sanity check.
>
> This patch adds a command line option to skip the sanity check in
> this case.
>
> Additionally, seems it's reasonable to randomize the length of usleep(),
> other than delay in a fixed pattern.
This belongs in a separate patch. And while it's reasonable on the surface, I
doubt think it buys us anything, and it makes an already non-deterministic test
even less deterministic. In other words, unless a random sleep time helps find
more bugs or finds the original bug faster, just drop the randomization.
> V2:
> - removed the busy loop implementation
> - add the new "-s" option
This belongs in the ignored part of the patch...
>
> Signed-off-by: Zide Chen <zide.chen@intel.com>
...down here.
> ---
> tools/testing/selftests/kvm/rseq_test.c | 37 +++++++++++++++++++++++--
> 1 file changed, 34 insertions(+), 3 deletions(-)
>
> diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selftests/kvm/rseq_test.c
> index 28f97fb52044..515cfa32a925 100644
> --- a/tools/testing/selftests/kvm/rseq_test.c
> +++ b/tools/testing/selftests/kvm/rseq_test.c
> @@ -150,7 +150,7 @@ static void *migration_worker(void *__rseq_tid)
> * Use usleep() for simplicity and to avoid unnecessary kernel
> * dependencies.
> */
> - usleep((i % 10) + 1);
> + usleep((rand() % 10) + 1);
> }
> done = true;
> return NULL;
> @@ -186,12 +186,35 @@ static void calc_min_max_cpu(void)
> "Only one usable CPU, task migration not possible");
> }
>
> +static void usage(const char *name)
Uber nit, "help()" is more common than "usage()".
> @@ -254,9 +279,15 @@ int main(int argc, char *argv[])
> * getcpu() to stabilize. A 2:1 migration:KVM_RUN ratio is a fairly
> * conservative ratio on x86-64, which can do _more_ KVM_RUNs than
> * migrations given the 1us+ delay in the migration task.
> + *
> + * Another reason why it may have small migration:KVM_RUN ratio is that,
> + * on systems with large C-state exit latency, it may happen quite often
> + * that the scheduler is not able to wake up the target CPU before the
> + * vCPU thread is scheduled to another CPU.
> */
> - TEST_ASSERT(i > (NR_TASK_MIGRATIONS / 2),
> - "Only performed %d KVM_RUNs, task stalled too much?", i);
> + TEST_ASSERT(skip_sanity_check || i > (NR_TASK_MIGRATIONS / 2),
> + "Only performed %d KVM_RUNs, task stalled too much? "
> + "Try to turn off C-states or run it with the -s option", i);
I think it's worth explicitly telling the user how to reduce CPU wakeup latency.
Also, are C-states called that on other architectures? E.g. maybe this to avoid
confusing the user? Not a big deal, e.g. I've no objection whatsoever to the
comment, but it seems easy enough to avoid confusing the user.
"Try setting /dev/cpu_dma_latency to reduce CPU wakeup latency, "
"or run with -s to skip this sanity check", i);
next prev parent reply other threads:[~2024-04-15 23:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-13 5:37 [PATCH V2] KVM: selftests: Take large C-state exit latency into consideration Zide Chen
2024-04-15 23:23 ` Sean Christopherson [this message]
2024-04-16 19:43 ` Chen, Zide
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=Zh226A1xyCW6PtZ5@google.com \
--to=seanjc@google.com \
--cc=linux-kselftest@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=zide.chen@intel.com \
/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