私は、System.nanoTime()が他のOSより遅い理由についての投稿を見て読んだことがありますが、今見ている違いは何も見たことがありません。 JMHを使用して、私はこのベンチマークを実行しています。 (注:System.nanoTime()も使用します)Centos 7、WindowsよりSystem.nanoTimeの速度が400倍遅い
@Benchmark
public long systemNanoTime() {
return System.nanoTime();
}
Windows 10では、これは約25 nsです。
CentOS 7では、Linux 3.10では〜10293 nsと測定されます。
これは、同じマシン上で、インテル(R)Core(TM)i7-7820XのCPU @ 3.60GHzの
JDKは、システムクロックを取得する方法を変更するためのオプションがありますか?
EDIT:トッドによって提供されたリンクに基づいて、それが表示されるTSCは、レイテンシが改善したが、依然と悪い
echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
を実行した後に
# more /sys/devices/system/clocksource/clocksource0/*
::::::::::::::
/sys/devices/system/clocksource/clocksource0/available_clocksource
::::::::::::::
hpet acpi_pm
::::::::::::::
/sys/devices/system/clocksource/clocksource0/current_clocksource
::::::::::::::
hpet
使用できません。レイテンシは1,816nsです。
私は、TSCクロックソースをCentosに追加できるかどうかを確認しようとしましたが、運がまだありません。
EDIT:@のapanginの提案に基づいて、さらに少し
# 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
このブログ記事をチェックしましたか?それはあなたが見ているもののいくつかを説明し、よく研究されているようです。 http://pzemtsov.github.io/2017/07/23/the-slow-currenttimemillis.html – Todd
ファームウェアのバグのようです。私は新しいカーネル(4.10のような)でtsc同期パッチを見たと思う。 – apangin