From 06e2aad88de859bf92ad500de7d6b8ca4074bf5f Mon Sep 17 00:00:00 2001 From: Samuel Aubertin Date: Thu, 12 Oct 2023 21:18:24 +0200 Subject: [PATCH] Flamegraphing kernel stacks --- .gitignore | 1 + Makefile | 22 ++++++++++++++++++++-- src/Makefile | 24 ++++++++++++++---------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 12cc177..10f0980 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .vagrant Vagrantfile *.json +*.svg opack_installer_latest results ssh-config diff --git a/Makefile b/Makefile index 27ea5a9..a50f89e 100644 --- a/Makefile +++ b/Makefile @@ -25,10 +25,10 @@ SPEC2006_SRC= ../spec2006-openbsd $(INSTALL_ISO): make -C ../skzbsd-build/ all -ssh-config: opack +ssh-config: | opack (echo Host $(OPACK_TARGET) && (vagrant ssh-config | sed '1d')) > $@ -all: $(INSTALL_ISO) ssh-config +results/rate.kprofile results/speed.kprofile: $(INSTALL_ISO) ssh-config scp -F ssh-config -q -r src root@$(OPACK_TARGET):/root/run scp -F ssh-config -q -r $(SPEC2006_SRC) root@$(OPACK_TARGET):/var/spec2006 vagrant ssh -c "make -C run bootstrap" @@ -37,6 +37,24 @@ all: $(INSTALL_ISO) ssh-config mkdir -p results scp -F ssh-config -q -r $(OPACK_TARGET):/var/spec2006/result/* results +rate.svg: | results/rate.kprofile + stackcollapse-bpftrace.pl $^ | flamegraph.pl \ + --title "SPECINT2006 RATE - Kernel stacks - $(OPACK_SYS_CPU) threads" \ + --subtitle "$(shell vagrant ssh -c "sysctl -n kern.version" | head -n1)" \ + --fonttype "IBM Plex Mono" \ + --hash \ + --inverted > $@ + +speed.svg: | results/speed.kprofile + stackcollapse-bpftrace.pl $^ | flamegraph.pl \ + --title "SPECINT2006 SPEED - Kernel stacks - Single thread" \ + --subtitle "$(shell vagrant ssh -c "sysctl -n kern.version" | head -n1)" \ + --fonttype "IBM Plex Mono" \ + --hash \ + --inverted > $@ + +all: rate.svg speed.svg + clean: rm -rf results ssh-config $(MAKE) opack-clean diff --git a/src/Makefile b/src/Makefile index af2c19d..b5e3796 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,6 @@ # SPEC2006 options -SIZE?="ref" -ITERATIONS?="1" +SIZE?=ref +ITERATIONS?=1 OCTOPUS_URL=https://git.sk4.nz/sk4nz/octopus.git SPEC2006_URL=https://git.sk4.nz/sk4nz/spec2006-openbsd.git @@ -29,36 +29,40 @@ RUNOPTS=-I --noreportable --verbose 5\ .PHONY: bootstrap bootstrap: - @echo $$(date) - Bootstrapping SPEC + @echo ▒ $$(date "+%H:%M:%S") Bootstrapping SPEC @mkdir -p /spec @ln -s /var/spec2006 /spec/cpu2006 @cd /var/spec2006/tools/src && CFLAGS='-fPIC' CONFIGFLAGS='--build=x86_64-unknown-openbsd' sh ./buildtools > build.log 2>&1 @cd /var/spec2006 && . ./shrc && ./bin/scripts.misc/genmanifest.sh > manifest.out.log 2>&1 && ./bin/packagetools OpenBSD > package.OpenBSD.out 2>&1 @echo 'cd /var/spec2006 && . ./shrc && cd /root' >> /root/.profile + @cd /var/spec2006 && . ./shrc && runspec --action=build -c int_speed_openbsd -T all -I -i $(SIZE) int > buildtests.log + @cd /var/spec2006 && . ./shrc && runspec --action=build -c int_rate_openbsd -T all -I -i $(SIZE) int >> buildtests.log @-pkg_add -I lscpu > /dev/null 2>&1 || pkg_add -I -D snap lscpu > /dev/null 2>&1 @echo sysctl kern.securelevel=-1 > /etc/rc.securelevel @echo kern.allowdt=1 >> /etc/sysctl.conf @echo kern.allowkmem=1 >> /etc/sysctl.conf @-sync - @echo $$(date) - SPEC bootstrapping complete + @echo ▒ $$(date "+%H:%M:%S") SPEC bootstrapping complete | tee $@ rate: - @echo $$(date) - Run SPECINT2006 Rate. $(SIZE) size - $(ITERATIONS) iterations - $$(sysctl -n hw.ncpufound) workloads + @echo ▒ $$(date "+%H:%M:%S") Run SPECINT2006 Rate. $(SIZE) size - $(ITERATIONS) iterations - $$(sysctl -n hw.ncpufound) workloads @btrace /usr/share/btrace/kprofile.bt > /var/spec2006/result/rate.kprofile & cd /var/spec2006 && . ./shrc && \ runspec -c int_rate_openbsd \ -n $(ITERATIONS) \ --rate=$$(sysctl -n hw.ncpufound) \ $(RUNOPTS) \ --size=$(SIZE) \ - int > /var/spec2006/result/rate.log; kill -2 $$(ps aux | grep btrace | grep -v grep | awk '{print $$2}') + int > /var/spec2006/result/rate.log; kill -2 $$(pgrep btrace) || true speed: - @echo $$(date) - Run SPECINT2006 Speed. $(SIZE) size - $(ITERATIONS) iterations - @btrace /usr/share/btrace/kprofile.bt > /var/spec2006/result/speed.kprofile && cd /var/spec2006 && . ./shrc && \ + @echo ▒ $$(date "+%H:%M:%S") Run SPECINT2006 Speed. $(SIZE) size - $(ITERATIONS) iterations + @btrace /usr/share/btrace/kprofile.bt > /var/spec2006/result/speed.kprofile & cd /var/spec2006 && . ./shrc && \ runspec -c int_speed_openbsd \ -n $(ITERATIONS) \ $(RUNOPTS) \ --size=$(SIZE) \ - int > /var/spec2006/result/speed.log; kill -2 $$(ps aux | grep btrace | grep -v grep | awk '{print $$2}') + int > /var/spec2006/result/speed.log; kill -2 $$(pgrep btrace) || true + @btrace /usr/share/btrace/kprofile.bt > /tmp/dummy & sleep 2 && kill -2 $$(pgrep btrace) || true -all: rate +all: rate speed + @echo ▒ $$(date "+%H:%M:%S") SPECINT2006 complete