Encontre milhões de e-books, audiobooks e muito mais com um período de teste gratuito

Apenas $11.99/mês após o término do seu período de teste gratuito. Cancele a qualquer momento.

Programando O Kernel Linux
Programando O Kernel Linux
Programando O Kernel Linux
E-book625 páginas4 horas

Programando O Kernel Linux

Nota: 0 de 5 estrelas

()

Ler a amostra

Sobre este e-book

O que é eBPF? Com esta tecnologia revolucionária, você pode escrever código personalizado que altera dinamicamente a forma como o kernel se comporta. É uma plataforma extraordinária para construir uma nova geração de ferramentas de segurança, observabilidade e rede. Este livro prático é ideal para desenvolvedores, administradores de sistemas, operadores e estudantes que têm curiosidade sobre o eBPF e desejam saber como ele funciona. A autora Liz Rice, diretora de código aberto da Isovalent, especialista em redes nativas em nuvem e segurança, também fornece uma base para aqueles que desejam explorar a criação de programas eBPF por conta própria. Com este livro, você irá: Saiba por que o eBPF se tornou tão importante nos últimos anos Escreva código eBPF básico, manipule programas eBPF e anexe-os a eventos Explore como os componentes eBPF interagem com o Linux para alterar dinamicamente o comportamento do sistema operacional Saiba como ferramentas baseadas em eBPF podem instrumentar aplicativos sem alterações nos aplicativos ou em sua configuração Descubra como essa tecnologia permite novas ferramentas para observabilidade, segurança e rede
IdiomaPortuguês
Data de lançamento4 de jan. de 2024
Programando O Kernel Linux

Leia mais títulos de Jideon F Marques

Relacionado a Programando O Kernel Linux

Ebooks relacionados

Inteligência Artificial (IA) e Semântica para você

Visualizar mais

Artigos relacionados

Avaliações de Programando O Kernel Linux

Nota: 0 de 5 estrelas
0 notas

0 avaliação0 avaliação

O que você achou?

Toque para dar uma nota

