Qingchuang Technology Flow | Simples Operação e Manutenção Ferramentas Observáveis (2): Problemas Comuns na Aplicação eBPF

Na última edição, conversei com você sobre o histórico de desenvolvimento e as características do eBPF. Clique aqui↓↓↓ Qingchuang Technology Flow | Simples Operação e Manutenção Ferramentas observáveis ​​(1): fale sobre o passado e o presente do eBPF e revise os emocionantes conteúdo da edição anterior com um clique.

Esta edição compartilha principalmente com você os problemas que podem surgir durante a aplicação do eBPF, esperando ajudar amigos que se deparam com problemas semelhantes. Sem mais delongas, vamos ao que interessa.

1. Adaptabilidade do kernel, algumas funções da versão antiga não estão disponíveis

A versão mínima exigida do eBPF é o Linux 4.1, e o requisito mínimo da versão do kernel do eBPF é o Linux 4.1, que é a versão do kernel lançada em 2015. Kernels anteriores a esta versão não suportam eBPF.

1. Para monitoramento antes da versão 4.1 do Linux

Para versões anteriores ao Linux 4.1.0, Qingchuang usa BPF para coletar dados HTTP 1 e solicitações de resolução DNS para estatísticas observáveis.

2. Para monitoramento após a versão 4.1 do Linux

Para garantir a portabilidade dos programas eBPF entre as várias versões do kernel Linux, usamos a tecnologia CORE ao escrever programas eBPF. A tecnologia CORE só é suportada após o Linux 4.9.0.

Se a versão do kernel do usuário for inferior a 4.9.0 ou o CO-RE não estiver ativado no kernel, podemos fornecer um pacote de atualização do kernel linux.

O BCC resume a relação entre a versão do kernel e a função eBPF: https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md

2. Requisitos de segurança de permissão

1. Permissões do eBPF

Requer privilégios de root ou capacidade CAP_SYS_ADMIN, o que significa que apenas usuários que podem carregar módulos do kernel podem carregar programas eBPF.

2. Segurança de execução do eBPF

Em termos de segurança de execução, o eBPF verificará o arquivo de bytecode a ser executado através do verificador eBPF antes do carregamento, incluindo, mas não se limitando aos seguintes aspectos:

  • O programa não contém um loop de controle

  • O programa não executará mais do que o número máximo de instruções permitido pelo kernel

  • O programa não contém nenhuma instrução inacessível

  • O programa não saltará fora dos limites do programa

3. A diferença entre uprobe e kprobe

1. Análise dos prós e contras do kprobe

Vantagem:

  • Mais simples de implementar e mais fácil de manter.

  • Não depende de detalhes de implementação específicos de outras bibliotecas

Desvantagens:

  • Os programas do usuário podem dividir uma única solicitação em várias chamadas de sistema, e a remontagem dessas solicitações apresenta alguma complexidade

  • Não compatível com TLS, incapaz de descompactar TLS

2. Os prós e contras do uprobe

Vantagem:

  • Podemos acessar e capturar o contexto do aplicativo como rastreamento de pilha

  • Podemos criar uprobes para capturar dados após a conclusão da análise, evitando a duplicação de trabalho no rastreador

  • É mais fácil capturar solicitações HTTPS e tem melhor compatibilidade com TLS

Desvantagens:

(1) Sensível à versão da biblioteca subjacente usada. Não é possível executar em binários com símbolos removidos

(2) Testes diferentes precisam ser implementados para cada biblioteca (cada linguagem de programação pode ter seu próprio conjunto de bibliotecas)

(3) Isso causará sobrecarga adicional no desempenho da chamada

4. Consumo de desempenho

Embora a comunidade do kernel tenha feito muitos ajustes de desempenho no eBPF, o rastreamento de funções do modo de usuário (especialmente funções de alta frequência, como contenção de bloqueio e alocação de memória) ainda pode trazer muita sobrecarga de desempenho. Portanto, quando usamos uprobe e kprobe, devemos tentar evitar o rastreamento de funções de alta frequência por muito tempo.

Vamos usar o monitoramento do processo de comunicação HTTP 1 de um programa Golang como exemplo e realizar um teste de estresse no programa quando o uprobe e o kprobe estiverem ativados respectivamente:

