diff mbox series

[kvm-unit-tests] x86: nVMX: Print more (accurate) info if RDTSC diff test fails

Message ID 20200124234608.10754-1-sean.j.christopherson@intel.com (mailing list archive)
State New, archived
Headers show
Series [kvm-unit-tests] x86: nVMX: Print more (accurate) info if RDTSC diff test fails | expand

Commit Message

Sean Christopherson Jan. 24, 2020, 11:46 p.m. UTC
Snapshot the delta of the last run and display it in the report if the
test fails.  Abort the run loop as soon as the threshold is reached so
that the displayed delta is guaranteed to a failed delta.  Displaying
the delta helps triage failures, e.g. is my system completely broken or
did I get unlucky, and aborting the loop early saves 99900 runs when
the system is indeed broken.

Cc: Nadav Amit <nadav.amit@gmail.com>
Cc: Aaron Lewis <aaronlewis@google.com>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
---
 x86/vmx_tests.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Comments

Krish Sadhukhan Jan. 26, 2020, 7:16 a.m. UTC | #1
On 1/24/20 3:46 PM, Sean Christopherson wrote:
> Snapshot the delta of the last run and display it in the report if the
> test fails.  Abort the run loop as soon as the threshold is reached so
> that the displayed delta is guaranteed to a failed delta.  Displaying
> the delta helps triage failures, e.g. is my system completely broken or
> did I get unlucky, and aborting the loop early saves 99900 runs when
> the system is indeed broken.
>
> Cc: Nadav Amit <nadav.amit@gmail.com>
> Cc: Aaron Lewis <aaronlewis@google.com>
> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
> ---
>   x86/vmx_tests.c | 11 ++++++-----
>   1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
> index b31c360..4049dec 100644
> --- a/x86/vmx_tests.c
> +++ b/x86/vmx_tests.c
> @@ -9204,6 +9204,7 @@ static unsigned long long rdtsc_vmexit_diff_test_iteration(void)
>   
>   static void rdtsc_vmexit_diff_test(void)
>   {
> +	unsigned long long delta;
>   	int fail = 0;
>   	int i;
>   
> @@ -9226,17 +9227,17 @@ static void rdtsc_vmexit_diff_test(void)
>   	vmcs_write(EXI_MSR_ST_CNT, 1);
>   	vmcs_write(EXIT_MSR_ST_ADDR, virt_to_phys(exit_msr_store));
>   
> -	for (i = 0; i < RDTSC_DIFF_ITERS; i++) {
> -		if (rdtsc_vmexit_diff_test_iteration() >=
> -		    HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
> +	for (i = 0; i < RDTSC_DIFF_ITERS && fail < RDTSC_DIFF_FAILS; i++) {
> +		delta = rdtsc_vmexit_diff_test_iteration();
> +		if (delta >= HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
>   			fail++;
>   	}
>   
>   	enter_guest();
>   
>   	report(fail < RDTSC_DIFF_FAILS,
> -	       "RDTSC to VM-exit delta too high in %d of %d iterations",
> -	       fail, RDTSC_DIFF_ITERS);
> +	       "RDTSC to VM-exit delta too high in %d of %d iterations, last = %llu",
> +	       fail, i, delta);
>   }
>   
>   static int invalid_msr_init(struct vmcs *vmcs)
Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
Aaron Lewis Jan. 27, 2020, 2:30 p.m. UTC | #2
On Sat, Jan 25, 2020 at 11:16 PM Krish Sadhukhan
<krish.sadhukhan@oracle.com> wrote:
>
>
> On 1/24/20 3:46 PM, Sean Christopherson wrote:
> > Snapshot the delta of the last run and display it in the report if the
> > test fails.  Abort the run loop as soon as the threshold is reached so
> > that the displayed delta is guaranteed to a failed delta.  Displaying
> > the delta helps triage failures, e.g. is my system completely broken or
> > did I get unlucky, and aborting the loop early saves 99900 runs when
> > the system is indeed broken.
> >
> > Cc: Nadav Amit <nadav.amit@gmail.com>
> > Cc: Aaron Lewis <aaronlewis@google.com>
> > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
> > ---
> >   x86/vmx_tests.c | 11 ++++++-----
> >   1 file changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
> > index b31c360..4049dec 100644
> > --- a/x86/vmx_tests.c
> > +++ b/x86/vmx_tests.c
> > @@ -9204,6 +9204,7 @@ static unsigned long long rdtsc_vmexit_diff_test_iteration(void)
> >
> >   static void rdtsc_vmexit_diff_test(void)
> >   {
> > +     unsigned long long delta;
> >       int fail = 0;
> >       int i;
> >
> > @@ -9226,17 +9227,17 @@ static void rdtsc_vmexit_diff_test(void)
> >       vmcs_write(EXI_MSR_ST_CNT, 1);
> >       vmcs_write(EXIT_MSR_ST_ADDR, virt_to_phys(exit_msr_store));
> >
> > -     for (i = 0; i < RDTSC_DIFF_ITERS; i++) {
> > -             if (rdtsc_vmexit_diff_test_iteration() >=
> > -                 HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
> > +     for (i = 0; i < RDTSC_DIFF_ITERS && fail < RDTSC_DIFF_FAILS; i++) {
> > +             delta = rdtsc_vmexit_diff_test_iteration();
> > +             if (delta >= HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
> >                       fail++;
> >       }
> >
> >       enter_guest();
> >
> >       report(fail < RDTSC_DIFF_FAILS,
> > -            "RDTSC to VM-exit delta too high in %d of %d iterations",
> > -            fail, RDTSC_DIFF_ITERS);
> > +            "RDTSC to VM-exit delta too high in %d of %d iterations, last = %llu",
> > +            fail, i, delta);
> >   }
> >
> >   static int invalid_msr_init(struct vmcs *vmcs)
> Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>

Reviewed-by: Aaron Lewis <aaronlewis@google.com>
Sean Christopherson June 30, 2020, 7:35 p.m. UTC | #3
Ping.

On Mon, Jan 27, 2020 at 06:30:11AM -0800, Aaron Lewis wrote:
> On Sat, Jan 25, 2020 at 11:16 PM Krish Sadhukhan
> <krish.sadhukhan@oracle.com> wrote:
> >
> >
> > On 1/24/20 3:46 PM, Sean Christopherson wrote:
> > > Snapshot the delta of the last run and display it in the report if the
> > > test fails.  Abort the run loop as soon as the threshold is reached so
> > > that the displayed delta is guaranteed to a failed delta.  Displaying
> > > the delta helps triage failures, e.g. is my system completely broken or
> > > did I get unlucky, and aborting the loop early saves 99900 runs when
> > > the system is indeed broken.
> > >
> > > Cc: Nadav Amit <nadav.amit@gmail.com>
> > > Cc: Aaron Lewis <aaronlewis@google.com>
> > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
> > > ---
> > >   x86/vmx_tests.c | 11 ++++++-----
> > >   1 file changed, 6 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
> > > index b31c360..4049dec 100644
> > > --- a/x86/vmx_tests.c
> > > +++ b/x86/vmx_tests.c
> > > @@ -9204,6 +9204,7 @@ static unsigned long long rdtsc_vmexit_diff_test_iteration(void)
> > >
> > >   static void rdtsc_vmexit_diff_test(void)
> > >   {
> > > +     unsigned long long delta;
> > >       int fail = 0;
> > >       int i;
> > >
> > > @@ -9226,17 +9227,17 @@ static void rdtsc_vmexit_diff_test(void)
> > >       vmcs_write(EXI_MSR_ST_CNT, 1);
> > >       vmcs_write(EXIT_MSR_ST_ADDR, virt_to_phys(exit_msr_store));
> > >
> > > -     for (i = 0; i < RDTSC_DIFF_ITERS; i++) {
> > > -             if (rdtsc_vmexit_diff_test_iteration() >=
> > > -                 HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
> > > +     for (i = 0; i < RDTSC_DIFF_ITERS && fail < RDTSC_DIFF_FAILS; i++) {
> > > +             delta = rdtsc_vmexit_diff_test_iteration();
> > > +             if (delta >= HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
> > >                       fail++;
> > >       }
> > >
> > >       enter_guest();
> > >
> > >       report(fail < RDTSC_DIFF_FAILS,
> > > -            "RDTSC to VM-exit delta too high in %d of %d iterations",
> > > -            fail, RDTSC_DIFF_ITERS);
> > > +            "RDTSC to VM-exit delta too high in %d of %d iterations, last = %llu",
> > > +            fail, i, delta);
> > >   }
> > >
> > >   static int invalid_msr_init(struct vmcs *vmcs)
> > Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
> 
> Reviewed-by: Aaron Lewis <aaronlewis@google.com>
Paolo Bonzini July 1, 2020, 4 p.m. UTC | #4
On 30/06/20 21:35, Sean Christopherson wrote:
> Ping.
> 
> On Mon, Jan 27, 2020 at 06:30:11AM -0800, Aaron Lewis wrote:
>> On Sat, Jan 25, 2020 at 11:16 PM Krish Sadhukhan
>> <krish.sadhukhan@oracle.com> wrote:
>>>
>>>
>>> On 1/24/20 3:46 PM, Sean Christopherson wrote:
>>>> Snapshot the delta of the last run and display it in the report if the
>>>> test fails.  Abort the run loop as soon as the threshold is reached so
>>>> that the displayed delta is guaranteed to a failed delta.  Displaying
>>>> the delta helps triage failures, e.g. is my system completely broken or
>>>> did I get unlucky, and aborting the loop early saves 99900 runs when
>>>> the system is indeed broken.
>>>>
>>>> Cc: Nadav Amit <nadav.amit@gmail.com>
>>>> Cc: Aaron Lewis <aaronlewis@google.com>
>>>> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
>>>> ---
>>>>   x86/vmx_tests.c | 11 ++++++-----
>>>>   1 file changed, 6 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
>>>> index b31c360..4049dec 100644
>>>> --- a/x86/vmx_tests.c
>>>> +++ b/x86/vmx_tests.c
>>>> @@ -9204,6 +9204,7 @@ static unsigned long long rdtsc_vmexit_diff_test_iteration(void)
>>>>
>>>>   static void rdtsc_vmexit_diff_test(void)
>>>>   {
>>>> +     unsigned long long delta;
>>>>       int fail = 0;
>>>>       int i;
>>>>
>>>> @@ -9226,17 +9227,17 @@ static void rdtsc_vmexit_diff_test(void)
>>>>       vmcs_write(EXI_MSR_ST_CNT, 1);
>>>>       vmcs_write(EXIT_MSR_ST_ADDR, virt_to_phys(exit_msr_store));
>>>>
>>>> -     for (i = 0; i < RDTSC_DIFF_ITERS; i++) {
>>>> -             if (rdtsc_vmexit_diff_test_iteration() >=
>>>> -                 HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
>>>> +     for (i = 0; i < RDTSC_DIFF_ITERS && fail < RDTSC_DIFF_FAILS; i++) {
>>>> +             delta = rdtsc_vmexit_diff_test_iteration();
>>>> +             if (delta >= HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
>>>>                       fail++;
>>>>       }
>>>>
>>>>       enter_guest();
>>>>
>>>>       report(fail < RDTSC_DIFF_FAILS,
>>>> -            "RDTSC to VM-exit delta too high in %d of %d iterations",
>>>> -            fail, RDTSC_DIFF_ITERS);
>>>> +            "RDTSC to VM-exit delta too high in %d of %d iterations, last = %llu",
>>>> +            fail, i, delta);
>>>>   }
>>>>
>>>>   static int invalid_msr_init(struct vmcs *vmcs)
>>> Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
>>
>> Reviewed-by: Aaron Lewis <aaronlewis@google.com>
> 

Queued, thanks.

Paolo
diff mbox series

Patch

diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index b31c360..4049dec 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -9204,6 +9204,7 @@  static unsigned long long rdtsc_vmexit_diff_test_iteration(void)
 
 static void rdtsc_vmexit_diff_test(void)
 {
+	unsigned long long delta;
 	int fail = 0;
 	int i;
 
@@ -9226,17 +9227,17 @@  static void rdtsc_vmexit_diff_test(void)
 	vmcs_write(EXI_MSR_ST_CNT, 1);
 	vmcs_write(EXIT_MSR_ST_ADDR, virt_to_phys(exit_msr_store));
 
-	for (i = 0; i < RDTSC_DIFF_ITERS; i++) {
-		if (rdtsc_vmexit_diff_test_iteration() >=
-		    HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
+	for (i = 0; i < RDTSC_DIFF_ITERS && fail < RDTSC_DIFF_FAILS; i++) {
+		delta = rdtsc_vmexit_diff_test_iteration();
+		if (delta >= HOST_CAPTURED_GUEST_TSC_DIFF_THRESHOLD)
 			fail++;
 	}
 
 	enter_guest();
 
 	report(fail < RDTSC_DIFF_FAILS,
-	       "RDTSC to VM-exit delta too high in %d of %d iterations",
-	       fail, RDTSC_DIFF_ITERS);
+	       "RDTSC to VM-exit delta too high in %d of %d iterations, last = %llu",
+	       fail, i, delta);
 }
 
 static int invalid_msr_init(struct vmcs *vmcs)