linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Zachary Amsden <zamsden@redhat.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	Glauber Costa <glommer@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	John Stultz <johnstul@us.ibm.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [KVM timekeeping 17/35] Implement getnsboottime kernel API
Date: Mon, 30 Aug 2010 20:07:43 +0200	[thread overview]
Message-ID: <4C7BF36F.5080306@siemens.com> (raw)
In-Reply-To: <4C784EBF.2010908@redhat.com>

Zachary Amsden wrote:
> On 08/27/2010 08:05 AM, Jan Kiszka wrote:
>> Zachary Amsden wrote:
>>    
>>> Add a kernel call to get the number of nanoseconds since boot.  This
>>> is generally useful enough to make it a generic call.
>>>
>>> Signed-off-by: Zachary Amsden<zamsden@redhat.com>
>>> ---
>>>   include/linux/time.h      |    1 +
>>>   kernel/time/timekeeping.c |   27 +++++++++++++++++++++++++++
>>>   2 files changed, 28 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/include/linux/time.h b/include/linux/time.h
>>> index ea3559f..5d04108 100644
>>> --- a/include/linux/time.h
>>> +++ b/include/linux/time.h
>>> @@ -145,6 +145,7 @@ extern void getnstimeofday(struct timespec *tv);
>>>   extern void getrawmonotonic(struct timespec *ts);
>>>   extern void getboottime(struct timespec *ts);
>>>   extern void monotonic_to_bootbased(struct timespec *ts);
>>> +extern s64 getnsboottime(void);
>>>
>>>   extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
>>>   extern int timekeeping_valid_for_hres(void);
>>> diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
>>> index caf8d4d..d250f0a 100644
>>> --- a/kernel/time/timekeeping.c
>>> +++ b/kernel/time/timekeeping.c
>>> @@ -285,6 +285,33 @@ void ktime_get_ts(struct timespec *ts)
>>>   }
>>>   EXPORT_SYMBOL_GPL(ktime_get_ts);
>>>
>>> +
>>> +/**
>>> + * getnsboottime - get the bootbased clock in nsec format
>>> + *
>>> + * The function calculates the bootbased clock from the realtime
>>> + * clock and the wall_to_monotonic offset and stores the result
>>> + * in normalized timespec format in the variable pointed to by @ts.
>>> + */
>>>      
>> This thing is not returning anything in some ts variable. And I also had
>> a hard time spotting the key difference to getboottime - the name is
>> really confusing.
>>
>> Besides this, if you have good suggestion how to provide a compat
>> version for older kernels, I'm all ears. Please also have a careful look
>> at kvm-kmod's kvm_getboottime again, right now I'm a bit confused about
>> what it is supposed to return and what it actually does (note that
>> kvm-kmod cannot account for time spent in suspend state).
>>
>> Thanks!
>> Jan
>>
>>    
>>> +s64 getnsboottime(void)
>>> +{
>>> +	unsigned int seq;
>>> +	s64 secs, nsecs;
>>> +
>>> +	WARN_ON(timekeeping_suspended);
>>> +
>>> +	do {
>>> +		seq = read_seqbegin(&xtime_lock);
>>> +		secs = xtime.tv_sec + wall_to_monotonic.tv_sec;
>>> +		secs += total_sleep_time.tv_sec;
>>> +		nsecs = xtime.tv_nsec + wall_to_monotonic.tv_nsec;
>>> +		nsecs += total_sleep_time.tv_nsec + timekeeping_get_ns();
>>> +
>>> +	} while (read_seqretry(&xtime_lock, seq));
>>> +	return nsecs + (secs * NSEC_PER_SEC);
>>> +}
>>> +EXPORT_SYMBOL_GPL(getnsboottime);
>>> +
>>>   /**
>>>    * do_gettimeofday - Returns the time of day in a timeval
>>>    * @tv:		pointer to the timeval to be set
>>>      
>>    
> 
> Yes, we should probably change the name before making this an actual 
> kernel API, John made some better suggestions.
> 
> For kvm-kmod, the following conversion should work:
> 
> static inline u64 get_kernel_ns(void)
> {
>      struct timespec ts;
> 
>      WARN_ON(preemptible());
>      ktime_get_ts(&ts);
>      monotonic_to_bootbased(&ts);
>      return timespec_to_ns(&ts);
> }
> 
> The only real point to getnsboottime is to stop the unnecessary 
> conversions, but looking at it now, it doesn't appear to actually save 
> any, does it?  Maybe it is better to just drop the thing all-together.

It looks like. Will you post a removal patch kvm.git? I'll better wait
with updating kvm-kmod then.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

  reply	other threads:[~2010-08-30 18:08 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1282291669-25709-1-git-send-email-zamsden@redhat.com>
2010-08-20  8:07 ` [KVM timekeeping 01/35] Drop vm_init_tsc Zachary Amsden
2010-08-20 16:54   ` Glauber Costa
2010-08-20  8:07 ` [KVM timekeeping 02/35] Convert TSC writes to TSC offset writes Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 03/35] Move TSC offset writes to common code Zachary Amsden
2010-08-20 17:06   ` Glauber Costa
2010-08-24  0:51     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 04/35] Fix SVM VMCB reset Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 05/35] Move TSC reset out of vmcb_init Zachary Amsden
2010-08-20 17:08   ` Glauber Costa
2010-08-24  0:52     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 06/35] TSC reset compensation Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 07/35] Make cpu_tsc_khz updates use local CPU Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 08/35] Warn about unstable TSC Zachary Amsden
2010-08-20 17:28   ` Glauber Costa
2010-08-24  0:56     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 09/35] Unify TSC logic Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 10/35] Fix deep C-state TSC desynchronization Zachary Amsden
2010-08-20 17:30   ` Glauber Costa
2010-09-14  9:10   ` Jan Kiszka
2010-09-14  9:27     ` Avi Kivity
2010-09-14 10:40       ` Jan Kiszka
2010-09-14 10:47         ` Avi Kivity
2010-09-14 19:32         ` Zachary Amsden
2010-09-14 22:26           ` Jan Kiszka
2010-09-14 23:40             ` Zachary Amsden
2010-09-15  5:34               ` Jan Kiszka
2010-09-15  7:55                 ` Avi Kivity
2010-09-15  8:04                   ` Jan Kiszka
2010-09-15 12:29               ` Glauber Costa
2010-09-15  4:07     ` Zachary Amsden
2010-09-15  8:09       ` Jan Kiszka
2010-09-15 12:32         ` Glauber Costa
2010-09-15 18:27           ` Jan Kiszka
2010-09-17 22:09             ` Zachary Amsden
2010-09-17 22:31               ` Zachary Amsden
2010-09-18 23:53                 ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 11/35] Add helper functions for time computation Zachary Amsden
2010-08-20 17:34   ` Glauber Costa
2010-08-24  0:58     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 12/35] Robust TSC compensation Zachary Amsden
2010-08-20 17:40   ` Glauber Costa
2010-08-24  1:01     ` Zachary Amsden
2010-08-24 21:33   ` Daniel Verkamp
2010-08-20  8:07 ` [KVM timekeeping 13/35] Perform hardware_enable in CPU_STARTING callback Zachary Amsden
2010-08-27 16:32   ` Jan Kiszka
2010-08-27 23:43     ` Zachary Amsden
2010-08-30  9:10       ` Jan Kiszka
2010-08-20  8:07 ` [KVM timekeeping 14/35] Add clock sync request to hardware enable Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 15/35] Move scale_delta into common header Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 16/35] Fix a possible backwards warp of kvmclock Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 17/35] Implement getnsboottime kernel API Zachary Amsden
2010-08-20 18:39   ` john stultz
2010-08-20 23:37     ` Zachary Amsden
2010-08-21  0:02       ` john stultz
2010-08-21  0:52         ` Zachary Amsden
2010-08-21  1:04           ` john stultz
2010-08-21  1:22             ` Zachary Amsden
2010-08-27 18:05   ` Jan Kiszka
2010-08-27 23:48     ` Zachary Amsden
2010-08-30 18:07       ` Jan Kiszka [this message]
2010-08-20  8:07 ` [KVM timekeeping 18/35] Use getnsboottime in KVM Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 19/35] Add timekeeping documentation Zachary Amsden
2010-08-20 17:50   ` Glauber Costa
2010-08-20  8:07 ` [KVM timekeeping 20/35] Make math work for other scales Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 21/35] Track max tsc_khz Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 22/35] Track tsc last write in vcpu Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 23/35] Set initial TSC rate conversion factors Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 24/35] Timer request function renaming Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 25/35] Add clock catchup mode Zachary Amsden
2010-08-25 17:27   ` Marcelo Tosatti
2010-08-25 20:48     ` Zachary Amsden
2010-08-25 22:01       ` Marcelo Tosatti
2010-08-25 23:38         ` Glauber Costa
2010-08-26  0:17         ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 26/35] Catchup slower TSC to guest rate Zachary Amsden
2010-09-07  3:44   ` Dong, Eddie
2010-09-07 22:14     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 27/35] Add TSC trapping Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 28/35] Unstable TSC write compensation Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 29/35] TSC overrun protection Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 30/35] IOCTL for setting TSC rate Zachary Amsden
2010-08-20 17:56   ` Glauber Costa
2010-08-21 16:11     ` Arnd Bergmann
2010-08-20  8:07 ` [KVM timekeeping 31/35] Exit conditions for TSC trapping Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 32/35] Entry " Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 33/35] Indicate reliable TSC in kvmclock Zachary Amsden
2010-08-20 17:45   ` Glauber Costa
2010-08-24  1:14     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 34/35] Remove dead code Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 35/35] Add some debug stuff Zachary Amsden

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=4C7BF36F.5080306@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=johnstul@us.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=zamsden@redhat.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;
as well as URLs for NNTP newsgroup(s).