Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
work:semana_43_de_2021 [2021/10/27 15:31] magsilvawork:semana_43_de_2021 [2021/10/27 15:35] (current) magsilva
Line 3: Line 3:
 ===== Pesquisa ===== ===== Pesquisa =====
   * Usar o eBPF para obter rastros de aplicações abre diversas possibilidades. O tutorial disponível em https://github.com/goldshtn/linux-tracing-workshop/blob/master/bpf-usdt.md é um bom ponto de partida.   * Usar o eBPF para obter rastros de aplicações abre diversas possibilidades. O tutorial disponível em https://github.com/goldshtn/linux-tracing-workshop/blob/master/bpf-usdt.md é um bom ponto de partida.
-    * Infelizmente, nem tudo são flores e, para algumas linguagens, temos limitações. Por exemplo, descobri o motivo da lentidão ao utilizar o bpftrace em aplicações Java. Para linguagens dinâmicas, os probes precisam ser criados também dinamicamente. Para a JVM, isso atualmente envolve usar a opção '''-XX:+ExtendedDTraceProbes''' para permitir a criação de USDT. No entanto, isso tem um impacto significativo para aplicações Java (o que não se observa em outras linguagens).+    * Infelizmente, nem tudo são flores e, para algumas linguagens, temos limitações. Por exemplo, descobri o motivo da lentidão ao utilizar o bpftrace em aplicações Java. Para linguagens dinâmicas, os probes precisam ser criados também dinamicamente. Para a JVM, isso atualmente envolve usar a opção ''-XX:+ExtendedDTraceProbes'' para permitir a criação de USDT. No entanto, isso tem um impacto significativo para aplicações Java (o que não se observa em outras linguagens).
     * A lista de probes está disponível em https://docs.oracle.com/javase/6/docs/technotes/guides/vm/dtrace.html. O texto até menciona que as pontas de prova para entrada e saída de método serão mais rápidas no futuro, mas isso nunca aconteceu.     * A lista de probes está disponível em https://docs.oracle.com/javase/6/docs/technotes/guides/vm/dtrace.html. O texto até menciona que as pontas de prova para entrada e saída de método serão mais rápidas no futuro, mas isso nunca aconteceu.
-    * A melhor solução seria otimizar a criação desses probes, sem incorrer em custo tão elevado quanto visto na JVM atualmente com a opção '''-XX:+ExtendedDTraceProbes'''.+    * A melhor solução seria otimizar a criação desses probes, sem incorrer em custo tão elevado quanto visto na JVM atualmente com a opção ''-XX:+ExtendedDTraceProbes''.
       * Utilizando a biblioteca [[https://github.com/sthima/libstapsdt | libstapsdt]] ou [[https://github.com/chrisa/libusdt/ | libusdt]] isso seria possível. Até existe um projeto que buscou fazer isso para a JVM (https://github.com/goldshtn/libstapsdt-jni), mas ainda é uma prova de conceito. De toda forma, é interessante observar que o autor do libstapsdt é brasileiro e talvez seja mais simples conversar com ele a respeito disso.       * Utilizando a biblioteca [[https://github.com/sthima/libstapsdt | libstapsdt]] ou [[https://github.com/chrisa/libusdt/ | libusdt]] isso seria possível. Até existe um projeto que buscou fazer isso para a JVM (https://github.com/goldshtn/libstapsdt-jni), mas ainda é uma prova de conceito. De toda forma, é interessante observar que o autor do libstapsdt é brasileiro e talvez seja mais simples conversar com ele a respeito disso.
       * Quanto à biblioteca libusdt, o projeto https://github.com/dankimmel/dtrace-jvm-dynamic faz uso dela para inserir os pontos de prova. Também é uma prova de conceito.       * Quanto à biblioteca libusdt, o projeto https://github.com/dankimmel/dtrace-jvm-dynamic faz uso dela para inserir os pontos de prova. Também é uma prova de conceito.