linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Radim Krcmar <rkrcmar@redhat.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Miroslav Lichvar <mlichvar@redhat.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Richard Cochran <richardcochran@gmail.com>
Subject: Re: [patch 3/3] PTP: add kvm PTP driver
Date: Wed, 18 Jan 2017 16:35:05 +0100	[thread overview]
Message-ID: <20170118153504.GA7031@potion> (raw)
In-Reply-To: <20170118144955.GC9713@amt.cnet>

2017-01-18 12:50-0200, Marcelo Tosatti:
> On Wed, Jan 18, 2017 at 03:02:23PM +0100, Paolo Bonzini wrote:
>> 
>> 
>> On 18/01/2017 14:36, Miroslav Lichvar wrote:
>> > On Wed, Jan 18, 2017 at 01:46:58PM +0100, Paolo Bonzini wrote:
>> >> On 18/01/2017 13:24, Marcelo Tosatti wrote:
>> >>>> Testcase: run a guest and a loop sending SIGUSR1 to vcpu0 (emulating
>> >>>> intense interrupts). Follows results:
>> > 
>> >>>> Do you still want to drop it in favour of simplicity?
>> > 
>> >> It's just that it's not obvious why you get better results with biased
>> >> host timestamps.  What makes the biased host timestamp more precise?
>> >>
>> >> I'd rather use PTP_SYS_OFFSET_PRECISE instead, but unfortunately chrony
>> >> does not support it---but I would still prefer you to support
>> >> PTP_SYS_OFFSET_PRECISE as well.
>> > 
>> > Interesting. I wasn't aware that there is a new ioctl for measuring
>> > the HW-sys offset. Adding support to chrony shouldn't be difficult.
>> > 
>> > If I understand it correctly, PTP_SYS_OFFSET can be emulated on top of
>> > PTP_SYS_OFFSET_PRECISE simply by copying the sys_realtime and device
>> > fields to corresponding ts slots. The apparent delay will be zero, but
>> > that's ok if the conversion is really accurate.
>> 
>> Yes, for 1 sample only.  Otherwise you'd have the same issue as in
>> Marcelo's driver (the device aka guest timestamp from
>> PTP_SYS_OFFSET_PRECISE would not be halfway between the system aka host
>> timestamps), and your idea below could be applied.
>> 
>> > I'm not sure if trying to do that in the opposite direction is a good
>> > idea. An application using PTP_SYS_OFFSET_PRECISE may assume the
>> > conversion is accurate and not include any delay/dispersion in an
>> > estimate of the maximum error, which is needed in NTP for instance.
>> > 
>> > If we know the host timestamp ts[1] is not in the middle between the
>> > guests timestamps ts[0] and ts[2], but rather closer to ts[2], why not
>> > simply shift ts[1] by (ts[2]-ts[0])/2 ?
> 
> 
> 
>> 
>> Interesting idea!  For this to work, KVM needs to implement
>> getcrosstimestamp and ptp_chardev.c can then add an alternative
>> implementation of PTP_SYS_OFFSET, based on precise cross timestamps.
>> 
>> Something like
>> 
>>                 for (i = 0; i <= sysoff->n_samples; i++) {
>> 			// ... call getcrosststamp ...
>> 			sysns = ktime_to_ns(xtstamp.sys_realtime);
>> 			if (i > 0) {
>> 				devns = ktime_to_ns(xtstamp.device);
>> 				devns -= (sysns - prev_sysns) / 2;
>> 				devts = ns_to_timespec(devns);
>> 				pct->sec = devts.tv_sec;
>> 				pct->nsec = devts.tv_nsec;
>> 	                        pct++;
>> 			}
>> 			systs = ns_to_timespec(sysns);
>>                         pct->sec = ts.tv_sec;
>>                         pct->nsec = ts.tv_nsec;
>>                         pct++;
>> 			prev_sysns = sysns;
>>                 }

Nice.  PTP_SYS_OFFSET seems to be mandatory, so this hunk could be
upstreamable as a fallback for PTP devices that have getcrosststamp and
not gettime64.  KVM PTP would be the only driver using it so far.

>> Marcelo, can you give it a try?
> 
> Can convert fine, but problem is the simultaneous read
> of host and guest clocks.
> 
>> Thanks,
>> 
>> Paolo
> 
> It seems to me anything else other than using a single TSC read
> (for both host and guest clocks) is a poor PTP_SYS_OFFSET_PRECISE 
> implementation (because it would claim to be similar to ART, where
> the timestamps are simultaneous), but not be.

