Repensando o PID 1 - Lennart Poettering

Esse artigo é a tradução (livre e resumida) do documento que deu origem ao systemd. Escrito por Lennart Poettering, Et al. A partir de 2010 esse polêmico sistema pretende substituir o SysVinit e ir bem além. No documento podemos ver os motivos e as justificativas que levaram desenvolvimento do systemd na visão do seu próprio autor.

[ Hits: 10.029 ]

Por: Perfil removido em 20/01/2016


Mantendo o PID pequeno



Outra coisa que devemos aprender com o MacOS é que shell script é uma coisa do mal. O Shell é rápido e shell é lento. Rápido para programar e modificar, mas lento demais para executar. O SysVinit é lento pelas mesmas razões já que é modelado em torno de shell script. Independente de ser o bash ou outro shell, no fim essa abordagem é lenta de qualquer modo.

Os scripts podem fazer um sem número de chamadas. Por exemplo, meu sistema atual é baseado em /etc/init.d. Ele faz 77 chamadas para grep, 92 chamadas para AWK, 23 chamadas para cut e 74 chamadas para SED. Para cada uma destas chamadas um processo é instanciado, várias bibliotecas são carregadas, várias coisas como i18n são configuradas e executadas.

Além disto, scripts são frágeis, e mudam de comportamento de acordo com o ambiente e suas variáveis. Algumas dessas coisas são difíceis de controlar. Então, que tal se nos livrarmos de shell script na inicialização! Quando percebemos que a maior parte do que esses scripts fazem é apenas uma bobagem chata.

A maior parte do serviço de scripts são coisas triviais relacionadas com configuração, que poderiam ser reescritas em C, mantidas em executáveis separados, movidas para um daemon ou simplesmente incluídas no próprio sistema init. É óbvio que não podemos nos livrar de scripts do dia para a noite. Reescrever todas essas rotinas em C, depurar e testar pode levar tempo.

Mantendo o rastreamento de processos

A parte central de um sistema que inicializa e mantém serviços é evitar que ele aja como uma babá: na verdade ele deve assistir os serviços. Assim, deve reiniciá-los se eles falharem, neste caso deve coletar informações sobre a falha, administrar despejos gerados por essas falhas, gerar informações em registro de log ou dados para auditoria.

Além disto, o sistema deve ser capaz de encerrar um serviço completamente. Isso pode soar como uma coisa fácil, mas acredite isso é muito difícil de implementar. Tradicionalmente, um processo Unix pode criar um ou mais forks durante sua execução.

Deste modo, é muito fácil perder o controle entre o processo filho, seu pai e seu avô. Um exemplo fácil é quando Apache utiliza CGI. Esses processos podem se perder facilmente quando Apache é encerrado de modo abrupto.

Então, como manter o rastreamento desses processos que não podem escapar da supervisão de uma babá? Diferentes pessoas vieram com diferentes soluções. Sem entrar em detalhes vimos soluções como ptrace ou conectores netlink (baseados em fork() ou exit()) que são muito criticados. O que nós podemos fazer realmente a respeito disto?

Bem, desde que o kernel incorporou grupos de controle (cgroup) podemos criar uma hierarquia com os processos. Essa hierarquia é exposta diretamente para um sistema de arquivos virtual facilmente acessível. Cgroup são basicamente nomes de diretórios em um sistema de arquivos.

Assim, se um processo do grupo fizer um fork(), seu filho se torna membro do grupo automaticamente. Normalmente um processo não pode escapar do grupo (há exceções). A ideia original de Cgroups era funcionar como um contenedor: certos subsistemas do kernel podem forçar os limites de recursos de certos grupos.

Tradicionalmente a limitação de recursos (CPU e memória) são implementados via setrlimit() em uma base por processo. Cgroup por outro lado pode forçar limites para um grupo de processos. Você poderia utilizar Cgroups para limitar a memória de Apache e seus processos filhos.

Então, aquele CGI desgarrado está limitado por um certo controle. O controle de processos por Cgroup pode ser visualizado em /proc/$PID/cgroup. Afinal, Cgroups é uma ótima opção para manter o rastreamento de processos para finalidades de tutela por uma babá.

Controlando o Ambiente de Execução de Processos

Buscamos uma babá que deve ser boa em controlar a execução, o término e as falhas dos processos. Além disto, ela deve cuidar do ambiente de execução e da segurança desse ambiente de modo geral.

Na prática, isso significa configurar coisas óbvias como os parâmetros e limites para o processo (setrlimit()), limitar recursos, bloquear usuários/grupos e outras tarefas básicas. O kernel Linux dá a usuários e administradores um monte de controles sobre processos (apesar disto, poucos são utilizados corretamente).

