Tempo de criação do processo, script de shell e sobrecarga de chamada do sistema

3

Eu tenho uma máquina inicializada com Arch Linux e Ubuntu (16.04).

Comecei recentemente a usar o editor de texto Kakoune e notei que o tempo de inicialização é drasticamente diferente, dependendo do sistema operacional que estou usando. No entanto, acredito que o problema subjacente é não devido ao kakoune diretamente.

Na inicialização, o kakoune executa vários scripts de shell para permitir a integração com x11 e tmux, git, realce de sintaxe / colorschemes, etc. Isso pode ser desativado para apenas carregar o editor 'vanilla' usando o -n flag. / p>

O comando: kak -e q iniciará o kakoune, executará todos os scripts de inicialização e sairá imediatamente.

No Arch:% time kak -e q leva 1 segundo
time kak -n -e q (nenhum script de shell) termina em menos de 20 milis .

No Ubuntu:
time kak -e q leva cerca de 450 milis
time kak -n -e q está novamente em 20 milis

Depois de aparar a gordura e remover alguns dos scripts de inicialização, eu percebi uma melhora em ambos os sistemas operacionais, proporcional à quantidade removida.

Eu fiz alguns benchmarks com UnixBench e descobri que as principais diferenças entre os dois sistemas são vistas na 'criação de processos' testes de 'e' shell scripts '.

The shells scripts test measures the number of times per minute a process can start and reap a set of one, two, four and eight concurrent copies of a shell scripts where the shell script applies a series of transformation to a data file.

Aqui está a saída relevante. Unidades em 'loops por segundo' são melhores:

Process creation (1 parallel copy of tests)
Arch:    3,822
Ubuntu:  5,297
Process creation (4 parallel copies of tests)
Arch:   18,935
Ubuntu: 30,341

Shell Scripts (1 concurrent) (1 parallel copy of tests)
Arch:      972
Ubuntu:  5,141
Shell Scripts (1 concurrent) (4 parallel copies of tests)
Arch:    7,697
Ubuntu: 24,942

Shell Scripts (8 concurrent) (1 parallel copy of tests)
Arch:      807
Ubuntu:  2,257
Shell Scripts (8 concurrent) (4 parallel copies of tests)
Arch:    1,289
Ubuntu:  3,001

Como você pode ver, o sistema Ubuntu funciona muito melhor.

Eu testei usando diferentes shells de login, emuladores de terminal, recompilando kakoune, removendo software desnecessário para limpar o disco, etc. Estou certo de que esse é o gargalo.

A minha pergunta é: o que posso fazer para investigar mais e melhorar o desempenho do sistema Arch Linux para corresponder ao Ubuntu? Devo procurar sintonizar o kernel?

Notas adicionais:

  • os dois sistemas usam o mesmo tipo de sistema de arquivos (ext4)
  • Eu costumo usar mais o sistema Archlinux e notei que o desempenho se degradou com o tempo
  • Arch está em / dev / sda1 e tem ~ 200GB. O Ubuntu está em / dev / sda2, ~ 500GB. 1 TB HDD.
  • Arco uname -a : Linux ark 4.14.13-1-ARCH #1 SMP PREEMPT Wed Jan 10 11:14:50 UTC 2018 x86_64 GNU/Linux
  • Ubuntu uname -a : Linux sierra 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Obrigado

    
por tmalt 20.01.2018 / 07:31

3 respostas

1

Debian e Ubuntu usam dash como /bin/sh , é um pouco mais rápido que o Bash:

$ time for x in {1..1000} ; do /bin/bash -c 'true' ; done                                                                                                                                                                                                                                                      
real    0m1.894s

$ time for x in {1..1000} ; do /bin/sh -c 'true' ; done 
real    0m1.057s

Isso é em torno da mesma área (em proporção) que seus números.

Alterando /bin/sh para traço em vez de Bash no Debian e o Ubuntu foi muito por causa do desempenho:

The major reason to switch the default shell was efficiency. bash is an excellent full-featured shell ... However, it is rather large and slow to start up and operate by comparison with dash.

( link )

    
por 20.01.2018 / 08:43
1

Conforme explicado pelo ilkkachu, o Arch usa o bash para /bin/sh , enquanto o padrão do Ubuntu é traço.

Para investigar mais sobre isso e determinar se isso explica a diferença, você pode configurar seu sistema Ubuntu para usar o bash e ver se os benchmarks relatam resultados semelhantes aos obtidos no Arch. Para fazer isso, execute

sudo dpkg-reconfigure dash

e selecione "Não". Você pode verificar se /bin/sh aponta para bash e executar seus testes.

Para restaurar o padrão, execute o mesmo comando novamente e escolha "Sim".

Se este é o motivo da diferença no desempenho, melhorar o Arch para combinar com o Ubuntu será difícil. Você poderia instalar o dash e usar isso, mas você provavelmente teria muitos scripts que assumem /bin/sh é bash e falha com dash - o Debian e o Ubuntu demoraram bastante tempo para identificar e corrigir todos os problemas.

    
por 20.01.2018 / 11:06
1

Adicionando minha própria resposta caso alguém mais tenha o mesmo problema:

Ao executar a resposta for loops no @ilkkachu a partir de um shell bash interativo com zsh ou fish como meu shell de login , o loop /bin/bash cerca de 13 segundos. Se eu executar o loop a partir de um shell de login root ou alterar meu shell de login para /bin/bash , obtenho resultados semelhantes aos da resposta de @ilkkachu.

Presumo que isso ocorra porque /bin/bash herda seu ambiente do shell de login ( /bin/zsh ou /bin/fish ), mas não tenho certeza.

De qualquer forma, resolvi o problema alterando meu shell de login para /bin/bash e configurando meu terminal para executar /bin/fish ou /bin/zsh como um shell interativo.

    
por 20.01.2018 / 21:46