Yes, the guest should use the TSC returned by the hypercall to compute
the corresponding guest time, which will allow us to know the
host<->guest offset.

Is this impossible to do with the current API?

Thanks.

  reply	other threads:[~2017-01-18 15:35 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-13 12:01 [patch 0/3] KVM virtual PTP driver Marcelo Tosatti
2017-01-13 12:01 ` [patch 1/3] KVM: x86: provide realtime host clock via vsyscall notifiers Marcelo Tosatti
2017-01-13 15:18   ` Radim Krcmar
2017-01-13 15:34     ` Marcelo Tosatti
2017-01-13 16:28       ` Radim Krcmar
2017-01-13 17:51         ` Marcelo Tosatti
2017-01-16 15:40           ` Radim Krcmar
2017-01-13 15:41     ` Konrad Rzeszutek Wilk
2017-01-13 15:46       ` Marcelo Tosatti
2017-01-13 12:01 ` [patch 2/3] KVM: x86: add KVM_HC_CLOCK_OFFSET hypercall Marcelo Tosatti
2017-01-13 15:31   ` Radim Krcmar
2017-01-13 15:43     ` Marcelo Tosatti
2017-01-13 17:07       ` Radim Krcmar
2017-01-13 17:57         ` Marcelo Tosatti
2017-01-13 12:01 ` [patch 3/3] PTP: add kvm PTP driver Marcelo Tosatti
2017-01-13 15:56   ` Radim Krcmar
2017-01-13 17:40     ` Marcelo Tosatti
2017-01-16 16:26       ` Radim Krcmar
2017-01-16 16:54         ` Radim Krcmar
2017-01-16 17:08           ` Marcelo Tosatti
2017-01-16 17:27             ` Radim Krcmar
2017-01-16 17:39               ` Marcelo Tosatti
2017-01-16 18:01                 ` Radim Krcmar
2017-01-16 19:36                   ` Marcelo Tosatti
2017-01-16 19:47                     ` Marcelo Tosatti
2017-01-16 20:01                       ` Marcelo Tosatti
2017-01-17  8:03                         ` Miroslav Lichvar
2017-01-17 11:30                           ` Marcelo Tosatti
2017-01-17 15:36                             ` Radim Krcmar
2017-01-18 12:17                               ` Marcelo Tosatti
2017-01-18 12:24                                 ` Marcelo Tosatti
2017-01-18 12:46                                   ` Paolo Bonzini
2017-01-18 13:36                                     ` Miroslav Lichvar
2017-01-18 14:02                                       ` Paolo Bonzini
2017-01-18 14:50                                         ` Marcelo Tosatti
2017-01-18 15:35                                           ` Radim Krcmar [this message]
2017-01-18 15:45                                           ` Paolo Bonzini
2017-01-18 15:57                                             ` Marcelo Tosatti
2017-01-18 14:24                                     ` Marcelo Tosatti
2017-01-18 15:54                                       ` Miroslav Lichvar
2017-01-18 16:07                                         ` Paolo Bonzini
2017-01-18 16:14                                         ` Radim Krcmar
2017-01-18 14:37                                     ` Marcelo Tosatti
2017-01-18 14:53                                       ` Marcelo Tosatti
2017-01-18 15:20                                         ` Radim Krcmar
2017-01-18 15:28                                           ` Marcelo Tosatti
2017-01-20 14:18                                             ` Radim Krcmar
2017-01-18 15:59                                     ` Radim Krcmar
2017-01-16 17:04         ` Marcelo Tosatti
2017-01-16 17:46           ` Radim Krcmar
2017-01-16 19:33             ` Marcelo Tosatti
2017-01-14 15:26     ` Richard Cochran
2017-01-16 15:48       ` Radim Krcmar
  -- strict thread matches above, loose matches on Subject: below --
2017-01-13 18:45 [patch 0/3] KVM virtual PTP driver (v2) Marcelo Tosatti
2017-01-13 18:46 ` [patch 3/3] PTP: add kvm PTP driver Marcelo Tosatti

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=20170118153504.GA7031@potion \
    --to=rkrcmar@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlichvar@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=richardcochran@gmail.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).