Files
hakmem/archive/tools/battle_system.c
Moe Charm (CI) 52386401b3 Debug Counters Implementation - Clean History
Major Features:
- Debug counter infrastructure for Refill Stage tracking
- Free Pipeline counters (ss_local, ss_remote, tls_sll)
- Diagnostic counters for early return analysis
- Unified larson.sh benchmark runner with profiles
- Phase 6-3 regression analysis documentation

Bug Fixes:
- Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB)
- Fix profile variable naming consistency
- Add .gitignore patterns for large files

Performance:
- Phase 6-3: 4.79 M ops/s (has OOM risk)
- With SuperSlab: 3.13 M ops/s (+19% improvement)

This is a clean repository without large log files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 12:31:14 +09:00

62 lines
2.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
// Dummy function for system malloc
void hak_tiny_magazine_flush_all(void) { /* no-op */ }
void battle_test(int n, const char* label) {
struct rusage usage;
void** ptrs = malloc(n * sizeof(void*));
printf("\n=== %s Test (n=%d) ===\n", label, n);
// Allocate
for (int i = 0; i < n; i++) {
ptrs[i] = malloc(16);
}
// Measure at peak
getrusage(RUSAGE_SELF, &usage);
float data_mb = (n * 16) / 1024.0 / 1024.0;
float rss_mb = usage.ru_maxrss / 1024.0;
float overhead = (rss_mb - data_mb) / data_mb * 100;
printf("Peak: %.1f MB data → %.1f MB RSS (%.0f%% overhead)\n",
data_mb, rss_mb, overhead);
// Free all
for (int i = 0; i < n; i++) {
free(ptrs[i]);
}
// Flush (no-op for system malloc)
hak_tiny_magazine_flush_all();
// Measure after free
getrusage(RUSAGE_SELF, &usage);
float rss_after = usage.ru_maxrss / 1024.0;
printf("After: %.1f MB RSS (%.1f MB freed)\n",
rss_after, rss_mb - rss_after);
free(ptrs);
}
int main() {
printf("╔════════════════════════════════════════╗\n");
printf("║ System malloc / mimalloc ║\n");
printf("╚════════════════════════════════════════╝\n");
battle_test(100000, "100K");
battle_test(500000, "500K");
battle_test(1000000, "1M");
battle_test(2000000, "2M");
battle_test(5000000, "5M");
printf("\n╔════════════════════════════════════════╗\n");
printf("║ BATTLE COMPLETE! ║\n");
printf("╚════════════════════════════════════════╝\n");
return 0;
}