J'ai lu et lu des articles sur pourquoi System.nanoTime() est plus lent sur certains systèmes d'exploitation que d'autres, mais je n'ai jamais rien vu pour expliquer la différence que je vois maintenant. En utilisant JMH, j'exécute ce benchmark. (Note: il utilise System.nanoTime() ainsi)Centos 7, 400x plus lent pour System.nanoTime que Windows
@Benchmark
public long systemNanoTime() {
return System.nanoTime();
}
Sous Windows 10, cela prend ~ 25 ns.
Sur Centos 7, Linux 3.10 est mesurée comme prenant ~ 10293 ns.
C'est sur la même machine, Intel (R) Core (TM) CPU @ 3.60GHz i7-7820X
Y at-il une possibilité de changer la façon dont le JDK obtient l'horloge du système?
EDIT: Basé sur le lien fourni par Todd, il semble que tsc n'est pas disponible
# more /sys/devices/system/clocksource/clocksource0/*
::::::::::::::
/sys/devices/system/clocksource/clocksource0/available_clocksource
::::::::::::::
hpet acpi_pm
::::::::::::::
/sys/devices/system/clocksource/clocksource0/current_clocksource
::::::::::::::
hpet
après avoir effectué
echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
La latence améliorée, mais reste faible avec un latence de 1 816 ns.
J'ai essayé de savoir si la source d'horloge TSC peut être ajoutée à Centos, mais pas encore de chance.
EDIT: Creuser un peu plus loin que je suivais cette page basée sur la suggestion de @ 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
Avez-vous regardé ce billet? Il décrit certains de ce que vous voyez et semble bien documenté. http://pzemtsov.github.io/2017/07/23/the-slow-currenttimemillis.html – Todd
Cela ressemble à un bug de firmware. Je pense avoir vu des correctifs de synchronisation tsc dans les nouveaux noyaux (comme 4.10). – apangin