[v3,1/2] timer/linux: lower rounding of tsc estimation to 100KHz

Message ID 20241001002527.277838-2-iboukris@gmail.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Improve TSC frequency accuracy on Linux |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Isaac Boukris Oct. 1, 2024, 12:22 a.m. UTC
In practice, the estimation result is just a couple of KHz
away from the kernel's tsc_khz value, so it should suffice.

Rounding to 10MHz can cause a significant drift from real time,
up to a second per 10 minutes.

See also bugzilla: 959

Signed-off-by: Isaac Boukris <iboukris@gmail.com>
---
 lib/eal/linux/eal_timer.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
  

Comments

Stephen Hemminger Oct. 1, 2024, 3:18 p.m. UTC | #1
On Tue,  1 Oct 2024 03:22:50 +0300
Isaac Boukris <iboukris@gmail.com> wrote:

> In practice, the estimation result is just a couple of KHz
> away from the kernel's tsc_khz value, so it should suffice.
> 
> Rounding to 10MHz can cause a significant drift from real time,
> up to a second per 10 minutes.
> 
> See also bugzilla: 959
> 
> Signed-off-by: Isaac Boukris <iboukris@gmail.com>
> ---

Acked-by: Stephen Hemminger <stephen@networkplumber.org>
  

Patch

diff --git a/lib/eal/linux/eal_timer.c b/lib/eal/linux/eal_timer.c
index 1cb1e92193..f56a7ae15b 100644
--- a/lib/eal/linux/eal_timer.c
+++ b/lib/eal/linux/eal_timer.c
@@ -192,7 +192,7 @@  get_tsc_freq(void)
 {
 #ifdef CLOCK_MONOTONIC_RAW
 #define NS_PER_SEC 1E9
-#define CYC_PER_10MHZ 1E7
+#define CYC_PER_100KHZ 1E5
 
 	struct timespec sleeptime = {.tv_nsec = NS_PER_SEC / 10 }; /* 1/10 second */
 
@@ -209,8 +209,8 @@  get_tsc_freq(void)
 
 		double secs = (double)ns/NS_PER_SEC;
 		tsc_hz = (uint64_t)((end - start)/secs);
-		/* Round up to 10Mhz. 1E7 ~ 10Mhz */
-		return RTE_ALIGN_MUL_NEAR(tsc_hz, CYC_PER_10MHZ);
+		/* Round up to 100Khz. 1E5 ~ 100Khz */
+		return RTE_ALIGN_MUL_NEAR(tsc_hz, CYC_PER_100KHZ);
 	}
 #endif
 	return 0;