You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.5 KiB
68 lines
2.5 KiB
commit 04efdcfac405723c23b25d124817bcfc1697e2d8 |
|
Author: Noah Goldstein <goldstein.w.n@gmail.com> |
|
Date: Wed Apr 27 15:13:02 2022 -0500 |
|
|
|
sysdeps: Add 'get_fast_jitter' interace in fast-jitter.h |
|
|
|
'get_fast_jitter' is meant to be used purely for performance |
|
purposes. In all cases it's used it should be acceptable to get no |
|
randomness (see default case). An example use case is in setting |
|
jitter for retries between threads at a lock. There is a |
|
performance benefit to having jitter, but only if the jitter can |
|
be generated very quickly and ultimately there is no serious issue |
|
if no jitter is generated. |
|
|
|
The implementation generally uses 'HP_TIMING_NOW' iff it is |
|
inlined (avoid any potential syscall paths). |
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com> |
|
|
|
(cherry picked from commit 911c63a51c690dd1a97dfc587097277029baf00f) |
|
|
|
diff --git a/sysdeps/generic/fast-jitter.h b/sysdeps/generic/fast-jitter.h |
|
new file mode 100644 |
|
index 0000000000000000..4dd53e3475c3dfe6 |
|
--- /dev/null |
|
+++ b/sysdeps/generic/fast-jitter.h |
|
@@ -0,0 +1,42 @@ |
|
+/* Fallback for fast jitter just return 0. |
|
+ Copyright (C) 2019-2022 Free Software Foundation, Inc. |
|
+ This file is part of the GNU C Library. |
|
+ |
|
+ The GNU C Library is free software; you can redistribute it and/or |
|
+ modify it under the terms of the GNU Lesser General Public |
|
+ License as published by the Free Software Foundation; either |
|
+ version 2.1 of the License, or (at your option) any later version. |
|
+ |
|
+ The GNU C Library is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
+ Lesser General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU Lesser General Public |
|
+ License along with the GNU C Library; if not, see |
|
+ <https://www.gnu.org/licenses/>. */ |
|
+ |
|
+#ifndef _FAST_JITTER_H |
|
+# define _FAST_JITTER_H |
|
+ |
|
+# include <stdint.h> |
|
+# include <hp-timing.h> |
|
+ |
|
+/* Baseline just return 0. We could create jitter using a clock or |
|
+ 'random_bits' but that may imply a syscall and the goal of |
|
+ 'get_fast_jitter' is minimal overhead "randomness" when such |
|
+ randomness helps performance. Adding high overhead the function |
|
+ defeats the purpose. */ |
|
+static inline uint32_t |
|
+get_fast_jitter (void) |
|
+{ |
|
+# if HP_TIMING_INLINE |
|
+ hp_timing_t jitter; |
|
+ HP_TIMING_NOW (jitter); |
|
+ return (uint32_t) jitter; |
|
+# else |
|
+ return 0; |
|
+# endif |
|
+} |
|
+ |
|
+#endif
|
|
|