[RFC,v3,0/2] Pseudo-random number generation improvements
mbox series

Message ID 20190424123320.19610-1-mattias.ronnblom@ericsson.com
Headers show
  • Pseudo-random number generation improvements
Related show


Mattias Rönnblom April 24, 2019, 12:33 p.m. UTC
Make rte_rand() multi-thread safe, go faster and produce
better-quality pseudo-random numbers.

Thanks to Stephen Hemminger, Keith Wiles and Neil Horman for valuable

* Since rte_rand() and rte_srand() have been a part of the API since long,
  the experimental attribute was removed and the symbols were moved out
  of the experimental section of the version.map file.
* rte_rand_max() performance improvements:
  * Avoid repeated rte_lcore_id() calls.
  * Handle a power-of-2 upper bound as a special case.
* Added a Bugzilla reference to the rte_rand() MT safety bug.

* Removed 32-bit version of rte_rand() and rte_rand_max().
* Switched from a four-sequence LFSR (producing a 32-bit number)
  to a five-sequence LFSR (producing a 64-bit number).
* Added a note on generator not being cryptographically secure.

Mattias Rönnblom (2):
  eal: replace libc-based random number generation with LFSR
  eal: introduce random generator function with upper bound

 lib/librte_eal/common/include/rte_random.h |  45 +++---
 lib/librte_eal/common/meson.build          |   1 +
 lib/librte_eal/common/rte_random.c         | 176 +++++++++++++++++++++
 lib/librte_eal/freebsd/eal/Makefile        |   1 +
 lib/librte_eal/freebsd/eal/eal.c           |   2 -
 lib/librte_eal/linux/eal/Makefile          |   1 +
 lib/librte_eal/linux/eal/eal.c             |   2 -
 lib/librte_eal/rte_eal_version.map         |   3 +
 8 files changed, 209 insertions(+), 22 deletions(-)
 create mode 100644 lib/librte_eal/common/rte_random.c