increase wall clock time measurement accuracy

NTP is prone to time correction, so use System.nanoTime() (which is monotonic) instead of System.currentTimeMillis() (which granularity is not always great anyway) to measure wall clock time