223 lines
8.1 KiB
Makefile
223 lines
8.1 KiB
Makefile
-include ../local.mk
|
|
|
|
EXP ?= datacenter-fq
|
|
SETUP ?= datacenter_fq
|
|
SOLUTIONS ?= no-tso tso tso-pacing
|
|
FIG_STEMS ?= throughput throughput_zoom rtt rtt_zoom sender_cpu receiver_cpu timeseries idt_cdf idt_cdf_zoom
|
|
|
|
# Global figure size and font size (inches, pt). Inherited by every Rscript
|
|
# via the export below; common.R reads these as Sys.getenv("FIG_*").
|
|
# Override on the command line: make FIG_WIDTH=2.5 FIG_HEIGHT=1.8 FIG_FONTSIZE=8 datacenter-fq
|
|
FIG_WIDTH ?= 2.5
|
|
FIG_HEIGHT ?= 2.0
|
|
FIG_FONTSIZE ?= 9
|
|
export FIG_WIDTH FIG_HEIGHT FIG_FONTSIZE
|
|
|
|
THROUGHPUT_SIZE_ARGS ?=
|
|
RTT_SIZE_ARGS ?=
|
|
SENDER_CPU_SIZE_ARGS ?=
|
|
RECEIVER_CPU_SIZE_ARGS ?=
|
|
SLOWSTART_SIZE_ARGS ?= --width 2.7 --height 1.5
|
|
THROUGHPUT_ARGS ?=
|
|
RTT_ARGS ?=
|
|
THROUGHPUT_ZOOM_ARGS ?= --ymin 3.5 --ymax 4.0 --ystep 0.1
|
|
RTT_ZOOM_ARGS ?= --ymin 4 --ymax 14 --ystep 2
|
|
SENDER_CPU_ARGS ?=
|
|
RECEIVER_CPU_ARGS ?=
|
|
TIMESERIES_ARGS ?=
|
|
IDT_CDF_ARGS ?=
|
|
FLOWS_IDT_CDF_ARGS ?=
|
|
BANDWIDTH_IDT_CDF_ARGS ?=
|
|
|
|
ROOT := ..
|
|
RAW_DATA_ROOT ?= $(ROOT)/../raw_data
|
|
RAW := $(RAW_DATA_ROOT)/$(EXP)/aggregates
|
|
DERIVED := $(ROOT)/derived/$(EXP)
|
|
DERIVED_ROOT := $(ROOT)/derived
|
|
OUT := ../out/$(EXP)
|
|
VALUES_TEX := ../out/values.tex
|
|
VALUES_PLUGINS := $(wildcard $(ROOT)/analysis/values/*.py)
|
|
SKIP_PLUGINS ?=
|
|
|
|
CSVS := $(addprefix $(DERIVED)/, runs.csv rtts.csv idts.csv firstflow_bins.csv)
|
|
PDFS := $(addprefix $(OUT)/, $(addsuffix .pdf, $(FIG_STEMS)))
|
|
TEXS := $(addprefix $(OUT)/, $(addsuffix .tex, $(FIG_STEMS)))
|
|
|
|
.PHONY: all derive figures tikz sanity values pdfs tex clean datacenter-fq datacenter-fq-tikz direct-link direct-link-tikz slowstart slowstart-tikz bandwidths bandwidths-tikz flows flows-tikz all-experiments all-experiments-tikz
|
|
.DELETE_ON_ERROR:
|
|
|
|
all: all-experiments
|
|
|
|
derive: $(DERIVED)/.stamp
|
|
|
|
$(DERIVED)/.stamp: $(ROOT)/analysis/aggregate.py
|
|
cd $(ROOT)/analysis && uv run python aggregate.py --raw $(abspath $(RAW)) --setup-prefix $(SETUP) --solutions $(SOLUTIONS) --out $(abspath $(DERIVED))
|
|
touch $@
|
|
|
|
$(CSVS): $(DERIVED)/.stamp
|
|
|
|
sanity: $(DERIVED)/.stamp
|
|
cd $(ROOT)/analysis && uv run python sanity_check.py --derived $(abspath $(DERIVED)) --solutions $(SOLUTIONS)
|
|
|
|
figures: all-experiments
|
|
tikz: all-experiments-tikz
|
|
|
|
pdfs: $(PDFS)
|
|
tex: $(TEXS)
|
|
|
|
FMT_FLAG = $(if $(filter %.tex,$@),--tikz,--pdf)
|
|
|
|
$(OUT)/throughput.pdf $(OUT)/throughput.tex: fig_throughput.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(THROUGHPUT_SIZE_ARGS) $(THROUGHPUT_ARGS)
|
|
|
|
$(OUT)/throughput_zoom.pdf $(OUT)/throughput_zoom.tex: fig_throughput.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ --zoom $(THROUGHPUT_SIZE_ARGS) $(THROUGHPUT_ZOOM_ARGS)
|
|
|
|
$(OUT)/rtt.pdf $(OUT)/rtt.tex: fig_rtt.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(RTT_SIZE_ARGS) $(RTT_ARGS)
|
|
|
|
$(OUT)/rtt_zoom.pdf $(OUT)/rtt_zoom.tex: fig_rtt.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ --zoom $(RTT_SIZE_ARGS) $(RTT_ZOOM_ARGS)
|
|
|
|
$(OUT)/sender_cpu.pdf $(OUT)/sender_cpu.tex: fig_sender_cpu.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(SENDER_CPU_SIZE_ARGS) $(SENDER_CPU_ARGS)
|
|
|
|
$(OUT)/receiver_cpu.pdf $(OUT)/receiver_cpu.tex: fig_receiver_cpu.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(RECEIVER_CPU_SIZE_ARGS) $(RECEIVER_CPU_ARGS)
|
|
|
|
$(OUT)/timeseries.pdf $(OUT)/timeseries.tex: fig_timeseries.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(TIMESERIES_ARGS)
|
|
|
|
$(OUT)/idt_cdf.pdf $(OUT)/idt_cdf.tex: fig_idt_cdf.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(IDT_CDF_ARGS)
|
|
|
|
$(OUT)/idt_cdf_zoom.pdf $(OUT)/idt_cdf_zoom.tex: fig_idt_cdf.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ --zoom $(IDT_CDF_ARGS)
|
|
|
|
$(OUT)/flows_idt_cdf.pdf $(OUT)/flows_idt_cdf.tex: fig_flows_idt_cdf.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(FLOWS_IDT_CDF_ARGS)
|
|
|
|
$(OUT)/bandwidth_idt_cdf.pdf $(OUT)/bandwidth_idt_cdf.tex: fig_bandwidth_idt_cdf.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) $(FMT_FLAG) $@ $(BANDWIDTH_IDT_CDF_ARGS)
|
|
|
|
$(OUT)/%.pdf: fig_%.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) --pdf $@
|
|
|
|
$(OUT)/%_zoom.pdf: fig_%.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) --pdf $@ --zoom
|
|
|
|
$(OUT)/%.tex: fig_%.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) --tikz $@
|
|
|
|
$(OUT)/%_zoom.tex: fig_%.R common.R $(CSVS) Makefile
|
|
@mkdir -p $(OUT)
|
|
Rscript $< --data $(DERIVED) --tikz $@ --zoom
|
|
|
|
values: $(VALUES_TEX)
|
|
|
|
# SKIP_PLUGINS is a runtime decision, not a file dependency: force rebuild
|
|
# whenever the user sets it on the command line.
|
|
ifneq ($(SKIP_PLUGINS),)
|
|
.PHONY: $(VALUES_TEX)
|
|
endif
|
|
|
|
$(VALUES_TEX): $(ROOT)/analysis/gen_values.py $(VALUES_PLUGINS) $(DERIVED_ROOT)/datacenter-fq/.stamp $(DERIVED_ROOT)/direct-link/.stamp Makefile
|
|
@mkdir -p $(dir $(VALUES_TEX))
|
|
cd $(ROOT)/analysis && uv run python gen_values.py --derived $(abspath $(DERIVED_ROOT)) --out $(abspath $(VALUES_TEX)) $(if $(SKIP_PLUGINS),--skip $(SKIP_PLUGINS))
|
|
|
|
clean:
|
|
rm -rf $(OUT) $(DERIVED)
|
|
|
|
# Per-experiment shortcut targets. Each recursively invokes the makefile
|
|
# with the right EXP / SETUP / FIG_STEMS / zoom overrides.
|
|
|
|
# Per-experiment knobs. Each shortcut target reuses these via $(call ...).
|
|
QUARTER_SIZE := --width 1.4 --height 1.5
|
|
|
|
DATACENTER_FQ_ARGS = EXP=datacenter-fq SETUP=datacenter_fq \
|
|
SOLUTIONS="no-tso tso tso-pacing cake:datacenter_cake_no-tso" \
|
|
FIG_STEMS="throughput throughput_zoom rtt rtt_zoom sender_cpu receiver_cpu timeseries idt_cdf idt_cdf_zoom" \
|
|
THROUGHPUT_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
RTT_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
SENDER_CPU_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
RECEIVER_CPU_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
TIMESERIES_ARGS="--height 1.6" \
|
|
IDT_CDF_ARGS="--height 1.6" \
|
|
THROUGHPUT_ZOOM_ARGS="--ymin 3.5 --ymax 4.0 --ystep 0.1" \
|
|
RTT_ZOOM_ARGS="--ymin 4 --ymax 14 --ystep 2"
|
|
|
|
DIRECT_LINK_ARGS = EXP=direct-link SETUP=direct-link_fq \
|
|
SOLUTIONS="no-tso tso tso-pacing cake:direct-link_cake_no-tso" \
|
|
FIG_STEMS="throughput throughput_zoom rtt rtt_zoom sender_cpu receiver_cpu" \
|
|
THROUGHPUT_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
RTT_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
SENDER_CPU_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
RECEIVER_CPU_SIZE_ARGS="$(QUARTER_SIZE)" \
|
|
THROUGHPUT_ARGS="--ymax 10 --ystep 2" \
|
|
THROUGHPUT_ZOOM_ARGS="--ymin 9.0 --ymax 10.0 --ystep 0.2" \
|
|
RTT_ZOOM_ARGS="--ymin 1.75 --ymax 4 --ystep 1" \
|
|
SENDER_CPU_ARGS="--ymax 20 --ystep 5" \
|
|
RECEIVER_CPU_ARGS="--ystep 5"
|
|
|
|
datacenter-fq:
|
|
$(MAKE) pdfs $(DATACENTER_FQ_ARGS)
|
|
|
|
datacenter-fq-tikz:
|
|
$(MAKE) tex $(DATACENTER_FQ_ARGS)
|
|
|
|
direct-link:
|
|
$(MAKE) pdfs $(DIRECT_LINK_ARGS)
|
|
|
|
direct-link-tikz:
|
|
$(MAKE) tex $(DIRECT_LINK_ARGS)
|
|
|
|
BANDWIDTHS_ARGS = EXP=bandwidths SETUP=bandwidths \
|
|
SOLUTIONS="1:250 2:500 4:1000 8:2000" \
|
|
FIG_STEMS="bandwidth_idt_cdf" \
|
|
BANDWIDTH_IDT_CDF_ARGS="--sample 10000"
|
|
|
|
bandwidths:
|
|
$(MAKE) pdfs $(BANDWIDTHS_ARGS)
|
|
|
|
bandwidths-tikz:
|
|
$(MAKE) tex $(BANDWIDTHS_ARGS)
|
|
|
|
FLOWS_ARGS = EXP=flows SETUP=flows \
|
|
SOLUTIONS="2:2 4:4 8:8 16:16 30:30" \
|
|
FIG_STEMS="flows_idt_cdf" \
|
|
FLOWS_IDT_CDF_ARGS="--sample 10000"
|
|
|
|
flows:
|
|
$(MAKE) pdfs $(FLOWS_ARGS)
|
|
|
|
flows-tikz:
|
|
$(MAKE) tex $(FLOWS_ARGS)
|
|
|
|
all-experiments: datacenter-fq direct-link slowstart bandwidths flows
|
|
all-experiments-tikz: datacenter-fq-tikz direct-link-tikz slowstart-tikz bandwidths-tikz flows-tikz
|
|
|
|
# Slowstart: standalone, reads raw text files directly (no aggregator).
|
|
SLOWSTART_OUT := ../out/slowstart
|
|
SLOWSTART_RAW := $(RAW_DATA_ROOT)/slowstart
|
|
|
|
slowstart: $(SLOWSTART_OUT)/slowstart.pdf
|
|
slowstart-tikz: $(SLOWSTART_OUT)/slowstart.tex
|
|
|
|
$(SLOWSTART_OUT)/slowstart.pdf $(SLOWSTART_OUT)/slowstart.tex: fig_slowstart.R common.R $(SLOWSTART_RAW)/tso.txt $(SLOWSTART_RAW)/tso_pacing.txt Makefile
|
|
@mkdir -p $(SLOWSTART_OUT)
|
|
Rscript $< --data $(SLOWSTART_RAW) $(FMT_FLAG) $@ $(SLOWSTART_SIZE_ARGS)
|