繁体   English   中英

Centos 7,System.nanoTime比Windows慢400倍

[英]Centos 7, 400x slower for System.nanoTime than windows

我已经看过并阅读了有关为什么System.nanoTime()在某些操作系统上比其他操作系统更慢的帖子,但是我从来没有看到任何解释我现在看到的差异的东西。 使用JMH,我正在运行此基准测试。 (注意:它也使用System.nanoTime())

@Benchmark
public long systemNanoTime() {
    return System.nanoTime();
}

在Windows 10上,这需要大约25 ns。

在Centos 7上,Linux 3.10测量为~10293 ns。

这是在同一台机器上,Intel(R)Core(TM)i7-7820X CPU @ 3.60GHz

是否有选项可以改变JDK获取系统时钟的方式?


编辑:根据托德提供的链接,似乎tsc不可用

# more /sys/devices/system/clocksource/clocksource0/*
::::::::::::::
/sys/devices/system/clocksource/clocksource0/available_clocksource
::::::::::::::
hpet acpi_pm 
::::::::::::::
/sys/devices/system/clocksource/clocksource0/current_clocksource
::::::::::::::
hpet

表演后

echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource

延迟有所改善,但仍然很差,延迟为1,816 ns。

我试图找出TSC时钟源是否可以添加到Centos,但还没有运气。


编辑:进一步挖掘

# dmesg | grep -i tsc
[    0.000000] tsc: Detected 3600.000 MHz processor
[    0.058602] TSC deadline timer enabled
[    0.065868] TSC synchronization [CPU#0 -> CPU#1]:
[    0.065870] Measured 679995254538 cycles TSC warp between CPUs, turning off TSC clock.
[    0.065874] tsc: Marking TSC unstable due to check_tsc_sync_source failed
[  125.451480] Override clocksource tsc is not HRT compatible. Cannot switch while in HRT/NOHZ mode

基于@ apangin的建议,我在此页面上添加了最新版本的centos备用存储库

http://elrepo.org/tiki/tiki-index.php

然后按照这里的进一步说明进行操作

https://www.tecmint.com/install-upgrade-kernel-version-in-centos-7/

安装并重新启动后

# $ dmesg | grep -i tsc
[    0.001000] tsc: Detected 3600.000 MHz processor
[    0.001000] [Firmware Bug]: TSC ADJUST: CPU0: -2100392876408 force to 0
[    0.046075] TSC deadline timer enabled
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU1: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU2: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU3: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU4: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU5: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU6: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU7: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU8: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU9: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU10: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU11: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU12: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU13: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU14: 0
[    0.001000] [Firmware Bug]: TSC ADJUST differs: Reference CPU0: -2100392876408 CPU15: 0
[    1.337843] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x6c1bafbc2ab, max_idle_ns: 881591058496 ns
[    2.353636] clocksource: Switched to clocksource tsc

建议内核正在调整固件错误。

再次运行测试,使用System.nanoTime()得到平均延迟为40 ns,这是一个260倍的改进。 这也意味着使用此度量的基准更有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM