OPTEE TRNG vs PRNG Impact on Cyclictest Latencies

Headline:

What is being compared

"OoB" is the out-of-the-box OPTEE binary that uses the hardware TRNG path. "PRNG" is the OPTEE binary rebuilt with the TRNG path replaced by a software pseudo-RNG.

SDK test pairs (8)

Aggregate Δmax (B − A) where A=OoB, B=PRNG, so negative = PRNG better:
Core0: mean Δmax0 = -31.8 µs  |  PRNG better in 7/8 pairs, worse in 1, tied in 0.
Core1: mean Δmax1 = -45.0 µs  |  PRNG better in 8/8 pairs, worse in 0, tied in 0.
condition (fixed)OoB filemax0max1PRNG filemax0max1Δmax0Δmax1plot
col=SDK test, fs=base, optee=oob, iso=n, ddr=n260522_251122260522_45463+3-59histograms ↓
col=SDK test, fs=base, optee=oob, iso=n, ddr=Y260524_17285260523_35483-18-2histograms ↓
col=SDK test, fs=base, optee=oob, iso=Y, ddr=n260530_1108102260531_16237-46-65histograms ↓
col=SDK test, fs=base, optee=oob, iso=Y, ddr=Y260524_39384260527_16737-26-47histograms ↓
col=SDK test, fs=default, optee=oob, iso=n, ddr=n260518_112666260519_16255-64-11histograms ↓
col=SDK test, fs=default, optee=oob, iso=n, ddr=Y260526_4104107260531_48168-23-39histograms ↓
col=SDK test, fs=default, optee=oob, iso=Y, ddr=n260530_4101111260530_26136-40-75histograms ↓
col=SDK test, fs=default, optee=oob, iso=Y, ddr=Y260526_210499260524_26437-40-62histograms ↓

Customer test (-i1000) pairs (8)

Aggregate Δmax (B − A) where A=OoB, B=PRNG, so negative = PRNG better:
Core0: mean Δmax0 = -144.9 µs  |  PRNG better in 8/8 pairs, worse in 0, tied in 0.
Core1: mean Δmax1 = -19.2 µs  |  PRNG better in 4/8 pairs, worse in 4, tied in 0.
condition (fixed)OoB filemax0max1PRNG filemax0max1Δmax0Δmax1plot
col=Customer -i1000, fs=base, optee=oob, iso=n, ddr=n260529_146072260531_319873-262+1histograms ↓
col=Customer -i1000, fs=base, optee=oob, iso=n, ddr=Y260528_320369260528_28349-120-20histograms ↓
col=Customer -i1000, fs=base, optee=oob, iso=Y, ddr=n260529_4250180260530_3175149-75-31histograms ↓
col=Customer -i1000, fs=base, optee=oob, iso=Y, ddr=Y260525_1240113260526_172116-168+3histograms ↓
col=Customer -i1000, fs=default, optee=oob, iso=n, ddr=n260529_226978260531_225272-17-6histograms ↓
col=Customer -i1000, fs=default, optee=oob, iso=n, ddr=Y260528_425159260528_18363-168+4histograms ↓
col=Customer -i1000, fs=default, optee=oob, iso=Y, ddr=n260522_3475266260529_3251159-224-107histograms ↓
col=Customer -i1000, fs=default, optee=oob, iso=Y, ddr=Y260525_2226133260523_2101135-125+2histograms ↓

Customer test (-M) pairs (1)

Aggregate Δmax (B − A) where A=OoB, B=PRNG, so negative = PRNG better:
Core0: mean Δmax0 = -58.0 µs  |  PRNG better in 1/1 pairs, worse in 0, tied in 0.
Core1: mean Δmax1 = +63.0 µs  |  PRNG better in 0/1 pairs, worse in 1, tied in 0.
condition (fixed)OoB filemax0max1PRNG filemax0max1Δmax0Δmax1plot
col=Customer -M, fs=default, optee=oob, iso=Y, ddr=n260521_1324165260521_3266228-58+63histograms ↓

Customer test (-i200 -M) pairs (3)

Aggregate Δmax (B − A) where A=OoB, B=PRNG, so negative = PRNG better:
Core0: mean Δmax0 = -53.0 µs  |  PRNG better in 2/3 pairs, worse in 1, tied in 0.
Core1: mean Δmax1 = -48.0 µs  |  PRNG better in 2/3 pairs, worse in 1, tied in 0.
condition (fixed)OoB filemax0max1PRNG filemax0max1Δmax0Δmax1plot
col=Customer -i200 -M, fs=base, optee=oob, iso=Y, ddr=Y260525_3234221260526_312371-111-150histograms ↓
col=Customer -i200 -M, fs=default, optee=oob, iso=Y, ddr=n260520_2127113260521_2152147+25+34histograms ↓
col=Customer -i200 -M, fs=default, optee=oob, iso=Y, ddr=Y260525_412698260523_15370-73-28histograms ↓

