AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 532011
Accepted
Nathaniel M. Beaver
Nathaniel M. Beaver
Asked: 2019-07-25 20:05:45 +0800 CST2019-07-25 20:05:45 +0800 CST 2019-07-25 20:05:45 +0800 CST

Depurando um processo de thumbnailer lento

  • 772

Estou tentando depurar um comportamento de desempenho peculiar no processo de geração de miniaturas para eog, especificamente gdk-pixbuf. Os arquivos mínimos para reproduzir estão aqui:

https://github.com/nbeaver/gdk-pixbuf-bug

A árvore de processos fica assim:

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

Do stracelog , parece que /usr/bin/gdk-pixbuf-thumbnailerestá gastando cerca de 30 segundos olhando os arquivos de fonte:

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>

Existe um SVG específico que aciona esse comportamento. No entanto, não basta apenas rodar eog ou gdk-pixbuf-thumbnailerno SVG. Esse comportamento só acontece quando:

  • rodando eogem um diretório;

  • existe um SVG específico no diretório que ainda não possui uma miniatura em ~/.cache/thumbnails/.

    (Eu uso touchpara atualizar o timestamp do SVG e fazer o thumbnailer rodar novamente todas as vezes.)

  • há pelo menos uma outra imagem no mesmo diretório;

  • e a outra imagem tem um nome de arquivo que agrupa antes do nome de arquivo SVG.

    (Se o nome do arquivo for agrupado após o nome do arquivo SVG, ele gerará a miniatura em menos de um segundo. Caso contrário, levará cerca de 30 segundos.)

Existem alguns outros quebra-cabeças também. No stracelog , os tempos do relógio de parede não parecem corresponder ao tempo gasto nas chamadas do sistema. Eu corri eogcom stracea -fbandeira:

-f

Rastreie processos filhos conforme eles são criados por processos atualmente rastreados como resultado das chamadas de sistema fork(2), vfork(2) e clone(2).

e eu também tentei o -ffsinalizador:

-ff

Se a -o filenameopção estiver em vigor, cada rastreamento de processo será gravado filename.pidonde pidestá o ID numérico do processo de cada processo.

mas em ambos os casos gdk-pixbuf-thumbnailernão aparece nos arquivos de log dos processos filhos.

Também estou tendo problemas para executar (algo gdbsobre gdk-pixbuf-thumbnailer "O destino e o depurador estão em namespaces PID diferentes"), então não posso dizer onde está ficando preso.

$ 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

Eu estou supondo que isso tem a ver com o bwraprecipiente.

Versão informação:

$ 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

Minhas perguntas são:

  • Este bug é reproduzível em outras máquinas e outras versões?

    (Acontece que estou usando o Ubuntu 18.04, mas quero saber se isso acontece em outras distribuições.)

  • Por que não está strace -fpegando /usr/bin/gdk-pixbuf-thumbnailer como um processo filho de eog?

    Usa eogum método incomum para criar processos filho?

  • Como posso usar gdbpara anexar ao /usr/bin/gdk-pixbuf-thumbnailerprocesso e ver em qual função ele está gastando tempo?

  • O que pode estar causando esse comportamento?

fonts strace
  • 1 1 respostas
  • 639 Views

1 respostas

  • Voted
  1. Best Answer
    Nathaniel M. Beaver
    2019-07-26T08:51:27+08:002019-07-26T08:51:27+08:00

    Depois de encontrar a combinação certa de palavras-chave de pesquisa na web, tenho 90% de certeza de que esta é uma duplicata deste bug de 15 de dezembro de 2018:

    Geração lenta de miniaturas devido a problemas de fonte

    Então, eu estava investigando uma desaceleração no eog ao recarregar automaticamente os arquivos SVG, e parece que o problema estava na geração de miniaturas, que estava demorando ~ 10s. (Para um SVG minúsculo, lembre-se.) Mais especificamente, gdk-pixbuf-thumbnailer reclamou por não encontrar uma configuração de fonte e passou muito tempo olhando as fontes. Adicionando --ro-bind /var/cache/fontconfig /var/cache/fontconfigos argumentos para bwrap corrigiu o problema e o tempo caiu para ~0,2s.

    https://gitlab.gnome.org/GNOME/gnome-desktop/issues/90

    Está mencionado aqui:

    ...e também temos a enorme desaceleração, veja https://gitlab.gnome.org/GNOME/gnome-desktop/issues/90

    https://bugs.launchpad.net/ubuntu/+source/gnome-desktop3/+bug/1795668

    A correção é um patch no gnome-desktop3.

    thumbnail: Corrige o thumbnailer lento devido ao cache de fonte ausente

    Em algumas distribuições, o cache de fontes não fica em /usr, mas em /var, ao qual não permitimos acesso ao fazer sandboxing dos thumbnailers. Bind mount o diretório de cache fontconfig somente leitura se ele estiver fora de /usr, para acelerar a inicialização do thumbnailer.

    https://gitlab.gnome.org/GNOME/gnome-desktop/merge_requests/25/diffs

    Parece que a correção está no gnome-desktop3 versão 3.30 e posterior, portanto, em 19 de julho de 2019, era apenas o Ubuntu 19.10 (Eoan Ermine, não lançado) e 19.04 (Disco Dingo, fim de vida em janeiro de 2020).

    https://launchpad.net/ubuntu/+source/gnome-desktop3

    https://launchpad.net/ubuntu/+source/gnome-desktop3/+publishinghistory

    Informações de versão da minha máquina:

    $ 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
    
    • 1

relate perguntas

  • Como posso determinar se uma latência é devida a um driver ou ao agendador?

  • Como instalar fontes para CentOS 7?

  • O getauxval pode ser usado para determinar se você está sendo rastreado ou não?

  • Certo texto em fonte errada e desalinhado no Google Chrome

  • Qual é a fonte dessa imagem? [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve