311 lines
9.4 KiB
Markdown
311 lines
9.4 KiB
Markdown
|
|
# Folder Reorganization - 2025-11-01
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
Major directory restructuring to consolidate benchmarks, tests, and build artifacts into dedicated hierarchies.
|
||
|
|
|
||
|
|
## Goals
|
||
|
|
✅ **Unified Benchmark Directory** - All benchmark-related files under `benchmarks/`
|
||
|
|
✅ **Clear Test Organization** - Tests categorized by type (unit/integration/stress)
|
||
|
|
✅ **Clean Root Directory** - Only essential files and documentation
|
||
|
|
✅ **Scalable Structure** - Easy to add new benchmarks and tests
|
||
|
|
|
||
|
|
## New Directory Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
hakmem/
|
||
|
|
├── benchmarks/ ← **NEW** Unified benchmark directory
|
||
|
|
│ ├── src/ ← Benchmark source code
|
||
|
|
│ │ ├── tiny/ (3 files: bench_tiny*.c)
|
||
|
|
│ │ ├── mid/ (2 files: bench_mid_large*.c)
|
||
|
|
│ │ ├── comprehensive/ (3 files: bench_comprehensive.c, etc.)
|
||
|
|
│ │ └── stress/ (2 files: bench_fragment_stress.c, etc.)
|
||
|
|
│ ├── bin/ ← Build output (organized by allocator)
|
||
|
|
│ │ ├── hakx/
|
||
|
|
│ │ ├── hakmi/
|
||
|
|
│ │ └── system/
|
||
|
|
│ ├── scripts/ ← Benchmark execution scripts
|
||
|
|
│ │ ├── tiny/ (10 scripts)
|
||
|
|
│ │ ├── mid/ ⭐ (2 scripts: Mid MT benchmarks)
|
||
|
|
│ │ ├── comprehensive/ (8 scripts)
|
||
|
|
│ │ └── utils/ (10 utility scripts)
|
||
|
|
│ ├── results/ ← Benchmark results (871+ files)
|
||
|
|
│ │ └── (formerly bench_results/)
|
||
|
|
│ └── perf/ ← Performance profiling data (28 files)
|
||
|
|
│ └── (formerly perf_data/)
|
||
|
|
│
|
||
|
|
├── tests/ ← **NEW** Unified test directory
|
||
|
|
│ ├── unit/ (7 files: simple focused tests)
|
||
|
|
│ ├── integration/ (3 files: multi-component tests)
|
||
|
|
│ └── stress/ (8 files: memory/load tests)
|
||
|
|
│
|
||
|
|
├── core/ ← Core allocator implementation (unchanged)
|
||
|
|
│ ├── hakmem*.c (34 files)
|
||
|
|
│ └── hakmem*.h (50 files)
|
||
|
|
│
|
||
|
|
├── docs/ ← Documentation
|
||
|
|
│ ├── benchmarks/ (12 benchmark reports)
|
||
|
|
│ ├── api/
|
||
|
|
│ └── guides/
|
||
|
|
│
|
||
|
|
├── scripts/ ← Development scripts (cleaned)
|
||
|
|
│ ├── build/ (build scripts)
|
||
|
|
│ ├── apps/ (1 file: run_apps_with_hakmem.sh)
|
||
|
|
│ └── maintenance/
|
||
|
|
│
|
||
|
|
├── archive/ ← Historical documents (preserved)
|
||
|
|
│ ├── phase2/ (5 files)
|
||
|
|
│ ├── analysis/ (15 files)
|
||
|
|
│ ├── old_benches/ (13 files)
|
||
|
|
│ ├── old_logs/ (30 files)
|
||
|
|
│ ├── experimental_scripts/ (9 files)
|
||
|
|
│ └── tools/ ⭐ **NEW** (10 analysis tool .c files)
|
||
|
|
│
|
||
|
|
├── build/ ← **NEW** Build output (future use)
|
||
|
|
│ ├── obj/
|
||
|
|
│ ├── lib/
|
||
|
|
│ └── bin/
|
||
|
|
│
|
||
|
|
├── adapters/ ← Frontend adapters
|
||
|
|
├── engines/ ← Backend engines
|
||
|
|
├── include/ ← Public headers
|
||
|
|
├── mimalloc-bench/ ← External benchmark suite
|
||
|
|
│
|
||
|
|
├── README.md
|
||
|
|
├── DOCS_INDEX.md ⭐ Updated with new paths
|
||
|
|
├── Makefile ⭐ Updated with VPATH
|
||
|
|
└── ... (config files)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Migration Summary
|
||
|
|
|
||
|
|
### Benchmarks → `benchmarks/`
|
||
|
|
|
||
|
|
#### Source Files (10 files)
|
||
|
|
```bash
|
||
|
|
bench_tiny_hot.c → benchmarks/src/tiny/
|
||
|
|
bench_tiny_mt.c → benchmarks/src/tiny/
|
||
|
|
bench_tiny.c → benchmarks/src/tiny/
|
||
|
|
|
||
|
|
bench_mid_large.c → benchmarks/src/mid/
|
||
|
|
bench_mid_large_mt.c → benchmarks/src/mid/
|
||
|
|
|
||
|
|
bench_comprehensive.c → benchmarks/src/comprehensive/
|
||
|
|
bench_random_mixed.c → benchmarks/src/comprehensive/
|
||
|
|
bench_allocators.c → benchmarks/src/comprehensive/
|
||
|
|
|
||
|
|
bench_fragment_stress.c → benchmarks/src/stress/
|
||
|
|
bench_realloc_cycle.c → benchmarks/src/stress/
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Scripts (30 files)
|
||
|
|
```bash
|
||
|
|
# Mid MT (most important!)
|
||
|
|
run_mid_mt_bench.sh → benchmarks/scripts/mid/
|
||
|
|
compare_mid_mt_allocators.sh → benchmarks/scripts/mid/
|
||
|
|
|
||
|
|
# Tiny pool benchmarks
|
||
|
|
run_tiny_hot_triad.sh → benchmarks/scripts/tiny/
|
||
|
|
measure_rss_tiny.sh → benchmarks/scripts/tiny/
|
||
|
|
... (8 more)
|
||
|
|
|
||
|
|
# Comprehensive benchmarks
|
||
|
|
run_comprehensive_pair.sh → benchmarks/scripts/comprehensive/
|
||
|
|
run_bench_suite.sh → benchmarks/scripts/comprehensive/
|
||
|
|
... (6 more)
|
||
|
|
|
||
|
|
# Utilities
|
||
|
|
kill_bench.sh → benchmarks/scripts/utils/
|
||
|
|
bench_mode.sh → benchmarks/scripts/utils/
|
||
|
|
... (8 more)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Results & Data
|
||
|
|
```bash
|
||
|
|
bench_results/ (871 files) → benchmarks/results/
|
||
|
|
perf_data/ (28 files) → benchmarks/perf/
|
||
|
|
```
|
||
|
|
|
||
|
|
### Tests → `tests/`
|
||
|
|
|
||
|
|
#### Unit Tests (7 files)
|
||
|
|
```bash
|
||
|
|
test_hakmem.c → tests/unit/
|
||
|
|
test_mid_mt_simple.c → tests/unit/
|
||
|
|
test_aligned_alloc.c → tests/unit/
|
||
|
|
... (4 more)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Integration Tests (3 files)
|
||
|
|
```bash
|
||
|
|
test_scaling.c → tests/integration/
|
||
|
|
test_vs_mimalloc.c → tests/integration/
|
||
|
|
... (1 more)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Stress Tests (8 files)
|
||
|
|
```bash
|
||
|
|
test_memory_footprint.c → tests/stress/
|
||
|
|
test_battle_system.c → tests/stress/
|
||
|
|
... (6 more)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Analysis Tools → `archive/tools/`
|
||
|
|
```bash
|
||
|
|
analyze_actual.c → archive/tools/
|
||
|
|
investigate_mystery_4mb.c → archive/tools/
|
||
|
|
vm_profile.c → archive/tools/
|
||
|
|
... (7 more)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Updated Files
|
||
|
|
|
||
|
|
### Makefile
|
||
|
|
```makefile
|
||
|
|
# Added directory structure variables
|
||
|
|
SRC_DIR := core
|
||
|
|
BENCH_SRC := benchmarks/src
|
||
|
|
TEST_SRC := tests
|
||
|
|
BUILD_DIR := build
|
||
|
|
BENCH_BIN_DIR := benchmarks/bin
|
||
|
|
|
||
|
|
# Updated VPATH to find sources in new locations
|
||
|
|
VPATH := $(SRC_DIR):$(BENCH_SRC)/tiny:$(BENCH_SRC)/mid:...
|
||
|
|
```
|
||
|
|
|
||
|
|
### DOCS_INDEX.md
|
||
|
|
- Updated Mid MT benchmark paths
|
||
|
|
- Added directory structure reference
|
||
|
|
- Updated script paths
|
||
|
|
|
||
|
|
## Usage Examples
|
||
|
|
|
||
|
|
### Running Mid MT Benchmarks (NEW PATHS)
|
||
|
|
```bash
|
||
|
|
# Main benchmark
|
||
|
|
bash benchmarks/scripts/mid/run_mid_mt_bench.sh
|
||
|
|
|
||
|
|
# Comparison
|
||
|
|
bash benchmarks/scripts/mid/compare_mid_mt_allocators.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### Viewing Results
|
||
|
|
```bash
|
||
|
|
# Latest benchmark results
|
||
|
|
ls -lh benchmarks/results/
|
||
|
|
|
||
|
|
# Performance profiling data
|
||
|
|
ls -lh benchmarks/perf/
|
||
|
|
```
|
||
|
|
|
||
|
|
### Running Tests
|
||
|
|
```bash
|
||
|
|
# Unit tests
|
||
|
|
cd tests/unit
|
||
|
|
ls -1 test_*.c
|
||
|
|
|
||
|
|
# Integration tests
|
||
|
|
cd tests/integration
|
||
|
|
ls -1 test_*.c
|
||
|
|
```
|
||
|
|
|
||
|
|
## Statistics
|
||
|
|
|
||
|
|
### Before Reorganization
|
||
|
|
- Root directory: **96 files** (after first cleanup)
|
||
|
|
- Scattered locations: bench_*.c, test_*.c, scripts/
|
||
|
|
- Benchmark results: bench_results/, perf_data/
|
||
|
|
|
||
|
|
### After Reorganization
|
||
|
|
- Root directory: **~70 items** (26% further reduction)
|
||
|
|
- Benchmarks: All under `benchmarks/` (10 sources + 30 scripts + 899 results)
|
||
|
|
- Tests: All under `tests/` (18 test files organized)
|
||
|
|
- Archive: 10 analysis tools preserved
|
||
|
|
|
||
|
|
### Directory Sizes
|
||
|
|
```
|
||
|
|
benchmarks/ - ~900 files (unified)
|
||
|
|
tests/ - 18 files (organized)
|
||
|
|
core/ - 84 files (unchanged)
|
||
|
|
docs/ - Multiple guides
|
||
|
|
archive/ - 82 files (historical + tools)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Benefits
|
||
|
|
|
||
|
|
### 1. **Clarity**
|
||
|
|
```bash
|
||
|
|
# Want to run a benchmark? → benchmarks/scripts/
|
||
|
|
# Looking for test code? → tests/
|
||
|
|
# Need results? → benchmarks/results/
|
||
|
|
# Core implementation? → core/
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. **Scalability**
|
||
|
|
- New benchmarks go to `benchmarks/src/{category}/`
|
||
|
|
- New tests go to `tests/{unit|integration|stress}/`
|
||
|
|
- Scripts organized by purpose
|
||
|
|
|
||
|
|
### 3. **Discoverability**
|
||
|
|
- **Mid MT benchmarks**: `benchmarks/scripts/mid/` ⭐
|
||
|
|
- **All results in one place**: `benchmarks/results/`
|
||
|
|
- **Historical work**: `archive/`
|
||
|
|
|
||
|
|
### 4. **Professional Structure**
|
||
|
|
- Matches industry standards (benchmarks/, tests/, src/)
|
||
|
|
- Clear separation of concerns
|
||
|
|
- Easy for new contributors to navigate
|
||
|
|
|
||
|
|
## Breaking Changes
|
||
|
|
|
||
|
|
### Scripts
|
||
|
|
```bash
|
||
|
|
# OLD
|
||
|
|
bash scripts/run_mid_mt_bench.sh
|
||
|
|
|
||
|
|
# NEW
|
||
|
|
bash benchmarks/scripts/mid/run_mid_mt_bench.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### Paths in Documentation
|
||
|
|
- Updated `DOCS_INDEX.md`
|
||
|
|
- Updated `Makefile` VPATH
|
||
|
|
- No source code changes needed (VPATH handles it)
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. ✅ **Structure created** - All directories in place
|
||
|
|
2. ✅ **Files moved** - Benchmarks, tests, results organized
|
||
|
|
3. ✅ **Makefile updated** - VPATH configured
|
||
|
|
4. ✅ **Documentation updated** - Paths corrected
|
||
|
|
5. 🔄 **Build verification** - Test compilation works
|
||
|
|
6. 📝 **Update README.md** - Reflect new structure
|
||
|
|
7. 🔄 **Update scripts** - Ensure all scripts use new paths
|
||
|
|
|
||
|
|
## Rollback
|
||
|
|
|
||
|
|
If needed, files can be restored:
|
||
|
|
```bash
|
||
|
|
# Restore benchmarks to root
|
||
|
|
cp -r benchmarks/src/*/*.c .
|
||
|
|
|
||
|
|
# Restore tests to root
|
||
|
|
cp -r tests/*/*.c .
|
||
|
|
|
||
|
|
# Restore old scripts
|
||
|
|
cp -r benchmarks/scripts/* scripts/
|
||
|
|
```
|
||
|
|
|
||
|
|
All original files are preserved in their new locations.
|
||
|
|
|
||
|
|
## Notes
|
||
|
|
|
||
|
|
- **No source code modifications** - Only file moves
|
||
|
|
- **Makefile VPATH** - Handles new source locations transparently
|
||
|
|
- **Build system intact** - All targets still work
|
||
|
|
- **Historical preservation** - Archive maintains complete history
|
||
|
|
|
||
|
|
---
|
||
|
|
*Reorganization completed: 2025-11-01*
|
||
|
|
*Total files reorganized: 90+ source/script files*
|
||
|
|
*Benchmark integration: COMPLETE ✅*
|