A avaliação deve ter pelo menos 10 palavras

    Pré-visualização do livro

    Programando O Kernel Linux - Jideon F Marques

    Programando o Kernel Linux para Melhor

    Observabilidade, Rede e Segurança

    Programando o Kernel Linux para Melhor

    Observabilidade, Rede e Segurança

    Por Jideon Marques

    © Copyright 2024 Jideon Marques – Todos os direitos reservados.

    O conteúdo contido neste livro não pode ser reproduzido, duplicado ou transmitido sem permissão direta por escrito do autor ou do editor.

    Sob nenhuma circunstância qualquer culpa ou responsabilidade legal será responsabilizada contra o editor, ou autor, por quaisquer danos, reparações ou perdas monetárias devido às informações contidas neste livro, seja direta ou indiretamente. Notícia legal:

    Este livro é protegido por direitos autorais. É apenas para uso pessoal. Você não pode alterar, distribuir, vender, usar, citar ou parafrasear qualquer parte ou o conteúdo deste livro sem o consentimento do autor ou editor.

    Aviso de isenção de responsabilidade:

    Observe que as informações contidas neste documento são apenas para fins educacionais e de entretenimento. Todos os esforços foram realizados para apresentar informações precisas, atualizadas, confiáveis e completas. Nenhuma garantia de qualquer tipo é declarada ou implícita. Os leitores reconhecem que o autor não está envolvido na prestação de aconselhamento jurídico, financeiro, médico ou profissional. O conteúdo deste livro foi derivado de diversas fontes. Consulte um profissional licenciado antes de tentar qualquer técnica descrita neste livro.

    Ao ler este documento, o leitor concorda que sob nenhuma circunstância o autor é responsável por quaisquer perdas, diretas ou indiretas, que sejam incorridas como resultado do uso das informações contidas neste documento, incluindo, mas não limitado a, erros, omissões ou imprecisões.

    Prefácio

    Na comunidade nativa da nuvem e além dela, o eBPF se tornou um dos tópicos técnicos mais quentes dos últimos anos. Uma nova geração deferramentas e projetos

    poderososem redes, segurança, observabilidade e muito mais foram construídos (e mais continuam a ser criados) usando eBPF como plataforma, oferecendo melhor desempenho e precisão em comparação com seus antecessores. conferências relacionadas ao eBPF, como oCúpula eBPFeDia eBPF nativo da nuvematraíram milhares de participantes e espectadores e, no momento em que este livro foi escrito,

    oFolga eBPFcomunidade tem mais de 14.000 membros.

    Por que o eBPF está sendo selecionado como tecnologia subjacente para tantas ferramentas de infraestrutura? Como ele entrega as melhorias prometidas ao desempenho? Como o eBPF é útil em campos técnicos tão díspares, que vão desde rastreamento de desempenho até criptografia de tráfego de rede?

    Este livro tem como objetivo responder a essas perguntas, dando ao leitor uma compreensão de como funciona o eBPF, bem como fornecendo uma introdução à escrita do código eBPF.

    Para quem é este livro

    Este livro é para desenvolvedores, administradores de sistemas, operadores e estudantes que têm curiosidade sobre o eBPF e desejam saber mais sobre como ele funciona. Ele fornecerá uma base para aqueles que desejam explorar a escrita de programas eBPF por conta própria. Como o eBPF fornece uma excelente plataforma para toda uma nova geração de instrumentação e ferramentas, provavelmente haverá empregos remunerados para os desenvolvedores do eBPF nos próximos anos.

    Mas você não precisa necessariamente planejar escrever o código eBPF para que este livro seja útil para você. Se você trabalha em operações, segurança ou qualquer outra função que envolva infraestrutura de software, provavelmente encontrará ferramentas baseadas em eBPF, agora ou nos próximos anos. Se você entender algo sobre os aspectos internos dessas ferramentas, estará em melhor posição para usá-las de maneira eficaz. Por exemplo, se você souber como os eventos podem acionar programas eBPF, você terá um modelo mental melhor para saber exatamente o que uma ferramenta baseada em eBPF está realmente medindo quando mostra métricas de desempenho. Se você é um desenvolvedor de aplicativos, também pode entrar em contato com algumas dessas ferramentas baseadas em eBPF. Por exemplo, se estiver ajustando o desempenho de um aplicativo, você pode usar uma ferramenta comoparquepara gerar gráficos em degradê mostrando quais funções estão demorando mais. Se você estiver avaliando ferramentas de segurança, este livro o ajudará a entender onde o eBPF se destaca e como evitar usá-lo de forma ingênua e menos eficaz contra ataques.

    Mesmo que você não esteja usando ferramentas eBPF hoje, espero que este livro lhe dê insights interessantes sobre áreas do Linux que você talvez não tenha considerado antes. A maioria dos desenvolvedores considera o kernel um dado adquirido, pois eles usam linguagens de programação com abstrações convenientes de nível superior que lhes permitem concentrar-se no trabalho de desenvolvimento de aplicativos - o que já é bastante difícil! Eles usam ferramentas como depuradores e analisadores de desempenho para ajudá-los a realizar seu trabalho com eficiência. Conhecer os detalhes de como funciona um depurador ou ferramenta de desempenho pode ser interessante, mas não é essencial. No entanto, para muitos de nós, é divertido e gratificante descer pela toca do coelho para descobrir mais.1Da mesma forma, a maioria das pessoas usará ferramentas eBPF sem se preocupar com a forma como são construídas.Arthur C. Clarke escreveuque qualquer tecnologia suficientemente avançada é indistinguível da magia, mas, pessoalmente, gosto de me aprofundar e descobrir como funciona o truque de mágica. Você pode ser como eu e se sentir compelido a explorar a programação eBPF para ter uma ideia melhor do que é possível com esta tecnologia. Se sim, acho que você vai gostar deste livro.

    O que este livro cobre

    O eBPF continua a evoluir a um ritmo bastante rápido, o que torna bastante difícil escrever uma referência abrangente que não necessite de atualização constante. No entanto, existem alguns fundamentos e princípios básicos que provavelmente não mudarão significativamente, e é isso que este livro discute.

    Capítulo 1define o cenário descrevendo por que o eBPF é uma tecnologia tão poderosa e explicando como a capacidade de executar programas personalizados no kernel do sistema operacional permite tantos recursos interessantes.

    As coisas se tornam mais concretas emCapítulo 2, onde você verá alguns exemplos de

    Hello World que apresentam os conceitos de programas e mapas eBPF.

    Capítulo 3mergulha em mais detalhes sobre os programas eBPF e como eles são executados no kernel, eCapítulo 4explora a interface entre aplicações de espaço de usuário e programas eBPF.

    Um dos grandes desafios do eBPF nos últimos anos tem sido a questão da compatibilidade entre as versões do kernel.capítulo 5analisa a abordagem compilar uma vez, executar em qualquer lugar (CO-RE) que resolve esse problema.

    O processo de verificação é talvez a característica mais importante que distingue o eBPF dos módulos do kernel. Vou te apresentar o verificador eBPF emCapítulo 6.

    EmCapítulo 7você terá uma introdução aos diversos tipos de programas eBPF e seus pontos de fixação. Muitos desses pontos de conexão estão dentro da pilha de rede

    eCapítulo 8explora a aplicação do eBPF para recursos de rede com mais detalhes.Capítulo 9analisa como o eBPF está sendo usado para construir ferramentas de segurança.

    Se você deseja escrever uma aplicação de espaço de usuário que interaja com programas eBPF, existem muitas bibliotecas e estruturas disponíveis para ajudar.Capítulo 10fornece uma visão geral das opções para várias linguagens de programação.

    Finalmente, emCapítulo 11Vou olhar para minha bola de cristal e falar sobre alguns desenvolvimentos futuros que provavelmente ocorrerão no mundo do eBPF.

    Conhecimento pré-requisito

    Este livro pressupõe que você esteja familiarizado com os comandos básicos do shell no Linux e com a ideia de usar um compilador para transformar o código-fonte em um programa executável. Existem alguns exemplos simples de extratos de Makefiles, supondo que você tenha pelo menos um entendimento mínimo de como o make usa esses arquivos.

    Existem muitos exemplos de código em Python, C e Go. Você não precisará de conhecimento profundo dessas linguagens para tirar proveito desses exemplos, mas aproveitará ao máximo o livro se estiver satisfeito em ler algum código. Também presumo que você esteja familiarizado com a ideia de ponteiros, que identificam um local de memória.

    Código de exemplo e exercícios

    Existem muitos exemplos de código neste livro. Se quiser experimentá-los por si mesmo, você encontrará um repositório GitHub e instruções para instalar e executar o código em https://github.com/lizrice/learning-ebpf.

    Também incluí exercícios no final da maioria dos capítulos para ajudá-lo a explorar a programação eBPF ampliando os exemplos ou escrevendo seus próprios programas.

    Como o eBPF está em constante evolução, os recursos disponíveis dependem da versão do kernel que você está executando. Muitas das restrições que se aplicam a versões anteriores foram suspensas ou flexibilizadas em versões posteriores. O

    projeto Iovisor tem uma visão geral útil doversões do kernel nas quais diferentes

    recursos do BPF foram adicionadose neste livro tentei observar quando os recursos específicos que estou descrevendo foram adicionados. Os exemplos foram testados usando a versão 5.15 do kernel e, no momento em que este artigo foi escrito, algumas das distribuições populares do Linux ainda não suportavam uma versão de kernel tão recente. Se você estiver lendo este livro logo após sua publicação, poderá descobrir que alguns dos recursos não funcionarão no kernel Linux que sua organização usa na produção.

    O eBPF é apenas para Linux?

    eBPF foi originalmente desenvolvido para Linux. Não há nenhuma razão específica para que a mesma abordagem não possa ser usada também em outros sistemas operacionais - na verdade, a Microsoft vem desenvolvendo umImplementação eBPF

    para Windows. Discuto isso brevemente emCapítulo 11, mas ao longo do restante do livro me concentrarei na implementação do Linux, e todos os exemplos serão do Linux.

    Convenções utilizadas neste livro

    As seguintes convenções tipográficas são usadas neste livro:

    itálico

    Indica novos termos, URLs, endereços de e-mail, nomes de arquivos e extensões de arquivos.

    Largura constante

    Usado para listagens de programas, bem como dentro de parágrafos para se referir a elementos de programas, como nomes de variáveis ou funções, bancos de dados, tipos de dados, variáveis de ambiente, instruções e palavras-chave.

    Largura constante em negrito

    Mostra comandos ou outros textos que devem ser digitados literalmente pelo usuário.

    Largura constante em itálico

    Mostra o texto que deve ser substituído por valores fornecidos pelo usuário ou por valores determinados pelo contexto.

    Dica

    Este elemento significa uma dica ou sugestão.

    Observação

    Este elemento significa uma nota geral.

    Aviso

    Este elemento indica um aviso ou cuidado.

    Usando exemplos de código

    Material suplementar (exemplos de código, exercícios, etc.) está disponível para download em https://github.com/lizrice/learning-ebpf.

    Capítulo 1. O que é eBPF e por que é importante?

    eBPF é uma tecnologia revolucionária de kernel que permite aos desenvolvedores escrever código personalizado que pode ser carregado dinamicamente no kernel, mudando a maneira como o kernel se comporta. (Não se preocupe se você não tiver certeza sobre o que é o kernel – falaremos disso em breve neste capítulo.) Isso permite uma nova geração de ferramentas de rede, observabilidade e segurança de alto desempenho. E como você verá, se quiser instrumentar um aplicativo com essas ferramentas baseadas em eBPF, você não precisa modificar ou reconfigurar o aplicativo de forma alguma, graças ao ponto de vista do eBPF dentro do kernel.

    Apenas algumas das coisas que você pode fazer com eBPF incluem:

    Rastreamento de desempenho de praticamente qualquer aspecto de um

    sistema

    Rede de alto desempenho, com visibilidade integrada

    Detectando e (opcionalmente) prevenindo atividades maliciosas

    Vamos fazer uma breve viagem pela história do eBPF, começando pelo Berkeley Packet Filter.

    Raízes do eBPF: O Filtro de Pacotes Berkeley

    O que hoje chamamos de eBPF tem suas raízes no BSD Packet Filter, descrito pela primeira vez em 1993 em um artigo1escrito por Steven McCanne e Van Jacobson do Laboratório Nacional Lawrence Berkeley. Este artigo discute uma pseudomáquina que pode executar filtros, que são programas escritos para determinar se um pacote de rede deve ser aceito ou rejeitado. Esses programas foram escritos no conjunto de instruções BPF, um conjunto de instruções de uso geral de 32 bits que se assemelha muito à linguagem assembly. Aqui está um exemplo retirado diretamente desse artigo:

    ldh [12]

    jeq #ETHERTYPE IP, L1, L2

    L1: ret #VERDADEIRO

    L2: ret#0

    Este pequeno pedaço de código filtra pacotes que não são pacotes de protocolo da Internet (IP). A entrada para este filtro é um pacote Ethernet, e a primeira instrução (ldh) carrega um valor de 2 bytes começando no byte 12 deste pacote. Na próxima instrução (jeq) esse valor é comparado com o valor que representa um pacote IP. Se corresponder, a execução salta para a instrução rotulada como L1 e o pacote é aceito

    retornando um valor diferente de zero (identificado aqui como #TRUE). Se não corresponder, o pacote não é um pacote IP e será rejeitado retornando 0.

    Você pode imaginar (ou, na verdade, consultar o artigo para encontrar exemplos) programas de filtro mais complexos que tomam decisões com base em outros aspectos do pacote. É importante ressaltar que o autor do filtro pode escrever seus próprios programas personalizados para serem executados dentro do kernel, e este é o cerne do que o eBPF permite.

    BPF passou a significar Berkeley Packet Filter e foi introduzido pela primeira vez no Linux em 1997, na versão do kernel 2.1.75,2onde foi usado no utilitário tcpdump como uma forma eficiente de capturar os pacotes a serem rastreados.

    Avançamos para 2012, quando o seccomp-bpf foi introduzido na versão 3.5 do kernel.

    Isso permitiu o uso de programas BPF para tomar decisões sobre permitir ou negar que aplicativos de espaço do usuário fizessem chamadas de sistema. Exploraremos isso com mais detalhes emCapítulo 10. Este foi o primeiro passo na evolução do BPF

    do escopo restrito de filtragem de pacotes para a plataforma de uso geral que é hoje. A partir daí, as palavras filtro de pacotes no nome começaram a fazer menos sentido!

    Do BPF ao eBPF

    O BPF evoluiu para o que chamamos de BPF estendido ou eBPF a partir da versão 3.18 do kernel em 2014. Isso envolveu várias mudanças significativas:

    O conjunto de instruções BPF foi completamente reformulado para ser mais eficiente em máquinas de 64 bits, e o interpretador foi totalmente reescrito.

    Foram introduzidos os mapas eBPF, que são estruturas de dados que podem ser acessadas por programas BPF e por aplicações de espaço de usuário, permitindo o compartilhamento de informações entre eles. Você aprenderá sobre mapas emCapítulo 2.

    A chamada de sistema bpf() foi adicionada para que os programas de espaço do usuário possam interagir com programas eBPF no kernel. Você lerá sobre esta chamada de sistema emCapítulo 4.

    Várias funções auxiliares do BPF foram adicionadas. Você verá alguns exemplos emCapítulo 2e mais alguns detalhes emCapítulo 6.

    O verificador eBPF foi adicionado para garantir que os programas eBPF sejam seguros para execução. Isto é discutido emCapítulo 6.

    Isto criou a base para o eBPF, mas o desenvolvimento não abrandou! Desde então, o eBPF evoluiu significativamente.

    A evolução do eBPF para sistemas de produção

    Um recurso chamado kprobes (sondas de kernel) existia no kernel Linux desde 2005, permitindo que armadilhas fossem definidas em quase qualquer instrução no código do kernel. Os desenvolvedores poderiam escrever módulos do kernel que anexavam funções aos kprobes para fins de depuração ou medição de desempenho.3

    A capacidade de anexar programas eBPF a kprobes foi adicionada em 2015 e este foi o ponto de partida para uma revolução na forma como o rastreamento é feito em sistemas Linux. Ao mesmo tempo, ganchos começaram a ser adicionados à pilha de rede do kernel, permitindo que os programas eBPF cuidassem de mais aspectos da funcionalidade da rede. Veremos mais disso emCapítulo 8.

    Em 2016, ferramentas baseadas em eBPF estavam sendo utilizadas em sistemas de produção.Brendan Greggo trabalho de rastreamento na Netflix tornou-se amplamente conhecido nos círculos de infraestrutura e operações, assim comosua declaraçãoque o eBPF traz superpoderes para o Linux. No mesmo ano, foi anunciado o projeto Cilium, sendo o primeiro projeto de rede a utilizar eBPF para substituir todo o caminho de dados em ambientes containers.

    No ano seguinte, o Facebook (agora Meta) fezKatranum projeto de código aberto.

    Katran, um balanceador de carga de camada 4, atendeu à necessidade do Facebook de

    umsolução altamente escalável e rápida. Cada pacote paraFacebook.comdesde 2017

    passou pelo eBPF/XDP.4Para mim, pessoalmente, este foi o ano que despertou o meu entusiasmo sobre as possibilidades proporcionadas por esta tecnologia, depois de verPalestra de Thomas Grafsobre o eBPF e oProjeto Cíliona DockerCon em Austin, Texas.

    Em 2018, o eBPF tornou-se um subsistema separado dentro do kernel Linux,

    comDaniel Borkmannde Isovalente eAlexei Starovoitovdo Meta como seus mantenedores (mais tarde juntaram-se a elesAndrii Nakryiko, também de Meta). No mesmo ano foi introduzido o BPF Type Format (BTF), que torna os programas eBPF

    muito mais portáveis. Exploraremos isso emcapítulo 5.

    O ano de 2020 viu a introdução do LSM BPF, permitindo que programas eBPF fossem anexados à interface do kernel do Linux Security Module (LSM). Isto indicou que um terceiro caso de uso importante para o eBPF foi identificado: ficou claro que o eBPF é uma excelente plataforma para ferramentas de segurança, além de rede e observabilidade.

    Ao longo dos anos, as capacidades do eBPF cresceram substancialmente, graças ao trabalho de mais de 300 desenvolvedores de kernel e muitos colaboradores das ferramentas de espaço do usuário associadas (como o bpftool, que conheceremos

    emCapítulo 3), compiladores e bibliotecas de linguagens de programação. Os programas já foram limitados a 4.096 instruções, mas esse limite cresceu para 1

    milhão de instruções verificadas5e foi efetivamente tornado irrelevante pelo suporte a chamadas finais e chamadas de função (que você verá nos capítulos2e3).

    Observação

    Para uma visão mais profunda da história do eBPF, quem melhor para consultar do que os mantenedores que têm trabalhado nele desde o início?

    Alexei Starovoitov fez uma apresentação fascinante sobre ohistória do BPFdesde suas raízes em redes definidas por software (SDN). Nesta palestra, ele discute as estratégias usadas para que os primeiros patches do eBPF sejam aceitos no kernel e revela que o aniversário oficial do eBPF é 26 de setembro de 2014, que marcou a aceitação do primeiro conjunto de patches cobrindo o verificador, chamada de sistema BPF e mapas.

    Daniel Borkmann também discutiu a história do BPF e sua evolução para oferecer suporte à funcionalidade de rede e rastreamento. Eu recomendo fortemente a palestra deleeBPF e Kubernetes: pequenos ajudantes para escalar microsserviços, que está cheio de informações interessantes.

    Nomear é difícil

    As aplicações do eBPF vão tão além da filtragem de pacotes que o acrônimo é essencialmente sem sentido agora e se tornou um termo independente. E como todos os kernels Linux amplamente utilizados atualmente têm suporte para as partes

    estendidas, os termos eBPF e BPF são amplamente usados de forma intercambiável.

    No código-fonte do kernel e na programação eBPF, a terminologia comum é BPF. Por exemplo, como veremos emCapítulo 4, a chamada do sistema para interagir com eBPF

    é bpf(), as funções auxiliares começam com bpf_ e os diferentes tipos de programas (e)BPF são identificados com nomes que começam com BPF_PROG_TYPE. Fora da comunidade do kernel, o nome eBPF parece ter ficado preso, por exemplo, no site da comunidadeebpf.ioe em nome doFundação eBPF.

    O Kernel Linux

    Para entender o eBPF, você precisará ter um conhecimento sólido da diferença entre o kernel e o espaço do usuário no Linux. Abordei isso em meu relatório O que é eBPF?6e adaptei parte desse conteúdo para os próximos parágrafos.

    O kernel do Linux é a camada de software entre seus aplicativos e o hardware em que eles estão sendo executados. Os aplicativos são executados em uma camada sem privilégios chamada espaço do usuário, que não pode acessar o hardware diretamente. Em vez disso, um aplicativo faz solicitações usando a interface de chamada do sistema (syscall) para solicitar que o kernel atue em seu nome. Esse acesso ao hardware pode envolver leitura e gravação em arquivos, envio ou recebimento de tráfego de rede ou até mesmo acesso à memória. O kernel também é responsável por coordenar processos simultâneos, permitindo que muitas aplicações sejam executadas ao mesmo tempo. Isto é ilustrado emFigura 1-1.

    Como desenvolvedores de aplicativos, normalmente não usamos a interface de chamada do sistema diretamente, porque as linguagens de programação nos fornecem abstrações de alto nível e bibliotecas padrão que são interfaces mais fáceis de programar. Como resultado, muitas pessoas não sabem o quanto o kernel está fazendo enquanto nossos programas são executados. Se você quiser ter uma ideia de com que frequência o kernel é invocado, você pode usar o utilitário strace para mostrar todas as chamadas de sistema que um aplicativo faz.

    Figura 1-1. Aplicativos no espaço do usuário usam a interface syscall para fazer solicitações ao kernel

    Aqui está um exemplo, onde usar cat para ecoar a palavra hello na tela envolve mais de 100 chamadas de sistema:

    $ strace -c echo olá

    olá

    % tempo segundos usecs/chamadas erros syscall

    ------ ----------- ----------- --------- --------- ---- ------------

    24,62 0,001693 56 30 12 aberto

    17,49 0,001203 60 20 mapa

    15,92 0,001095 57 19 novostatat

    15,66 0,001077 53 20 fechar

    10,35 0,000712 712 1 executivo

    3,04 0,000209 52 4 mproteger

    2,52 0,000173 57 3 lido

    2,33 0,000160 53 3 semanas

    2,09 0,000144 48 3 mapa mun

    1,11 0,000076 76 1 escrever

    0,96 0,000066 66 1 1 acesso

    0,76 0,000052 52 1 aleatório

    0,68 0,000047 47 1 rseq

    0,65 0,000045 45 1 set_robust_list

    0,63 0,000043 43 1 prlimit64

    0,61 0,000042 42 1 set_tid_address

    0,58 0,000040 40 1 futex

    ------ ----------- ----------- --------- --------- ---- ------------

    100,00 0,006877 61 111 13 total

    Como os aplicativos dependem muito do kernel, isso significa que podemos aprender muito sobre como um aplicativo se comporta se pudermos observar suas interações com o kernel. Com o eBPF podemos adicionar

    Está gostando da amostra?
    Página 1 de 1