Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
130 lines (98 loc) · 4.02 KB
/
Copy pathMakefile
File metadata and controls
130 lines (98 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
.PHONY: build test miri clean clean-cargo clean-docker clean-perf clean-valgrind cov bench \
docker-bench-build docker-bench local-bench release perf \
local-perf docker-perf-build docker-perf \
docker-memcheck-build docker-memcheck \
flamegraph flamegraphs memcheck
# =============================================================================
# Build & Test
# =============================================================================
all: build
build:
cargo build
release:
cargo build --release --features c_api
perf:
RUSTFLAGS="-C force-frame-pointers=yes" cargo build --profile perf --features "c_api,dynamic"
test:
cargo test
miri:
MIRIFLAGS="-Zmiri-tree-borrows" cargo +nightly miri test
cov:
cargo llvm-cov --html --open --branch
clean: clean-cargo clean-docker clean-perf clean-valgrind
clean-cargo:
cargo clean
clean-docker:
-docker rmi $(DOCKER_IMAGE) $(DOCKER_IMAGE_PERF) $(DOCKER_IMAGE_MEMCHECK) 2>/dev/null || true
clean-perf:
rm -rf perf-data-local perf-data-docker
clean-valgrind:
rm -rf valgrind-reports
# =============================================================================
# Memory Checking (valgrind)
# =============================================================================
memcheck:
cargo build --release --features "c_api,dynamic"
./scripts/local_memcheck.sh $(PROCS)
DOCKER_IMAGE_MEMCHECK := inictus-memcheck
docker-memcheck-build:
docker build -f scripts/Dockerfile.memcheck -t $(DOCKER_IMAGE_MEMCHECK) .
docker-memcheck: docker-memcheck-build
@mkdir -p valgrind-reports
docker run --rm -t -v $(PWD)/valgrind-reports:/output $(DOCKER_IMAGE_MEMCHECK) $(PROCS)
# =============================================================================
# Local Benchmarks (Criterion)
# =============================================================================
bench:
ifndef BENCH
$(error BENCH is required. Usage: make bench BENCH=false_sharing)
endif
cargo bench --bench $(BENCH) --features bench
bench-html: bench
xdg-open target/criterion/report/index.html
# =============================================================================
# Local Benchmarks (mimalloc-bench with LD_PRELOAD)
# =============================================================================
local-bench:
cargo build --release --features "c_api,dynamic"
./scripts/local_bench.sh $(PROCS)
local-perf: perf
./scripts/local_perf.sh $(PROCS)
# Flamegraphs (requires: cargo install inferno)
flamegraph:
ifndef PERF
$(error Usage: make flamegraph PERF=perf-data-local/larsonN.perf.data)
endif
perf script -i $(PERF) | inferno-collapse-perf | inferno-flamegraph > $(PERF:.perf.data=.svg)
@echo "Created: $(PERF:.perf.data=.svg)"
flamegraphs:
@echo "Generating flamegraphs..."
@find perf-data-local perf-data-docker -name '*.perf.data' 2>/dev/null | while read f; do \
echo " $$f -> $${f%.perf.data}.svg"; \
perf script -i "$$f" | inferno-collapse-perf | inferno-flamegraph > "$${f%.perf.data}.svg" 2>/dev/null; \
done || echo "No perf data files found in perf-data-local/ or perf-data-docker/"
# =============================================================================
# Docker Benchmarks (mimalloc-bench with static inictus)
# =============================================================================
DOCKER_IMAGE := inictus-bench
DOCKER_IMAGE_PERF := inictus-perf
# or $(shell nproc)
PROCS ?= 8
PERF_OUTPUT_DOCKER ?= ./perf-data-docker
docker-bench-build:
docker build -f scripts/Dockerfile.bench --build-arg PROCS=$(PROCS) -t $(DOCKER_IMAGE) .
docker-bench: docker-bench-build
docker run --rm -t --cpus=$(PROCS) $(DOCKER_IMAGE) $(PROCS)
docker-perf-build:
docker build -f scripts/Dockerfile.perf -t $(DOCKER_IMAGE_PERF) .
docker-perf: docker-perf-build
@mkdir -p $(PERF_OUTPUT_DOCKER)
@mkdir -p ./target/perf/docker
docker run --rm -t --cpus=$(PROCS) \
--privileged \
-v $(PWD)/$(PERF_OUTPUT_DOCKER):/perf-output \
-v $(PWD)/target/perf/docker:/binaries-output \
$(DOCKER_IMAGE_PERF) $(PROCS)
@echo ""
@echo "Perf data: $(PERF_OUTPUT_DOCKER)/"
@echo "Binaries: target/perf/docker/"