Conclusions

  1. For the SDK test: OPTEE-PRNG improves Core1 max in 8/8 pairs and is not contradicted by any data point. Improvement is largest when isolated (max1 typically drops from ~100 µs to ~37 µs).
  2. For the customer test, OPTEE-PRNG removes a Core0 outlier source. Pair after pair, OoB Core0 max sits in the 200-475 µs range while PRNG Core0 max sits in the 70-250 µs range under the same conditions. The histograms show that the OoB Core0 tail extends ~100-300 µs further than PRNG.
  3. OPTEE choice does not strongly determine customer-test Core1 max. Three pairs show meaningful Core1 reductions with PRNG (-20, -31, -107 µs); five pairs are flat within ±10 µs.
  4. If the goal is minimum customer-test Core1 max: OPTEE-PRNG does not make Core1 max meaningfully worse and it halves Core0 outliers, but it is not the lever that gets Core1 max down. The Core1 lever is core isolation OFF and DDR QoS modifications (covered in their own reports).

Caveats

Appendix — per-pair histogram overlays

Reading the plots: filled circles are the baseline (A) run, "x" markers are the changed (B) run. The top panel is Core 0, the bottom panel is Core 1, both on a log-y count axis. A bump in the A curve that vanishes in the B curve is direct visual evidence that the factor under test produced or removed a latency cluster.

SDK test

fs=base, OPTEE=oob, iso=n, DDR=n  |  OoB=260522_2 (max0=51, max1=122) vs PRNG=260522_4 (max0=54, max1=63)   ↑ back to top
fs=base, OPTEE=oob, iso=n, DDR=Y  |  OoB=260524_1 (max0=72, max1=85) vs PRNG=260523_3 (max0=54, max1=83)   ↑ back to top
fs=base, OPTEE=oob, iso=Y, DDR=n  |  OoB=260530_1 (max0=108, max1=102) vs PRNG=260531_1 (max0=62, max1=37)   ↑ back to top
fs=base, OPTEE=oob, iso=Y, DDR=Y  |  OoB=260524_3 (max0=93, max1=84) vs PRNG=260527_1 (max0=67, max1=37)   ↑ back to top
fs=default, OPTEE=oob, iso=n, DDR=n  |  OoB=260518_1 (max0=126, max1=66) vs PRNG=260519_1 (max0=62, max1=55)   ↑ back to top
fs=default, OPTEE=oob, iso=n, DDR=Y  |  OoB=260526_4 (max0=104, max1=107) vs PRNG=260531_4 (max0=81, max1=68)   ↑ back to top
fs=default, OPTEE=oob, iso=Y, DDR=n  |  OoB=260530_4 (max0=101, max1=111) vs PRNG=260530_2 (max0=61, max1=36)   ↑ back to top
fs=default, OPTEE=oob, iso=Y, DDR=Y  |  OoB=260526_2 (max0=104, max1=99) vs PRNG=260524_2 (max0=64, max1=37)   ↑ back to top

Customer test (-i1000)

fs=base, OPTEE=oob, iso=n, DDR=n  |  OoB=260529_1 (max0=460, max1=72) vs PRNG=260531_3 (max0=198, max1=73)   ↑ back to top
fs=base, OPTEE=oob, iso=n, DDR=Y  |  OoB=260528_3 (max0=203, max1=69) vs PRNG=260528_2 (max0=83, max1=49)   ↑ back to top
fs=base, OPTEE=oob, iso=Y, DDR=n  |  OoB=260529_4 (max0=250, max1=180) vs PRNG=260530_3 (max0=175, max1=149)   ↑ back to top
fs=base, OPTEE=oob, iso=Y, DDR=Y  |  OoB=260525_1 (max0=240, max1=113) vs PRNG=260526_1 (max0=72, max1=116)   ↑ back to top
fs=default, OPTEE=oob, iso=n, DDR=n  |  OoB=260529_2 (max0=269, max1=78) vs PRNG=260531_2 (max0=252, max1=72)   ↑ back to top
fs=default, OPTEE=oob, iso=n, DDR=Y  |  OoB=260528_4 (max0=251, max1=59) vs PRNG=260528_1 (max0=83, max1=63)   ↑ back to top
fs=default, OPTEE=oob, iso=Y, DDR=n  |  OoB=260522_3 (max0=475, max1=266) vs PRNG=260529_3 (max0=251, max1=159)   ↑ back to top
fs=default, OPTEE=oob, iso=Y, DDR=Y  |  OoB=260525_2 (max0=226, max1=133) vs PRNG=260523_2 (max0=101, max1=135)   ↑ back to top

Customer test (-M)

fs=default, OPTEE=oob, iso=Y, DDR=n  |  OoB=260521_1 (max0=324, max1=165) vs PRNG=260521_3 (max0=266, max1=228)   ↑ back to top

Customer test (-i200 -M)

fs=base, OPTEE=oob, iso=Y, DDR=Y  |  OoB=260525_3 (max0=234, max1=221) vs PRNG=260526_3 (max0=123, max1=71)   ↑ back to top
fs=default, OPTEE=oob, iso=Y, DDR=n  |  OoB=260520_2 (max0=127, max1=113) vs PRNG=260521_2 (max0=152, max1=147)   ↑ back to top
fs=default, OPTEE=oob, iso=Y, DDR=Y  |  OoB=260525_4 (max0=126, max1=98) vs PRNG=260523_1 (max0=53, max1=70)   ↑ back to top