arena icon indicating copy to clipboard operation
arena copied to clipboard

Add transparent hugepage support for x86_64.

Open mariakeating opened this issue 5 months ago • 0 comments

Test program and output.

maria@maria-desktop ~/Work/arena $ gcc -Wall -Wextra test.c && ./a.out 
8193 faults (4095.50 bytes/fault)
maria@maria-desktop ~/Work/arena $ gcc -Wall -Wextra -DARENA_HUGEPAGES test.c && ./a.out 
17 faults (1973790.12 bytes/fault)
#define ARENA_IMPLEMENTATION
#define ARENA_BACKEND ARENA_BACKEND_LINUX_MMAP
#include "arena.h"

#include <sys/resource.h>

static int64_t
get_page_fault_count(void)
{
    int64_t result = 0;

    struct rusage resource_usage = {};
    if(getrusage(RUSAGE_SELF, &resource_usage) == 0)
    {
        result = resource_usage.ru_minflt + resource_usage.ru_majflt;
    }

    return result;
}

int main(void)
{
    Arena arena = {};

    int64_t begin_fault_count = get_page_fault_count();

    uint64_t allocation_size = 32 << 20;
    uint8_t *allocation = arena_alloc(&arena, allocation_size);

    for(uint64_t index = 0;
        index < allocation_size;
        ++index)
    {
        allocation[index] = (uint8_t)index;
    }

    arena_free(&arena);

    int64_t end_fault_count = get_page_fault_count();
    int64_t fault_count = end_fault_count - begin_fault_count;
    printf("%ld faults (%.2f bytes/fault)\n", fault_count, (float)allocation_size/(float)fault_count);

    return 0;
}

mariakeating avatar Sep 14 '24 19:09 mariakeating