diff options
| author | Brett Holman <bholman.devel@gmail.com> | 2022-04-25 10:43:47 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-25 10:43:47 -0500 |
| commit | d6b4301d679e492ce95e65313ddef9563eb3ca50 (patch) | |
| tree | c15b69cecbeaad543f8607076f545ffb79745aa7 /Makefile | |
| parent | 913c2987d3d2c354085847ca482736e0c215f7d4 (diff) | |
| download | cloud-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-- | Makefile | 43 |
1 files changed, 34 insertions, 9 deletions
@@ -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 |
