summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorBrett Holman <bholman.devel@gmail.com>2022-04-25 10:43:47 -0500
committerGitHub <noreply@github.com>2022-04-25 10:43:47 -0500
commitd6b4301d679e492ce95e65313ddef9563eb3ca50 (patch)
treec15b69cecbeaad543f8607076f545ffb79745aa7 /Makefile
parent913c2987d3d2c354085847ca482736e0c215f7d4 (diff)
downloadcloud-init-git-d6b4301d679e492ce95e65313ddef9563eb3ca50.tar.gz
Shave ~8ms off generator runtime (#1387)
- remove redundant file reads and subcommands[1] - add make target that renders templates[2] - add helper script for measuring script runtime - add make target that benchmarks generator[3] - add make target that benchmarks ds-identify[4] [1] cuts time in lxd from 17-20ms down to 8-13ms in lxc on my local machine [2] example: make render-template FILE=./systemd/cloud-init-generator.tmpl [3] usage: NUM_ITER=42 make benchmark-generator [4] usage: NUM_ITER=42 make benchmark-ds-identify
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile43
1 files changed, 34 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 5f0c5b1b..cb005467 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
CWD=$(shell pwd)
+VARIANT ?= ubuntu
YAML_FILES=$(shell find cloudinit tests tools -name "*.yaml" -type f )
YAML_FILES+=$(shell find doc/examples -name "cloud-config*.txt" -type f )
@@ -6,12 +7,17 @@ YAML_FILES+=$(shell find doc/examples -name "cloud-config*.txt" -type f )
PYTHON = python3
PIP_INSTALL := pip3 install
+NUM_ITER ?= 100
+
ifeq ($(distro),)
distro = redhat
endif
READ_VERSION=$(shell $(PYTHON) $(CWD)/tools/read-version || echo read-version-failed)
CODE_VERSION=$(shell $(PYTHON) -c "from cloudinit import version; print(version.version_string())")
+GENERATOR_F=./systemd/cloud-init-generator
+DS_IDENTIFY=./tools/ds-identify
+BENCHMARK=./tools/benchmark.sh
all: check
@@ -26,6 +32,24 @@ flake8:
unittest: clean_pyc
python3 -m pytest -v tests/unittests cloudinit
+render-template:
+ $(PYTHON) ./tools/render-cloudcfg --variant=$(VARIANT) $(FILE) $(subst .tmpl,,$(FILE))
+
+# from systemd-generator(7) regarding generators:
+# "We do recommend C code however, since generators are executed
+# synchronously and hence delay the entire boot if they are slow."
+#
+# Our generator is a shell script. Make it easy to measure the
+# generator. This should be monitored for performance regressions
+benchmark-generator: FILE=$(GENERATOR_F).tmpl
+benchmark-generator: export ITER=$(NUM_ITER)
+benchmark-generator: render-template
+ $(BENCHMARK) $(GENERATOR_F)
+
+benchmark-ds-identify: export ITER=$(NUM_ITER)
+benchmark-ds-identify:
+ $(BENCHMARK) $(DS_IDENTIFY)
+
ci-deps-ubuntu:
@$(PYTHON) $(CWD)/tools/read-dependencies --distro ubuntu --test-distro
@@ -44,9 +68,10 @@ test: unittest
check_version:
@if [ "$(READ_VERSION)" != "$(CODE_VERSION)" ]; then \
- echo "Error: read-version version '$(READ_VERSION)'" \
- "not equal to code version '$(CODE_VERSION)'"; exit 2; \
- else true; fi
+ echo "Error: read-version version '$(READ_VERSION)'" \
+ "not equal to code version '$(CODE_VERSION)'"; \
+ exit 2; \
+ else true; fi
config/cloud.cfg:
$(PYTHON) ./tools/render-cloudcfg config/cloud.cfg.tmpl config/cloud.cfg
@@ -76,7 +101,7 @@ clean_release:
rm -rf new-upstream-changes.txt commit.msg
clean: clean_pyc clean_pytest clean_packaging clean_release
- rm -rf doc/rtd_html .tox .coverage tags
+ rm -rf doc/rtd_html .tox .coverage tags $(GENERATOR_F)
yaml:
@$(PYTHON) $(CWD)/tools/validate-yaml.py $(YAML_FILES)
@@ -90,14 +115,14 @@ srpm:
deb:
@which debuild || \
{ echo "Missing devscripts dependency. Install with:"; \
- echo sudo apt-get install devscripts; exit 1; }
+ echo sudo apt-get install devscripts; exit 1; }
$(PYTHON) ./packages/bddeb
deb-src:
@which debuild || \
{ echo "Missing devscripts dependency. Install with:"; \
- echo sudo apt-get install devscripts; exit 1; }
+ echo sudo apt-get install devscripts; exit 1; }
$(PYTHON) ./packages/bddeb -S -d
doc:
@@ -140,7 +165,7 @@ fix_spelling:
awk -F ': | -> ' '{printf "sed -i \047s/%s/%s/g\047 %s\n", $$2, $$3, $$1}' | \
sh
-.PHONY: test flake8 clean rpm srpm deb deb-src yaml
+.PHONY: all check test flake8 clean rpm srpm deb deb-src yaml
.PHONY: check_version pip-test-requirements pip-requirements clean_pyc
-.PHONY: unittest style-check doc fix_spelling
-.PHONY: clean_pytest clean_packaging check_spelling clean_release
+.PHONY: unittest style-check fix_spelling render-template benchmark-generator
+.PHONY: clean_pytest clean_packaging check_spelling clean_release doc