Linux cryptographic layer development
 help / color / mirror / Atom feed
* Poor RNG performance on Ryzen
@ 2017-07-21  7:12 Oliver Mangold
  2017-07-21  9:26 ` Jan Glauber
  2017-07-21 12:11 ` Jeffrey Walton
  0 siblings, 2 replies; 9+ messages in thread
From: Oliver Mangold @ 2017-07-21  7:12 UTC (permalink / raw)
  To: linux-crypto

Hi,

I was wondering why reading from /dev/urandom is much slower on Ryzen 
than on Intel, and did some analysis. It turns out that the RDRAND 
instruction is at fault, which takes much longer on AMD.

if I read this correctly:

--- drivers/char/random.c ---
     862         spin_lock_irqsave(&crng->lock, flags);
     863         if (arch_get_random_long(&v))
     864                 crng->state[14] ^= v;
     865         chacha20_block(&crng->state[0], out);

one call to RDRAND (with 64-bit operand) is issued per computation of a 
chacha20 block. According to the measurements I did, it seems on Ryzen 
this dominates the time usage:

On Broadwell E5-2650 v4:

---
# dd if=/dev/urandom of=/dev/null bs=1M status=progress
28827451392 bytes (29 GB) copied, 143.290349 s, 201 MB/s
# perf top
   49.88%  [kernel]            [k] chacha20_block
   31.22%  [kernel]            [k] _extract_crng
---

On Ryzen 1800X:

---
# dd if=/dev/urandom of=/dev/null bs=1M status=progress
3169845248 bytes (3,2 GB, 3,0 GiB) copied, 42,0106 s, 75,5 MB/s
# perf top
   76,40%  [kernel]                       [k] _extract_crng
   13,05%  [kernel]                       [k] chacha20_block
---

An easy improvement might be to replace the usage of 
arch_get_random_long() by arch_get_random_int(), as the state array 
contains just 32-bit elements, and (contrary to Intel) on Ryzen 32-bit 
RDRAND is supposed to be faster by roughly a factor of 2.

Best regards,

OM

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-07-25  6:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-21  7:12 Poor RNG performance on Ryzen Oliver Mangold
2017-07-21  9:26 ` Jan Glauber
2017-07-21 11:39   ` Oliver Mangold
2017-07-21 14:47     ` Theodore Ts'o
2017-07-21 14:55       ` Oliver Mangold
2017-07-22 18:16         ` Theodore Ts'o
2017-07-25  6:20           ` Jan Glauber
2017-07-21 15:04       ` Gary R Hook
2017-07-21 12:11 ` Jeffrey Walton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox