サムネイルの作成中に特別なパフォーマンス動作をデバッグしようとしています。eog
具体的にgdk-pixbuf
。再生する最小ファイルは次のとおりです。
https://github.com/nbeaver/gdk-pixbuf-bug
プロセスツリーは次のとおりです。
systemd,1 splash
`-plasmashell,4366
`-konsole,6783
`-bash,6793
`-make,6949 reproduce
`-eog,6973 /usr/share/doc/docutils-doc/docs/user/images
`-bwrap,10071 --ro-bind /usr /usr --ro-bind /bin /bin --ro-bind /lib64 /lib64 --ro-bind /lib /lib --ro-bind /sbin /sbin --proc /proc --dev /dev --chdir / --setenv GIO_USE_VFS local --unshare-all --die-with-parent --bind /tmp/gnome-desktop-thumbnailer-2HUN5Z /tmp --ro-bind /usr/share/doc/docutils-doc/docs/user/images/s5-files.svg /tmp/gnome-desktop-file-to-thumbnail.svg --seccomp 11 /usr/bin/gdk-pixbuf-thumbnailer -s 128 file:///tmp/gnome-desktop-file-to-thumbnail.svg /tmp/gnome-desktop-thumbnailer.png
`-bwrap,10074 --ro-bind /usr /usr --ro-bind /bin /bin --ro-bind /lib64 /lib64 --ro-bind /lib /lib --ro-bind /sbin /sbin --proc /proc --dev /dev --chdir / --setenv GIO_USE_VFS local --unshare-all --die-with-parent --bind /tmp/gnome-desktop-thumbnailer-2HUN5Z /tmp --ro-bind /usr/share/doc/docutils-doc/docs/user/images/s5-files.svg /tmp/gnome-desktop-file-to-thumbnail.svg --seccomp 11 /usr/bin/gdk-pixbuf-thumbnailer -s 128 file:///tmp/gnome-desktop-file-to-thumbnail.svg /tmp/gnome-desktop-thumbnailer.png
`-gdk-pixbuf-thum,10075 -s 128 file:///tmp/gnome-desktop-file-to-thumbnail.svg /tmp/gnome-desktop-thumbnailer.png
~からstrace
丸太/usr/bin/gdk-pixbuf-thumbnailer
、フォントファイルを表示するのに約30秒かかったようです。
22:44:05 munmap(0x7fd491988000, 20930832) = 0 <0.000558>
22:44:05 openat(AT_FDCWD, "/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc", O_RDONLY) = 5 <0.000060>
22:44:05 fcntl(5, F_SETFD, FD_CLOEXEC) = 0 <0.000014>
22:44:05 fstat(5, {st_mode=S_IFREG|0644, st_size=20930832, ...}) = 0 <0.000013>
22:44:05 mmap(NULL, 20930832, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fd491988000 <0.000021>
22:44:05 close(5) = 0 <0.000011>
22:44:06 munmap(0x7fd491988000, 20930832) = 0 <0.000525>
22:44:06 openat(AT_FDCWD, "/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc", O_RDONLY) = 5 <0.000076>
22:44:06 fcntl(5, F_SETFD, FD_CLOEXEC) = 0 <0.000013>
22:44:06 fstat(5, {st_mode=S_IFREG|0644, st_size=20930832, ...}) = 0 <0.000012>
22:44:06 mmap(NULL, 20930832, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fd491988000 <0.000023>
22:44:06 close(5) = 0 <0.000013>
<snip>
22:44:31 stat("/usr/share/fonts/opentype/stix-word/STIXMath-Regular.otf", {st_mode=S_IFREG|0644, st_size=476872, ...}) = 0 <0.000024>
22:44:31 openat(AT_FDCWD, "/usr/share/fonts/opentype/stix-word/STIXMath-Regular.otf", O_RDONLY) = 5 <0.000026>
22:44:31 fcntl(5, F_SETFD, FD_CLOEXEC) = 0 <0.000014>
22:44:31 fstat(5, {st_mode=S_IFREG|0644, st_size=476872, ...}) = 0 <0.000013>
22:44:31 mmap(NULL, 476872, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fd49c26a000 <0.000023>
22:44:31 close(5) = 0 <0.000015>
この動作を引き起こす特定のSVGがあります。しかし、SVGで実行するeog
だけではgdk-pixbuf-thumbnailer
十分ではありません。この動作は、次の状況でのみ発生します。
eog
ディレクトリで実行します。ディレクトリにまだサムネイルがない特定のSVGがあります
~/.cache/thumbnails/
。(私は
touch
SVGのタイムスタンプを更新し、毎回サムネイルが再び実行されるようにしました。)同じディレクトリに1つ以上の異なるイメージがあります。
他の画像のファイル名が合わされています今後SVGファイル名。
(ファイル名が揃っている場合後ろにSVGファイル名を入力すると、1秒以内にサムネイルが生成されます。それ以外の場合は約30秒かかります。 )
他のパズルもあります。内部にstrace
丸太、壁時計の時間がシステムコールにかかった時間と一致しないようです。私はeog
かつて旗の下を走った。strace
-f
-f
fork(2)、vfork(2)、および clone(2) システムコールの結果として現在追跡されているプロセスによって生成されたサブプロセスを追跡します。
私もこの-ff
フラグを試しました:
-ff
この
-o filename
オプションが適用されると、各プロセストレースは各プロセスの数値プロセスIDに書き込まれますfilename.pid
。pid
ただし、どちらの場合も、
gdk-pixbuf-thumbnailer
子プロセスのログファイルには表示されません。
gdb
また、実行に問題がありgdk-pixbuf-thumbnailer
(「ターゲットとデバッガが異なるPIDネームスペースにある」という点で)、どこで停止したのかわかりません。
$ sudo gdb -p 20789
[sudo] password for nathaniel:
<snip>
Error while mapping shared library sections:
Could not open `target:/lib/x86_64-linux-gnu/libbsd.so.0' as an executable file: No such file or directory
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
warning: Target and debugger are in different PID namespaces; thread lists and other data are likely unreliable. Connect to gdbserver inside the container.
(gdb) quit
Detaching from program: target:/newroot/usr/bin/gdk-pixbuf-thumbnailer, process 20789
コンテナと関係があると思いますbwrap
。
バージョン情報:
$ apt-cache policy libgdk-pixbuf2.0-bin eog
libgdk-pixbuf2.0-bin:
Installed: 2.36.11-2
Candidate: 2.36.11-2
Version table:
*** 2.36.11-2 500
500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
100 /var/lib/dpkg/status
eog:
Installed: 3.28.1-1
Candidate: 3.28.1-1
Version table:
*** 3.28.1-1 500
500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
100 /var/lib/dpkg/status
私の質問は次のとおりです
このエラーは他のコンピュータまたは異なるバージョンで再現できますか?
(Ubuntu 18.04を使用していますが、他のディストリビューションでもこれが発生するかどうかを知りたいです)。
なぜサブプロセスとして選択しないのですか
strace -f
?/usr/bin/gdk-pixbuf-thumbnailer
eog
eog
子プロセスを作成するために珍しい方法を使用していますか?これを使用してプロセス
gdb
に接続し、どの機能が時間を費やしているかを確認するにはどうすればよいですか?/usr/bin/gdk-pixbuf-thumbnailer
この動作の原因は何ですか?
ベストアンサー1
Web検索キーワードの正しい組み合わせを見つけた後、これは2018年12月15日に発生したエラーが繰り返されたことを90%確信しています。
フォントの問題によりサムネイルの作成が遅い
そのため、SVGファイルを自動的にリロードするときにeogが遅くなる現象を調べていますが、問題はサムネイル生成に10秒ほどかかるようです。 (非常に小さいSVGの場合を参照)より具体的に言えば、
gdk-pixbuf-thumbnailer
フォント構成が見つからず、フォントを見るのに多くの時間を費やすと文句を言います。--ro-bind /var/cache/fontconfig /var/cache/fontconfig
bwrapパラメータを追加すると問題が解決し、時間は約0.2秒に短縮されました。
https://gitlab.gnome.org/GNOME/gnome-desktop/issues/90
ここで言及されています:
...また、途方もない速度低下を経験しました。 https://gitlab.gnome.org/GNOME/gnome-desktop/issues/90
https://bugs.launchpad.net/ubuntu/+source/gnome-desktop3/+bug/1795668
修正はgnome-desktop3
。
サムネイル: フォントキャッシュの欠落によりサムネイルが遅くなる問題を修正
一部のディストリビューションでは、フォントキャッシュは/usrではなく/varにあり、サムネイルをサンドボックス化するときは/varへのアクセスを許可しません。 Fontconfigキャッシュディレクトリが/ usrの外部にある場合は、読み取り専用にバインドマウントしてサムネイルの起動を高速化します。
https://gitlab.gnome.org/GNOME/gnome-desktop/merge_requests/25/diffs
gnome-desktop3 バージョン 3.30 以降で修正されたように見えるため、2019 年 7 月 19 日現在、Ubuntu 19.10 (Eoan Ermine, 未発売) および 19.04 (Disco Dingo, 寿命終了 2020-1 月) のみあります。
https://launchpad.net/ubuntu/+source/gnome-desktop3
https://launchpad.net/ubuntu/+source/gnome-desktop3/+publishinghistory
マイコンピュータのバージョン情報:
$ apt-cache policy libgnome-desktop-3-17
libgnome-desktop-3-17:
Installed: 3.28.2-0ubuntu1.5
Candidate: 3.28.2-0ubuntu1.5
Version table:
*** 3.28.2-0ubuntu1.5 500
500 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
100 /var/lib/dpkg/status
3.28.2-0ubuntu1.3 500
500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
3.28.1-1ubuntu1 500
500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages