Thread (19 messages) flat view 19 messages, 2 authors, 2021-02-03

RE: [PATCH v16 0/9] Enable ptp_kvm for arm/arm64

From: Jianyong Wu <hidden>
Date: 2021-02-03 02:41:20
Also in: kvm, kvmarm, lkml, netdev

Hi Marc,
-----Original Message-----
From: Marc Zyngier <maz@kernel.org>
Sent: Tuesday, February 2, 2021 10:15 PM
To: Jianyong Wu <redacted>
Cc: netdev@vger.kernel.org; yangbo.lu@nxp.com; john.stultz@linaro.org;
tglx@linutronix.de; pbonzini@redhat.com; richardcochran@gmail.com; Mark
Rutland [off-list ref]; will@kernel.org; Suzuki Poulose
[off-list ref]; Andre Przywara [off-list ref];
Steven Price [off-list ref]; linux-kernel@vger.kernel.org; linux-
arm-kernel@lists.infradead.org; kvmarm@lists.cs.columbia.edu;
kvm@vger.kernel.org; Steve Capper [off-list ref]; Justin He
[off-list ref]; nd [off-list ref]
Subject: Re: [PATCH v16 0/9] Enable ptp_kvm for arm/arm64

On 2020-12-09 06:09, Jianyong Wu wrote:
quoted
Currently, we offen use ntp (sync time with remote network clock) to
sync time in VM. But the precision of ntp is subject to network delay
so it's difficult to sync time in a high precision.

kvm virtual ptp clock (ptp_kvm) offers another way to sync time in VM,
as the remote clock locates in the host instead of remote network
clock.
It targets to sync time between guest and host in virtualization
environment and in this way, we can keep the time of all the VMs
running in the same host in sync. In general, the delay of
communication between host and guest is quiet small, so ptp_kvm can
offer time sync precision up to in order of nanosecond. Please keep in
mind that ptp_kvm just limits itself to be a channel which transmit
the remote clock from host to guest and leaves the time sync jobs to
an application, eg.
chrony,
in usersapce in VM.

How ptp_kvm works:
After ptp_kvm initialized, there will be a new device node under /dev
called ptp%d. A guest userspace service, like chrony, can use this
device to get host walltime, sometimes also counter cycle, which
depends on the service it calls. Then this guest userspace service can
use those data to do the time sync for guest.
here is a rough sketch to show how kvm ptp clock works.

|----------------------------|
|--------------------------|
|       guest userspace      |              |          host
|
|ioctl -> /dev/ptp%d         |              |
|
|       ^   |                |              |
|
|----------------------------|              |
|
|       |   | guest kernel   |              |
|
|       |   V      (get host walltime/counter cycle)
|
|      ptp_kvm -> hypercall - - - - - - - - - - ->hypercall service
|
|                         <- - - - - - - - - - - -
|
|----------------------------|
|--------------------------|

1. time sync service in guest userspace call ptp device through
/dev/ptp%d.
2. ptp_kvm module in guest receives this request then invoke hypercall
to route into host kernel to request host walltime/counter cycle.
3. ptp_kvm hypercall service in host response to the request and send
data back.
4. ptp (not ptp_kvm) in guest copy the data to userspace.

This ptp_kvm implementation focuses itself to step 2 and 3 and step 2
works in guest comparing step 3 works in host kernel.
FWIW, and in order to speed up the review, I've posted a reworked
version[0] of this series with changes that address the comments I had for on
v16.
Great!!!
Good news for me, thanks Marc.

Thanks
Jianyong
Thanks,

         M.

[0] https://lore.kernel.org/r/20210202141204.3134855-1-maz@kernel.org (local)
--
Jazz is not dead. It just smells funny...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help