Flamegraphing kernel stacks

This commit is contained in:
Samuel Aubertin 2023-10-12 21:18:24 +02:00
parent 1fbbd8dea7
commit 06e2aad88d
3 changed files with 35 additions and 12 deletions

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
.vagrant .vagrant
Vagrantfile Vagrantfile
*.json *.json
*.svg
opack_installer_latest opack_installer_latest
results results
ssh-config ssh-config

View File

@ -25,10 +25,10 @@ SPEC2006_SRC= ../spec2006-openbsd
$(INSTALL_ISO): $(INSTALL_ISO):
make -C ../skzbsd-build/ all make -C ../skzbsd-build/ all
ssh-config: opack ssh-config: | opack
(echo Host $(OPACK_TARGET) && (vagrant ssh-config | sed '1d')) > $@ (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 src root@$(OPACK_TARGET):/root/run
scp -F ssh-config -q -r $(SPEC2006_SRC) root@$(OPACK_TARGET):/var/spec2006 scp -F ssh-config -q -r $(SPEC2006_SRC) root@$(OPACK_TARGET):/var/spec2006
vagrant ssh -c "make -C run bootstrap" vagrant ssh -c "make -C run bootstrap"
@ -37,6 +37,24 @@ all: $(INSTALL_ISO) ssh-config
mkdir -p results mkdir -p results
scp -F ssh-config -q -r $(OPACK_TARGET):/var/spec2006/result/* 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: clean:
rm -rf results ssh-config rm -rf results ssh-config
$(MAKE) opack-clean $(MAKE) opack-clean

View File

@ -1,6 +1,6 @@
# SPEC2006 options # SPEC2006 options
SIZE?="ref" SIZE?=ref
ITERATIONS?="1" ITERATIONS?=1
OCTOPUS_URL=https://git.sk4.nz/sk4nz/octopus.git OCTOPUS_URL=https://git.sk4.nz/sk4nz/octopus.git
SPEC2006_URL=https://git.sk4.nz/sk4nz/spec2006-openbsd.git SPEC2006_URL=https://git.sk4.nz/sk4nz/spec2006-openbsd.git
@ -29,36 +29,40 @@ RUNOPTS=-I --noreportable --verbose 5\
.PHONY: bootstrap .PHONY: bootstrap
bootstrap: bootstrap:
@echo $$(date) - Bootstrapping SPEC @echo $$(date "+%H:%M:%S") Bootstrapping SPEC
@mkdir -p /spec @mkdir -p /spec
@ln -s /var/spec2006 /spec/cpu2006 @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/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 @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 @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 @-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 sysctl kern.securelevel=-1 > /etc/rc.securelevel
@echo kern.allowdt=1 >> /etc/sysctl.conf @echo kern.allowdt=1 >> /etc/sysctl.conf
@echo kern.allowkmem=1 >> /etc/sysctl.conf @echo kern.allowkmem=1 >> /etc/sysctl.conf
@-sync @-sync
@echo $$(date) - SPEC bootstrapping complete @echo $$(date "+%H:%M:%S") SPEC bootstrapping complete | tee $@
rate: 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 && \ @btrace /usr/share/btrace/kprofile.bt > /var/spec2006/result/rate.kprofile & cd /var/spec2006 && . ./shrc && \
runspec -c int_rate_openbsd \ runspec -c int_rate_openbsd \
-n $(ITERATIONS) \ -n $(ITERATIONS) \
--rate=$$(sysctl -n hw.ncpufound) \ --rate=$$(sysctl -n hw.ncpufound) \
$(RUNOPTS) \ $(RUNOPTS) \
--size=$(SIZE) \ --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: speed:
@echo $$(date) - Run SPECINT2006 Speed. $(SIZE) size - $(ITERATIONS) iterations @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 && \ @btrace /usr/share/btrace/kprofile.bt > /var/spec2006/result/speed.kprofile & cd /var/spec2006 && . ./shrc && \
runspec -c int_speed_openbsd \ runspec -c int_speed_openbsd \
-n $(ITERATIONS) \ -n $(ITERATIONS) \
$(RUNOPTS) \ $(RUNOPTS) \
--size=$(SIZE) \ --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