Медленные программы никого не радуют. А программа, ограниченная профилем системы мандатного доступа AppArmor, не получит точно ускорения, но и не должна безбожно тормозить. Безопасность и удобство всегда будут находиться в разных углах ринга, но можно и нужно искать компромисс и золотую середину. Разработчики с версии snapd 2.36 предложили снапкрафтерам опцию --trace-exec для удобства диагностирования потенциальных проблем.
Рассмотрим первый старт программы в snap пакете на примере VLC, который традиционно долгий так как многое ещё не подготовленно при начальном старте. Хотя разработчики уже проводили работы по улучшению при первом старте программы.
snap run --trace-exec vlc
VLC media player 3.0.7 Vetinari (revision 3.0.7-0-g86cee31) [00000000016c3400] main libvlc: Запуск vlc с интерфейсом по умолчанию. Используйте 'cvlc' для запуска vlc без интерфейса. ... Slowest 10 exec calls during snap run: 0.094s /usr/lib/snapd/snap-confine 0.019s /usr/bin/head 0.041s /bin/cp 29.676s /snap/vlc/1049/usr/bin/update-mime-database.real 0.137s /snap/vlc/1049/usr/lib/x86_64-linux-gnu/glib-2.0/gio-querymodules 0.019s /snap/vlc/1049/usr/lib/x86_64-linux-gnu/glib-2.0/glib-compile-schemas 0.072s /snap/vlc/1049/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders 30.709s /snap/vlc/1049/bin/desktop-launch 1.257s /snap/vlc/1049/usr/bin/glxinfo 1.268s /snap/vlc/1049/bin/vlc-snap-wrapper.sh Total time: 40.113s
Снапкрафтер пакета может почерпнуть для себя в топ 10 медленных вызовов - кто является виновником в общем процессе старта программы. В нашем примере это безусловно создатель-MIME-базы. Эту задачу решают разработчики snap, так как это архитектурная особенность работы программы в изоляции и особенно её первого старта. Но в последующих стартах программы уже всё подготовленно и снапкрафтер может найти нового "виновника" или посчитать результат удовлетворительным.
Второй и последующие запуски не простой программы в 2 секунды, более чем достойно.
snap run --trace-exec vlc
VLC media player 3.0.7 Vetinari (revision 3.0.7-0-g86cee31) ... Slowest 10 exec calls during snap run: 0.006s snap-update-ns 0.072s /usr/lib/snapd/snap-confine 0.006s /usr/bin/getent 0.006s /bin/mkdir 0.005s /bin/mkdir 0.005s /bin/mkdir 0.007s /bin/mkdir 0.180s /snap/vlc/1049/bin/desktop-launch 0.128s /snap/vlc/1049/usr/bin/glxinfo 0.138s /snap/vlc/1049/bin/vlc-snap-wrapper.sh Total time: 2.682s
Можно получить список системных вызовов для дальнейшего анализа.
snap run --strace="-c" vlc
% time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 53,24 0,715643 600 1192 1 poll 34,76 0,467220 390 1197 38 futex 3,90 0,052488 367 143 57 wait4 2,12 0,028512 3 8615 2594 stat 1,66 0,022286 22286 1 rt_sigtimedwait 1,10 0,014844 2 5955 4739 open 0,34 0,004549 1 3320 mprotect 0,32 0,004306 2 1726 81 read ... 0,00 0,000000 0 1 faccessat 0,00 0,000000 0 1 execveat ------ ----------- ----------- --------- --------- ---------------- 100.00 1,344287 35486 8198 total
Strace не панацея, но прекрасный инструмент для диагностики потенциальных проблем и в дополнение к другим инструментам отлично помогает снапкрафтерам. Если вы делаете первые шаги в упаковке своей или чужой программы, то настоятельно рекомендую обратиться к статье Snap up your development – Tools for making the snap trek easier.
Мои подопечные в snap формате.