Como pode ser visto nos resultados, se a latência do HTTP for maior que 1 milissegundo, a sobrecarga introduzida é insignificante e, na maioria dos casos, apenas ruído. Isso é semelhante para kprobes e uprobes, embora reanalisemos todos os dados, os kprobes têm um desempenho um pouco melhor. Observe que a sobrecarga às vezes é negativa, o que provavelmente é apenas ruído na medição. A principal conclusão aqui é que, se o seu manipulador HTTP estiver fazendo algum trabalho real (cerca de 1 ms de tempo de computação), a sobrecarga introduzida é essencialmente insignificante.

5. Você pode rastrear todas as funções do modo de usuário/kernel (parâmetros de entrada e valores de retorno de chamadas)

1. Modo de usuário

O eBPF pode rastrear os parâmetros de entrada e retornar valores de chamadas de função especificadas. O ponto de gancho pode ser o nome ou endereço da função especificada. Se os símbolos do arquivo executável forem otimizados, alguns meios reversos precisam ser usados ​​para localizar o endereço da função especificada.

2. Estado do kernel

Podemos usar bpftrace -l para entender os pontos de gancho que podem ser conectados.

O bpftrace obtém todos os pontos rastreáveis ​​da camada do kernel por leitura (o código abaixo).

/sys/kernel/debug/tracing/available_filter_functions

6. Existe o risco de perder eventos

1. O disparo do evento kprobe e uprobe em si não será perdido

kprobe é um mecanismo de sondagem do kernel que permite aos usuários inserir código antes ou depois da execução da função do kernel. Uprobe é um mecanismo para sondar funções do espaço do usuário, que permite aos usuários inserir código na entrada ou saída das funções do espaço do usuário.

O eBPF implementa a observação e o processamento no nível do usuário, carregando a lógica de processamento gravada pelo usuário no kernel e executando essa lógica quando ocorrem eventos. Como a tecnologia de máquina virtual do eBPF fornece uma maneira segura e isolada de executar o código do usuário no kernel, os eventos kprobe e uprobe não serão perdidos.

2. bpf_perf_event corre o risco de perder eventos

O código eBPF no estado do kernel grava os eventos coletados no buffer circular bpf_perf_event e o programa de estado do usuário os coleta e relata. Quando as velocidades de leitura e gravação não coincidem, os eventos são perdidos:

  • A velocidade de gravação é muito rápida: por exemplo, cada transação HTTP é gravada no buffer como um evento, o que é mais arriscado do que a gravação em lote.
  • A velocidade de leitura é muito lenta: por exemplo, o código do modo de usuário não lê o buffer em um thread dedicado ou a carga do sistema está muito alta.

3. bpf_map corre o risco de perder eventos

O mapa eBPF tem um limite de tamanho. Quando o mapa estiver cheio, novos dados não poderão ser gravados

  • Dados perdidos: como o mapa está cheio, novas operações de gravação não serão bem-sucedidas, resultando em perda de dados. Isso pode afetar a exatidão e integridade do programa.
  • Degradação de desempenho: quando o mapa estiver cheio, a operação de gravação será bloqueada, resultando na degradação do desempenho do sistema. Isso afeta o tempo de resposta e o rendimento geral do sistema.

escrito no final

À medida que o eBPF continua a se desenvolver e crescer, podemos ver seu grande potencial no mundo das redes e sistemas. O eBPF provou ser uma ferramenta poderosa e eficiente que pode ser usada para implementar várias funções avançadas de rede e sistema.

No futuro, temos motivos para acreditar que o eBPF continuará a ser desenvolvido e usado por mais e mais desenvolvedores e organizações. Com a contínua expansão e melhoria das funções do eBPF, podemos esperar o surgimento de aplicativos de rede e ferramentas de sistema mais inovadores, impulsionando assim toda a indústria.

Resumindo, o passado e o presente do eBPF são emocionantes. Ele não apenas herda as vantagens do BPF, mas também possui funções mais poderosas e flexíveis. Estamos ansiosos para ver o eBPF trazer mais inovações e melhorias para redes e sistemas, trazendo um suporte mais forte ao nosso mundo digital.

Vamos interagir:

Em relação ao eBPF, o que você gostaria de compartilhar? Você pode discutir isso na área de mensagens ~


Qingchuang Technology, um fornecedor de referência no campo AIOps continuamente recomendado pelo Gartner. A empresa se concentra em reduzir o custo e aumentar a eficiência da operação e manutenção, melhorando a visão dos clientes corporativos sobre os dados de operação e manutenção, refletindo totalmente a influência da operação e manutenção da tecnologia nas operações comerciais.

Acho que você gosta

Origin blog.csdn.net/qq_37641528/article/details/131919692
Recomendado
Clasificación