optimize randint() function for massive performance increase

This commit is contained in:
ІО-23 Шмуляр Олег 2025-03-18 19:54:50 +02:00
parent 566dcc18bd
commit b1b2d6903f
3 changed files with 30 additions and 7 deletions

View File

@ -1,6 +1,7 @@
#ifndef RANDOM_HEADER
#define RANDOM_HEADER
void random_init(void);
size_t randint(size_t max);
#endif

View File

@ -25,6 +25,8 @@ main(void)
{
system_time = 0;
random_init();
free_pages_cnt = 0;
busy_pages_cnt = 0;

View File

@ -1,14 +1,34 @@
#include <stdio.h>
#include <fcntl.h>
#include <stddef.h>
#include <unistd.h>
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;
}