A few months ago I did a quick and dirty benchmark of the Intel rdrand instruction found on the new Ivybridge processors. I did some further analysis a while ago and I've only just got around to writing up my findings. I've improved the test by exercising the Intel Digital Random Number Generator (DRNG) with multiple threads and also re-writing the rdrand wrapper in assembler and ensuring the code is inline'd. The source code for this test is available here.
So, how does it shape up? On a i5-3210M (2.5GHz) Ivybridge (2 cores, 4 threads) I get a peak of ~99.6 million 64 bit rdrands per second with 4 threads which equates to ~6.374 billion bits per second. Not bad at all.
Now how random is this random data? There are several tests available; I chose to exercise the DRNG using the dieharder test suite. The test is relatively simple; install dieharder and do 64 bit rdrand reads and output these as a raw random number stream and pipe this into dieharder:
sudo apt-get install dieharder ./rdrand-test | dieharder -g 200 -a #=============================================================================# # dieharder version 3.31.1 Copyright 2003 Robert G. Brown # #=============================================================================# rng_name |rands/second| Seed | stdin_input_raw| 3.66e+07 | 639263374| #=============================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment #=============================================================================# diehard_birthdays| 0| 100| 100|0.40629140| PASSED diehard_operm5| 0| 1000000| 100|0.79942347| PASSED diehard_rank_32x32| 0| 40000| 100|0.35142889| PASSED diehard_rank_6x8| 0| 100000| 100|0.75739694| PASSED diehard_bitstream| 0| 2097152| 100|0.65986567| PASSED diehard_opso| 0| 2097152| 100|0.24791918| PASSED diehard_oqso| 0| 2097152| 100|0.36850828| PASSED diehard_dna| 0| 2097152| 100|0.52727856| PASSED diehard_count_1s_str| 0| 256000| 100|0.08299753| PASSED diehard_count_1s_byt| 0| 256000| 100|0.31139908| PASSED diehard_parking_lot| 0| 12000| 100|0.47786440| PASSED diehard_2dsphere| 2| 8000| 100|0.93639860| PASSED diehard_3dsphere| 3| 4000| 100|0.43241488| PASSED diehard_squeeze| 0| 100000| 100|0.99088862| PASSED diehard_sums| 0| 100| 100|0.00422846| WEAK diehard_runs| 0| 100000| 100|0.48432365| PASSED .. dab_monobit2| 12| 65000000| 1|0.98439048| PASSED
..and leave to cook for about 45 minutes. The -g 200 option specifies that the random numbers come from stdin and the -a option runs all the dieharder tests. All the tests passed with the exception of the diehard_sums test which produced "weak" results, however, this test is known to be unreliable and recommended not to be used. Quite honestly, I would be surprised if the tests failed, but you never know until one runs them.
The CA cert research labs have an on-line random number generator analysis website allowing one to submit and test at least 12 MB of random numbers. I submitted 32 MB of data, and I am currently waiting to see if I get any results back. Watch this space.