First commit, Vystem v0.1

This commit is contained in:
2026-03-31 22:15:00 +02:00
commit e15daed8c0
462 changed files with 134655 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
// SPDX-License-Identifier: MPL-2.0
#include "kernel/tests/test_malloc.h"
#include "kernel/tests/test_utils.h"
#include "kernel/tests/payloads/test_malloc_payload.h"
#include "kernel/log.h"
#include "memory/page.h"
#include "memory/heap.h"
#include "std/mem.h"
#include "std/malloc.h"
static sh_uint64 iter_num=10000;
__attribute__((section(".bss")))
static sh_uint64 address_list[10000];
SH_STATUS sh_test_malloc_benchmark() {
sh_tsc_TSC_VALUE *tsc_value=sh_test_get_tsc_values_buffer_ptr();
sh_mem_set_8((sh_uint8*)tsc_value,0x00,10000*sizeof(sh_tsc_TSC_VALUE));
sh_mem_set_8((sh_uint8*)address_list,0x00,sizeof(address_list));
sh_log_test("Benchmarking Malloc subsystem...");
sh_tsc_TSC_VALUE start=0;
sh_tsc_TSC_VALUE end=0;
for (sh_iter64 i=0;i<iter_num;i++) {
start=sh_tsc_get_kernel_current_tsc();
address_list[i]=(sh_uint64)sh_malloc(test_malloc_small_size[i]);
end=sh_tsc_get_kernel_current_tsc();
tsc_value[i]=end-start;
if (sh_malloc_get_last_status()!=SH_STATUS_SUCCESS) {
sh_log_error("Test failed for sh_malloc for small size. See detail below:",SH_LOG_SOURCE_TEST);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Error code: %8s\n",sh_malloc_get_last_status());
sh_log_ferror(SH_LOG_SOURCE_TEST,"Index: %8u\n",i);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Size: %4u\n",test_malloc_small_size[i]);
return SH_STATUS_TEST_FAILED;
}
}
sh_test_compute_print_stats("sh_malloc for small size",tsc_value,iter_num);
sh_mem_set_8((sh_uint8*)tsc_value,0x00,10000*sizeof(sh_tsc_TSC_VALUE));
for (sh_iter64 i=0;i<iter_num;i++) {
start=sh_tsc_get_kernel_current_tsc();
sh_free((void*)address_list[i]);
end=sh_tsc_get_kernel_current_tsc();
tsc_value[i]=end-start;
if (sh_malloc_get_last_status()!=SH_STATUS_SUCCESS) {
sh_log_error("Test failed for sh_free for small size. See detail below:",SH_LOG_SOURCE_TEST);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Error code: %8s\n",sh_malloc_get_last_status());
sh_log_ferror(SH_LOG_SOURCE_TEST,"Index: %8u\n",i);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Size: %4u\n",test_malloc_small_size[i]);
return SH_STATUS_TEST_FAILED;
}
}
sh_test_compute_print_stats("sh_free for small size",tsc_value,iter_num);
sh_mem_set_8((sh_uint8*)tsc_value,0x00,10000*sizeof(sh_tsc_TSC_VALUE));
sh_mem_set_8((sh_uint8*)address_list,0x00,sizeof(address_list));
sh_uint16 alloc_count=0;
sh_uint16 free_count=1000;
for (sh_iter64 i=0;i<2000;i++) {
sh_uint64 alloc_num=test_malloc_big_alloc[i];
sh_uint64 alloc_size=test_malloc_big_size[alloc_num]*SH_PAGE_SIZE;
if (address_list[alloc_num]==0) {
start=sh_tsc_get_kernel_current_tsc();
address_list[alloc_num]=(sh_uint64)sh_malloc(alloc_size);
end=sh_tsc_get_kernel_current_tsc();
tsc_value[alloc_count]=end-start;
alloc_count++;
if (sh_malloc_get_last_status()!=SH_STATUS_SUCCESS) {
sh_log_error("Test failed for sh_malloc for big size. See detail below:",SH_LOG_SOURCE_TEST);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Error code: %8s\n",sh_malloc_get_last_status());
sh_log_ferror(SH_LOG_SOURCE_TEST,"Index: %8u\n",i);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Size: %8u\n",alloc_size);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Alloc Num: %8u\n",alloc_num);
sh_log_mem_stats(SH_LOG_SOURCE_TEST);
return SH_STATUS_TEST_FAILED;
}
} else {
start=sh_tsc_get_kernel_current_tsc();
sh_free((void*)address_list[alloc_num]);
end=sh_tsc_get_kernel_current_tsc();
tsc_value[free_count]=end-start;
free_count++;
if (sh_malloc_get_last_status()!=SH_STATUS_SUCCESS) {
sh_log_error("Test failed for sh_free for big size. See detail below:",SH_LOG_SOURCE_TEST);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Error code: %8s\n",sh_malloc_get_last_status());
sh_log_ferror(SH_LOG_SOURCE_TEST,"Index: %8u\n",i);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Size: %8u\n",alloc_size);
sh_log_ferror(SH_LOG_SOURCE_TEST,"Alloc Num: %8u\n",alloc_num);
sh_log_mem_stats(SH_LOG_SOURCE_TEST);
return SH_STATUS_TEST_FAILED;
}
}
}
sh_test_compute_print_stats("sh_malloc for pages allocations",tsc_value,alloc_count);
sh_test_compute_print_stats("sh_free for pages allocations",tsc_value+1000,free_count-1000);
sh_log_mem_stats(SH_LOG_SOURCE_TEST);
return SH_STATUS_SUCCESS;
}