Para cada processo você pode configurar controles sobre CPU ou agendamento de entrada/saída, afinidade de CPU e variáveis de ambiente cgroup, seus limites e muito mais.

Finalmente, o sistema de Logs é uma parte importante da execução de serviços: no mundo ideal cada tarefa deveria gerar um log. Um bom sistema init deve fornecer meios de registrar logs sobre os daemons que gerencia. Esse sistema de logs associado ao init poderia ser um bom substituto para syslog.

Página anterior     Próxima página

Páginas do artigo
   1. Repensando o PID 1
   2. "Paralelizando" Serviços com Soquetes
   3. Mantendo o PID pequeno
   4. Upstart
   5. Juntando tudo com Systemd
Outros artigos deste autor

Linux ou Windows? Eis várias questões

Tunando sistemas de arquivos para GNU/Linux

LookXP-IceWM - Linux leve e com cara de XP

Instalando o OSS4 no Ubuntu 11.04

Regulamentação das profissões na área de informática

Leitura recomendada

Quando a Microsoft me fez mudar para OpenSource

Porque troquei do Ubuntu LTS para o openSUSE

Coisas a se evitar ao falar sobre o Linux

Uma crítica à critica & Sugestões aos ativistas do SL

GNU/Linux + Dogmas

  
Comentários
[1] Comentário enviado por bielinux em 20/01/2016 - 13:12h

Vendo este artigo,
dá até vontade de usar o systemd...
mas...
o Lennart Poettering é quem o desenvolve...
e o PulseAudio depois que foi "abandonado" por seu dono...
ficou melhor...
então...

É UMA CILADA, BINO!

[2] Comentário enviado por aldooliveira em 20/01/2016 - 15:37h

Interessante.

[3] Comentário enviado por MrBlackWolf em 20/01/2016 - 16:59h

Eu entendo o pé atrás de vocês com Lennart, vide o histórico do mesmo, mas vamos acompanhar de perto a evolução do systemd.

[4] Comentário enviado por sacioz em 20/01/2016 - 19:11h

Divertido ? Não sei , seguro ? Duvido , facil de manter ? Parece que não é ; léve ? não é . O que tem de gente irritada com esse systemd , não são poucos , e gente de peso na indústria .
Vamos ver . Eu estou usando sim , mas tão logo posso , saio dele pois segundo li , não é seguro . E segurança em computação é altíssima prioridade no meu livro . Quem estiver interessado procure por Devuan , a titulo de informação , talvez .
Vamos ver .

[5] Comentário enviado por removido em 20/01/2016 - 20:27h

O systemd pode até dar certo, mas o histórico de comportamento do Poettering como programador e (suposto) profissional mostra que o systemd só vai ficar decente de usar após a saída deste indivíduo da equipe de desenvolvimento do systemd.
Vide o caso do conhecido PulseAudio.
--------------------
Primeiro você se adapta ao Linux; depois, o Linux se adapta a você.

[6] Comentário enviado por removido em 20/01/2016 - 22:04h

Mesmo assim systemd incomoda.
O problema é com o software ou com o programador?
Prá mim são os dois.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[7] Comentário enviado por Username em 23/01/2016 - 15:29h

Assange já havia dito que o Debian e derivados não era mais seguro.
E também é de se estranhar que a distribuição considerada a mais estável e segura e rigorosa de todas, passe a usar systemd de cara.
https://stallman.org/rms-assange-snowden.jpg

Não é trabalho do Linus ficar usando o kernel pra contornar os bugs não resolvidos do complexo systemd , a qual usa o kernel Linux de mula.
E tome cuidado Linus Torvalds , o Lennart Poettering não está trollando rsrs
http://i.imgur.com/h3t1MaS.jpg
Não duvido num apocaliptico futuro próximo passaremos a usar "GNU/Systemd"

O problema não é o systemd ter backdoor ou não, o qual tenho certeza que não tem . O problema é sua complexidade , a monopolização e sua suite, systemd é um init system inchado com a proposta de fazer muito mais além do que um simples init deveria fazer.
Vai enfraquecer a segurança no mundo Linux e facilitar a implementação de backdoor de terceiros no futuro.

edit: De acordo com o senhor Poettering Systemd is about "choice".
http://i.imgur.com/eZNwlMx.jpg

Poettering zueiro tirando uma onda com o projeto Devuan
http://i.imgur.com/cIkG0q9.png





[8] Comentário enviado por removido em 23/01/2016 - 20:49h

