• Jianyong Wu's avatar
    ptp: arm/arm64: Enable ptp_kvm for arm/arm64 · 300bb1fe
    Jianyong Wu authored
    Currently, there is no mechanism to keep time sync between guest and host
    in arm/arm64 virtualization environment. Time in guest will drift compared
    with host after boot up as they may both use third party time sources
    to correct their time respectively. The time deviation will be in order
    of milliseconds. But in some scenarios,like in cloud environment, we ask
    for higher time precision.
    
    kvm ptp clock, which chooses the host clock source as a reference
    clock to sync time between guest and host, has been adopted by x86
    which takes the time sync order from milliseconds to nanoseconds.
    
    This patch enables kvm ptp clock for arm/arm64 and improves clock sync precision
    significantly.
    
    Test result comparisons between with kvm ptp clock and without it in arm/arm64
    are as follows. This test derived from the result of command 'chronyc
    sources'. we should take more care of the last sample column which shows
    the offset between the local clock and the source at the last measurement.
    
    no kvm ptp in guest:
    MS Name/IP address   Stratum Poll Reach LastRx Last sample
    ========================================================================
    ^* dns1.synet.edu.cn      2   6   377    13  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    21  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    29  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    37  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    45  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    53  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    61  +1040us[+1581us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377     4   -130us[ +796us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    12   -130us[ +796us] +/-   21ms
    ^* dns1.synet.edu.cn      2   6   377    20   -130us[ +796us] +/-   21ms
    
    in host:
    MS Name/IP address   Stratum Poll Reach LastRx Last sample
    ========================================================================
    ^* 120.25.115.20          2   7   377    72   -470us[ -603us] +/-   18ms
    ^* 120.25.115.20          2   7   377    92   -470us[ -603us] +/-   18ms
    ^* 120.25.115.20          2   7   377   112   -470us[ -603us] +/-   18ms
    ^* 120.25.115.20          2   7   377     2   +872ns[-6808ns] +/-   17ms
    ^* 120.25.115.20          2   7   377    22   +872ns[-6808ns] +/-   17ms
    ^* 120.25.115.20          2   7   377    43   +872ns[-6808ns] +/-   17ms
    ^* 120.25.115.20          2   7   377    63   +872ns[-6808ns] +/-   17ms
    ^* 120.25.115.20          2   7   377    83   +872ns[-6808ns] +/-   17ms
    ^* 120.25.115.20          2   7   377   103   +872ns[-6808ns] +/-   17ms
    ^* 120.25.115.20          2   7   377   123   +872ns[-6808ns] +/-   17ms
    
    The dns1.synet.edu.cn is the network reference clock for guest and
    120.25.115.20 is the network reference clock for host. we can't get the
    clock error between guest and host directly, but a roughly estimated value
    will be in order of hundreds of us to ms.
    
    with kvm ptp in guest:
    chrony has been disabled in host to remove the disturb by network clock.
    
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ========================================================================
    * PHC0                    0   3   377     8     -7ns[   +1ns] +/-    3ns
    * PHC0                    0   3   377     8     +1ns[  +16ns] +/-    3ns
    * PHC0                    0   3   377     6     -4ns[   -0ns] +/-    6ns
    * PHC0                    0   3   377     6     -8ns[  -12ns] +/-    5ns
    * PHC0                    0   3   377     5     +2ns[   +4ns] +/-    4ns
    * PHC0                    0   3   377    13     +2ns[   +4ns] +/-    4ns
    * PHC0                    0   3   377    12     -4ns[   -6ns] +/-    4ns
    * PHC0                    0   3   377    11     -8ns[  -11ns] +/-    6ns
    * PHC0                    0   3   377    10    -14ns[  -20ns] +/-    4ns
    * PHC0                    0   3   377     8     +4ns[   +5ns] +/-    4ns
    
    The PHC0 is the ptp clock which choose the host clock as its source
    clock. So we can see that the clock difference between host and guest
    is in order of ns.
    
    Cc: Mark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
    Signed-off-by: default avatarJianyong Wu <jianyong.wu@arm.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20201209060932.212364-8-jianyong.wu@arm.com
    300bb1fe
arm_arch_timer.c 43.7 KB