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

Re: [UNIKRAFT PATCH 2/2] plat/kvm/x86/tscclock: start from zero



All good.

Reviewed-by: Razvan Deaconescu <razvan.deaconescu@xxxxxxxxx>

On Tue, Jun 23, 2020 at 9:36 AM Hugo Lefeuvre <hugo.lefeuvre@xxxxxxxxx> wrote:
>
> The starting point of our monotonic clock is currently the initial value
> of the TSC, converted to nanoseconds.
>
> Start from zero instead: this allows for easier interpretation of
> timestamps in debug messages.
>
> Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@xxxxxxxxx>
> ---
>  plat/kvm/x86/tscclock.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/plat/kvm/x86/tscclock.c b/plat/kvm/x86/tscclock.c
> index e477088..bfe801c 100644
> --- a/plat/kvm/x86/tscclock.c
> +++ b/plat/kvm/x86/tscclock.c
> @@ -256,24 +256,29 @@ int tscclock_init(void)
>                 tsc_freq = (rdtsc() - tsc_base) * 10;
>         }
>
> -       uk_pr_info("Clock source: TSC, frequency estimate is %llu Hz\n",
> -                  (unsigned long long) tsc_freq);
> -
>         /*
>          * Calculate TSC scaling multiplier.
>          *
>          * (0.32) tsc_mult = UKARCH_NSEC_PER_SEC (32.32) / tsc_freq (32.0)
>          *
> +        * Warning, do not print anything between TSC calibration and the
> +        * setting of tsc_mult: if CONFIG_LIBUKDEBUG_PRINT_TIME is enabled
> +        * this will trigger a reset of tsc_base via tscclock_monotonic
> +        * and delay the clock starting point.
> +        *
>          * FIXME: this will overflow with small TSC frequencies. We should
>          * probably calculate the TSC shift dynamically like solo5/hvt does.
>          */
>         tsc_mult = (UKARCH_NSEC_PER_SEC << 32) / tsc_freq;
>
> +       uk_pr_info("Clock source: TSC, frequency estimate is %llu Hz\n",
> +                  (unsigned long long) tsc_freq);
> +
>         /*
>          * Monotonic time begins at tsc_base (first read of TSC before
>          * calibration).
>          */
> -       time_base = mul64_32(tsc_base, tsc_mult);
> +       tscclock_monotonic();
>
>         /*
>          * Compute RTC epoch offset by subtracting monotonic time_base from 
> RTC
> --
> 2.7.4
>
>



 


Rackspace

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