// vm_profile.c - Detailed profiling for VM scenario #include "hakmem.h" #include #include #include #define ITERATIONS 10 #define SIZE (2 * 1024 * 1024) static double timespec_diff_ms(struct timespec *start, struct timespec *end) { return (end->tv_sec - start->tv_sec) * 1000.0 + (end->tv_nsec - start->tv_nsec) / 1000000.0; } int main(void) { struct timespec t_start, t_end; double total_alloc_time = 0.0; double total_memset_time = 0.0; double total_free_time = 0.0; printf("=== VM Scenario Detailed Profile ===\n"); printf("Size: %d bytes (2MB)\n", SIZE); printf("Iterations: %d\n\n", ITERATIONS); hak_init(); for (int i = 0; i < ITERATIONS; i++) { // Time: Allocation clock_gettime(CLOCK_MONOTONIC, &t_start); void* buf = hak_alloc_cs(SIZE); clock_gettime(CLOCK_MONOTONIC, &t_end); double alloc_ms = timespec_diff_ms(&t_start, &t_end); total_alloc_time += alloc_ms; // Time: memset (simulate usage) clock_gettime(CLOCK_MONOTONIC, &t_start); memset(buf, 0xEF, SIZE); clock_gettime(CLOCK_MONOTONIC, &t_end); double memset_ms = timespec_diff_ms(&t_start, &t_end); total_memset_time += memset_ms; // Time: Free clock_gettime(CLOCK_MONOTONIC, &t_start); hak_free_cs(buf, SIZE); clock_gettime(CLOCK_MONOTONIC, &t_end); double free_ms = timespec_diff_ms(&t_start, &t_end); total_free_time += free_ms; printf("Iter %2d: alloc=%.3f ms, memset=%.3f ms, free=%.3f ms\n", i, alloc_ms, memset_ms, free_ms); } hak_shutdown(); printf("\n=== Summary ===\n"); printf("Total alloc time: %.3f ms (avg: %.3f ms)\n", total_alloc_time, total_alloc_time / ITERATIONS); printf("Total memset time: %.3f ms (avg: %.3f ms)\n", total_memset_time, total_memset_time / ITERATIONS); printf("Total free time: %.3f ms (avg: %.3f ms)\n", total_free_time, total_free_time / ITERATIONS); printf("Total time: %.3f ms\n", total_alloc_time + total_memset_time + total_free_time); return 0; }