robertalab-ev3dev
robertalab-ev3dev copied to clipboard
figure out what made startup of the connector slow
Prepare:
# stop the connector
sudo systemctl stop openrobertalab
# eventually delete update to simplify measurements
rm -rf /home/robot/.local/lib/python/roberta/
Run
strace -e file -o /tmp/strace.log -ttt /usr/bin/openrobertalab
then download it and analyze:
scp [email protected]:/tmp/strace.log ./
# remove everything after SIGINT
~/bin/plot-timeline-strace.py strace.log -o strace.png
Stats for which syscalls take how much time.
strace -e file -o /tmp/strace.log -c /usr/bin/openrobertalab
cat /tmp/strace.log
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
59.60 0.051897 200 259 6 open
40.40 0.035181 37 961 151 stat64
0.00 0.000000 0 3 1 execve
0.00 0.000000 0 36 36 access
0.00 0.000000 0 1 1 mkdir
0.00 0.000000 0 4 2 readlink
0.00 0.000000 0 1 1 statfs
0.00 0.000000 0 13 1 lstat64
0.00 0.000000 0 2 2 statfs64
0.00 0.000000 0 38 2 openat
------ ----------- ----------- --------- --------- ----------------
100.00 0.087078 1318 203 total
Find the slowest calls
strace -e file -o /tmp/strace.log -r -ttt /usr/bin/openrobertalab
then download it and analyze:
scp [email protected]:/tmp/strace.log ./strace.rel.log
# remove everything after SIGINT
sort -n strace.rel.log
To see all the files accessed sorted by path:
grep "open(" strace.rel.log | sed 's/open(/open (/' | sort -k 3
The python path has these components:
- /home/robot/.local/lib/python
- /usr/bin
- /usr/lib/python3.4
- /usr/lib/python3.4/plat-arm-linux-gnueabi
- /usr/lib/python3.4/lib-dynload
- /usr/local/lib/python3.4/dist-packages
- /usr/lib/python3/dist-packages
"/usr/local/lib/python3.4" is empyt and we can maybe drop it from the path.
We can use convert to turn pbm files into png files since those are loaded first:
https://github.com/python-pillow/Pillow/blob/master/src/PIL/ImageFont.py#L74
but pngs load slower than pbm files so this isn't worth it.