[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Use mach_approximate_time() for coarse time where available.
commit 021fdd39e4ebbe8ddee9b10823af76fbb11e7878
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Fri Dec 8 09:24:02 2017 -0500
Use mach_approximate_time() for coarse time where available.
This lets us have a coarse-time implementation with reasonable
performance characteristics on OSX and iOS.
Implements 24427.
---
changes/feature24427 | 5 +++++
configure.ac | 1 +
src/common/compat_time.c | 15 +++++++++++++++
src/common/compat_time.h | 3 +++
4 files changed, 24 insertions(+)
diff --git a/changes/feature24427 b/changes/feature24427
new file mode 100644
index 000000000..8650c45d3
--- /dev/null
+++ b/changes/feature24427
@@ -0,0 +1,5 @@
+ o Minor features (OSX, iOS, performance):
+ - Use the mach_approximate_time() function (when available) to
+ implement coarse monotonic time. Having a coarse time function
+ should avoid a large number of system calls, and improve
+ performance slightly, especially under load. Closes ticket 24427.
diff --git a/configure.ac b/configure.ac
index 0b3e1dda2..84ae9090b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -506,6 +506,7 @@ AC_CHECK_FUNCS(
llround \
localtime_r \
lround \
+ mach_approximate_time \
memmem \
memset_s \
pipe \
diff --git a/src/common/compat_time.c b/src/common/compat_time.c
index 204b8d7d1..c0cd73c74 100644
--- a/src/common/compat_time.c
+++ b/src/common/compat_time.c
@@ -314,6 +314,21 @@ monotime_get(monotime_t *out)
out->abstime_ = mach_absolute_time();
}
+#if defined(HAVE_MACH_APPROXIMATE_TIME)
+void
+monotime_coarse_get(monotime_coarse_t *out)
+{
+#ifdef TOR_UNIT_TESTS
+ if (monotime_mocking_enabled) {
+ out->abstime_ = (mock_time_nsec_coarse * mach_time_info.denom)
+ / mach_time_info.numer;
+ return;
+ }
+#endif /* defined(TOR_UNIT_TESTS) */
+ out->abstime_ = mach_approximate_time();
+}
+#endif
+
/**
* Return the number of nanoseconds between <b>start</b> and <b>end</b>.
*/
diff --git a/src/common/compat_time.h b/src/common/compat_time.h
index 462dcecce..bcf469e27 100644
--- a/src/common/compat_time.h
+++ b/src/common/compat_time.h
@@ -65,6 +65,9 @@ typedef struct monotime_t {
typedef struct monotime_coarse_t {
uint64_t tick_count_;
} monotime_coarse_t;
+#elif defined(__APPLE__) && defined(HAVE_MACH_APPROXIMATE_TIME)
+#define MONOTIME_COARSE_FN_IS_DIFFERENT
+#define monotime_coarse_t monotime_t
#else
#define monotime_coarse_t monotime_t
#endif /* defined(CLOCK_MONOTONIC_COARSE) && ... || ... */
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits