SEC: add function to benchmark a PRNG.
authorrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 28 Sep 2010 18:36:03 +0000 (18:36 +0000)
committerrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 28 Sep 2010 18:36:03 +0000 (18:36 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4339 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/sec/benchmarks.c
bertos/sec/benchmarks.h

index f5fbd79b28a06aa90a8a0ece5dd1094334aa95e0..afe727517b39280acbdcc16ff38e3f6cca1bfd51 100644 (file)
@@ -3,11 +3,11 @@
 #include <drv/timer.h>
 #include <string.h>
 
+static uint8_t buf[512];
+
 void hash_benchmark(Hash *h, const char *hname, int numk)
 {
-       static uint8_t buf[512];
        memset(buf, 0x12, sizeof(buf));
-
        ticks_t t = timer_clock();
 
        for (int j=0;j<64;++j) {
@@ -22,3 +22,26 @@ void hash_benchmark(Hash *h, const char *hname, int numk)
        utime_t usec = ticks_to_us(t) / 64;
        kprintf("%s @ %ldMhz: %s of %dKiB of data: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numk, (usec/1000), (usec % 1000));
 }
+
+void prng_benchmark(PRNG *prng, const char *hname, int numbytes)
+{
+       memset(buf, 0x12, sizeof(buf));
+
+       ASSERT(sizeof(buf) >= prng_seed_len(prng));
+       prng_reseed(prng, buf);
+
+       ticks_t t = timer_clock();
+
+       for (int j=0;j<2048;++j) {
+               for (int i=0; i<(numbytes+511)/512-1; ++i)
+                       prng_generate(prng, buf, 512);
+               prng_generate(prng, buf, numbytes%512);
+       }
+
+       t = timer_clock() - t;
+
+       utime_t usec = ticks_to_us(t) / 2048;
+       kprintf("%s @ %ldMhz: %s generation of %d random bytes: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numbytes, (usec/1000), (usec % 1000));
+       kprintf("Sample of random data:\n");
+       kdump(buf, MIN(numbytes, 64));
+}
index e6fc789a0980796c0dd8d408ec8ce1ca57bc9db2..47f45ffe9d3ab751c4fb6833123d64b0c2dc1951 100644 (file)
@@ -2,7 +2,9 @@
 #define SEC_BENCHMARKS_H
 
 #include <sec/hash.h>
+#include <sec/prng.h>
 
 void hash_benchmark(Hash *h, const char *hname, int numk);
+void prng_benchmark(PRNG *prng, const char *hname, int numk);
 
 #endif /* SEC_BENCHMARKS_H */