Não tem jeito. O pessoal só vai acreditar quando a m&rd@ estiver feita.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[9] Comentário enviado por removido em 25/01/2016 - 21:24h

Concordo plenamente!
Systemd é complexo demais, quer fazer muita coisa ao mesmo tempo. Isso é contrário ao princípio KISS.
--------------------
Primeiro você se adapta ao Linux; depois, o Linux se adapta a você.

[10] Comentário enviado por Carlos_Cunha em 27/01/2016 - 02:41h

Muito bom artigo amigo, ja estou lendo.
Eu particularmente uso o Systemd e gosto, acho só falta as pessoas mais vontade de aprender a usa-lo, pois vejo mais reclamações do que acham do que de experiências e produção.


#-------------------------------------------------------------------------------------#

"Linux é algo que me fez ter Gosto pela Informática, se tornou um Vicio" - Carlos A. P. Cunha

[11] Comentário enviado por removido em 30/01/2016 - 11:45h

Notícia urgente: acabei de descobrir que LP se criou no Rio de Janeiro. Isto explica alguma coisa?
----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[12] Comentário enviado por lcavalheiro em 10/02/2016 - 22:15h

Lennart Poettering. Que nenhuma voz alegre diga seu nome, e que nenhuma memória de sua existência seja preservada. Que nem as cinzas que ele toque sejam permitidas existir, e que o Limbo o engolfe e o engula e jamais o regurgite ou o defeque de volta. Que todo o software que ele toque seja esquecido e malogre bom funcionamento enquanto seu nome estiver associado a ele. Pois se essas são as justificativas de Lennart Poettering para algo como o systemd, então vê-se que ele não apenas deixa a lógica e o bom senso em casa quando vai programar como não os tem em momento algum. Após um texto longo, tudo que ele disse foi "systemd é bom porque ele inicializa a máquina mais rapidamente" - como se eu fosse desligar e religar meu computador a cada 30min.

Há um mérito menor para ele nesse texto. Ele fez uma análise não-ruim do PID 1. Mas não é uma análise boa, apenas uma não-ruim.

--
Dino®
[i]Vi veri universum vivus vici[/i]
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta

[13] Comentário enviado por albfneto em 11/02/2016 - 13:35h

Olha, muitas pessoas, inclusive eu, não gostam pq systemd é pesado, dificil de usar e muito instável... Eu uso no Sabayon pq não tem outra coisa, mas.... por exemplo, após atualizar meu KDE 5, cadê que o icone de desligar funciona, só no comando... dá erro de DBUS, UDEV e Polkit e timeout...]
é por causa do systemd... Muitos linux em DVD não dão mais boot em micros antigos e porque?
por causa do systemd etc... etc...
ele vai melhorar, claro que ele vai melhorar, tudo melhora... mas no momento...
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[14] Comentário enviado por removido em 12/02/2016 - 20:43h

Concordo plenamente com os comentários dos 2 especialistas acima:

- "Após um texto longo, tudo que ele disse foi 'systemd é bom porque ele inicializa a máquina mais rapidamente' - como se eu fosse desligar e religar meu computador a cada 30min." (lcavalheiro)

- "Muitos linux em DVD não dão mais boot em micros antigos e porque?
por causa do systemd (...)" (albfneto)

Eu possuo um computador antigo, bem modesto mas que ainda dá conta do recado (e muito bem). Já tentei usar diversas distros, mas praticamente só as que não tem o systemd deram boot... todas as outras falharam nessa simples tarefa.

Agora, eu pergunto também: pra quê eu quero um sistema que "dá boot depressa" apenas em computadores novos? Será que ele acha que todo mundo que usa Linux tem condições de comprar um PC novo (e jogar um computador funcionando no lixo... sim, no lixo) só pra continuar usando a distro que gosta porque o systemd não é capaz de inicializar em um computador mais antigo?
Claro que a solução mais óbvia é mudar de distro, sem dó nem piedade, e evitar o systemd até que as coisas melhorem...

Eu não quero um sistema operacional que dá boot depressa, eu quero um que funcione e me dê liberdade de escolher o que eu quero fazer com o meu computador!
--------------------
Primeiro você se adapta ao Linux; depois, o Linux se adapta a você.

[15] Comentário enviado por lcavalheiro em 28/02/2016 - 19:15h

Rapaz, tô longe de ser um especialista. Inclusive eu apenas citei o que Patrick Volkerding disse sobre esse texto do Lennart Poettering, citação essa com a qual concordo plenamente :-)
--
Dino®
[i]Vi veri universum vivus vici[/i]
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts