From b1b2d6903f656ebd687518b1495581decf6810ba Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Tue, 18 Mar 2025 19:54:50 +0200 Subject: [PATCH] optimize randint() function for massive performance increase --- inc/random.h | 1 + src/main.c | 2 ++ src/random.c | 34 +++++++++++++++++++++++++++------- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/inc/random.h b/inc/random.h index 5e8346a..d00be78 100644 --- a/inc/random.h +++ b/inc/random.h @@ -1,6 +1,7 @@ #ifndef RANDOM_HEADER #define RANDOM_HEADER +void random_init(void); size_t randint(size_t max); #endif diff --git a/src/main.c b/src/main.c index 810d5af..a3d3b89 100644 --- a/src/main.c +++ b/src/main.c @@ -25,6 +25,8 @@ main(void) { system_time = 0; + random_init(); + free_pages_cnt = 0; busy_pages_cnt = 0; diff --git a/src/random.c b/src/random.c index 9f103df..33704a2 100644 --- a/src/random.c +++ b/src/random.c @@ -1,14 +1,34 @@ +#include #include #include #include -size_t randint(size_t max) +#define RANDOM_BUFFER_SIZE 16384 + +static size_t index = RANDOM_BUFFER_SIZE; +static size_t value_buff[RANDOM_BUFFER_SIZE]; +static int random_fd = -1; + +void +random_init(void) { - size_t random_value; + random_fd = open("/dev/urandom", O_RDONLY); - int f = open("/dev/urandom", O_RDONLY); - read(f, &random_value, 8); - close(f); - - return random_value % max; + if (random_fd < 0) + printf("[random:error] Failed to open /dev/urandom\n"); +} + +size_t +randint(size_t max) +{ + if (index >= RANDOM_BUFFER_SIZE) { + read(random_fd, value_buff, 8 * RANDOM_BUFFER_SIZE); + + index = 0; + } + + size_t rv = value_buff[index] % max; + index++; + + return rv; }