#!/bin/bash # ----- Initialize CAN devices ----- . caninit.sh 1000 # ----- Configure ftrace ----- mount -t debugfs nodev /sys/kernel/debug FTRDIR=/sys/kernel/debug/tracing sysctl kernel.ftrace_enabled=1 echo "function_graph" > ${FTRDIR}/current_tracer sleep 1 echo "can_send" > ${FTRDIR}/set_ftrace_filter echo 1 > ${FTRDIR}/tracing_on # ----- Run benchmarks ----- DESTDIR=ftrace GAP=0 COUNT=5000 DATA=i LENGTH=8 FRMTYPE="" DEV="can0" echo "Benchmarking ..." for X in "sff" "eff"; do if [ ${X} == "eff" ]; then FRMTYPE="-e" else FRMTYPE="" fi # Default (pfifo qdisc) echo "[pfifo]" . setcanfltr.sh del ${DEV} echo > ${FTRDIR}/trace cangen ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_pfifo1.txt echo > ${FTRDIR}/trace cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_pfifo2.txt # With PRIO qdisc; all traffic is classified into first class echo "[prio]" echo > ${FTRDIR}/trace . setcanfltr.sh del ${DEV} . setcanfltr.sh prio ${DEV} cangen ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_prio1.txt # With PRIO qdisc; most of the traffic goes to "default" class echo > ${FTRDIR}/trace cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_prio1b.txt # With PRIO qdisc; There is maximum rules for each (except the last) class echo "[prio2]" echo > ${FTRDIR}/trace . setcanfltr.sh del ${DEV} if [ ${X} == "eff" ]; then . setcanfltr.sh prio2eff ${DEV} else . setcanfltr.sh prio2sff ${DEV} fi cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_prio2.txt # With HTB qdisc echo "[htb]" echo > ${FTRDIR}/trace . setcanfltr.sh del ${DEV} . setcanfltr.sh htb ${DEV} cangen ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_htb1.txt echo > ${FTRDIR}/trace cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_htb2.txt # With SFQ qdisc echo "[sfq]" echo > ${FTRDIR}/trace . setcanfltr.sh del ${DEV} . setcanfltr.sh sfq ${DEV} cangen -b 18432 ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_sfq.txt echo > ${FTRDIR}/trace cangen -b 18432 ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT} cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_sfq2.txt done # ----- Disable tracing ----- echo 0 > ${FTRDIR}/tracing_on exit 0