iter1 phase3: archive helper scripts used during baseline measurement
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Executable
+63
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
# C1 + C2 + C6 instrumentation: per-codec decode with strace (ioctl) + lsof (fds) + dmesg before/after.
|
||||
# Decodes 30 frames into a tmp file to verify HW engagement; doesn't measure FPS.
|
||||
set -u
|
||||
OUT=$HOME/measurements/p3
|
||||
mkdir -p $OUT
|
||||
codecs=("h264:rkvdec:h264.mp4" "vp8:hantro:vp8.webm" "mpeg2:hantro:mpeg2.ts")
|
||||
|
||||
# C6 pre: dmesg snapshot
|
||||
sudo dmesg --time-format=ctime > $OUT/dmesg.pre.txt
|
||||
|
||||
for spec in "${codecs[@]}"; do
|
||||
codec=${spec%%:*}; route=$(echo $spec | cut -d: -f2); ext=${spec##*:}
|
||||
cf=$HOME/measurements/encoded/bbb_60s_720p.${ext}
|
||||
log=$OUT/engage_${codec}
|
||||
rm -f $log.{strace,lsof,stderr,nv12} 2>/dev/null
|
||||
|
||||
echo "=== $codec ($route) ===" | tee $log.summary
|
||||
|
||||
# Launch in background, track PID; lsof+strace alongside
|
||||
LIBVA_DRIVER_NAME=v4l2_request strace -ff -o $log.strace -e trace=ioctl,openat \
|
||||
ffmpeg -hide_banner -loglevel error \
|
||||
-hwaccel vaapi -hwaccel_output_format vaapi \
|
||||
-i "$cf" -vf "hwdownload,format=nv12" -frames:v 30 \
|
||||
-f rawvideo -pix_fmt nv12 -y $log.nv12 \
|
||||
> $log.stderr 2>&1 &
|
||||
pid=$!
|
||||
|
||||
# Wait briefly then lsof
|
||||
sleep 0.6
|
||||
if kill -0 $pid 2>/dev/null; then
|
||||
lsof -p $pid 2>/dev/null | grep -E "/dev/(video|media|dri)" > $log.lsof
|
||||
fi
|
||||
wait $pid; rc=$?
|
||||
|
||||
# Aggregate
|
||||
size=$(stat -c%s $log.nv12 2>/dev/null || echo 0)
|
||||
expected=$((30 * 1280 * 720 * 3 / 2)) # 30 frames yuv420p 720p
|
||||
size_ok=$([ "$size" = "$expected" ] && echo "ok" || echo "MISMATCH (expected=$expected)")
|
||||
|
||||
vidioc=$(grep -h "VIDIOC_S_EXT_CTRLS\|VIDIOC_QUERYCAP\|VIDIOC_QBUF\|VIDIOC_DQBUF" $log.strace.* 2>/dev/null | wc -l)
|
||||
media_q=$(grep -h "MEDIA_REQUEST_IOC_QUEUE\|MEDIA_REQUEST_IOC_REINIT" $log.strace.* 2>/dev/null | wc -l)
|
||||
fd_count=$(wc -l < $log.lsof 2>/dev/null || echo 0)
|
||||
|
||||
{
|
||||
echo " rc=$rc size=$size size_ok=$size_ok"
|
||||
echo " ioctl V4L2 (S_EXT_CTRLS+Q/DQBUF+QUERYCAP)=$vidioc"
|
||||
echo " ioctl MEDIA_REQUEST_*=$media_q"
|
||||
echo " open V4L2/media/DRI fds=$fd_count"
|
||||
if [ -s $log.lsof ]; then
|
||||
echo " fds:"
|
||||
awk '{print " " $9}' $log.lsof | sort -u
|
||||
fi
|
||||
} | tee -a $log.summary
|
||||
done
|
||||
|
||||
# C6 post
|
||||
sudo dmesg --time-format=ctime > $OUT/dmesg.post.txt
|
||||
echo
|
||||
echo "=== dmesg diff (new lines since pre) ==="
|
||||
diff $OUT/dmesg.pre.txt $OUT/dmesg.post.txt | head -20
|
||||
|
||||
echo "=== done $(date -Iseconds) ==="
|
||||
Reference in New Issue
Block a user