HomeFreeBSD

Add prng(9) API

Description

Add prng(9) API

Add prng(9) as a replacement for random(9) in the kernel.

There are two major differences from random(9) and random(3):

  • General prng(9) APIs (prng32(9), etc) do not guarantee an implementation or particular sequence; they should not be used for repeatable simulations.
  • However, specific named API families are also exposed (for now: PCG), and those are expected to be repeatable (when so-guaranteed by the named algorithm).

Some minor differences from random(3) and earlier random(9):

  • PRNG state for the general prng(9) APIs is per-CPU; this eliminates contention on PRNG state in SMP workloads. Each PCPU generator in an SMP system produces a unique sequence.
  • Better statistical properties than the Park-Miller ("minstd") PRNG (longer period, uniform distribution in all bits, passes BigCrush/PractRand analysis).
  • Faster than Park-Miller ("minstd") PRNG -- no division is required to step PCG-family PRNGs.

For now, random(9) becomes a thin shim around prng32(). Eventually I
would like to mechanically switch consumers over to the explicit API.

Reviewed by: kib, markj (previous version both)
Discussed with: markm
Differential Revision: https://reviews.freebsd.org/D25916

Details

Provenance
cemAuthored on Aug 13 2020, 8:48 PM
Parents
rG1e04d9ff3e25: Fix a typo in the cpp macro defined for PIC.
Branches
Unknown
Tags
Unknown