This commit is contained in:
yunwei37
2023-08-08 07:59:09 +00:00
parent 743c2ea332
commit 635df7fb8e
8 changed files with 21 additions and 20 deletions

View File

@@ -166,7 +166,7 @@
<div id="content" class="content">
<main>
<h1 id="ebpf-入门开发实践教程hello-world基本框架和开发流程"><a class="header" href="#ebpf-入门开发实践教程hello-world基本框架和开发流程">eBPF 入门开发实践教程Hello World基本框架和开发流程</a></h1>
<h1 id="ebpf-入门开发实践教程hello-world基本框架和开发流程"><a class="header" href="#ebpf-入门开发实践教程hello-world基本框架和开发流程">eBPF 入门开发实践教程Hello World基本框架和开发流程</a></h1>
<p>在本篇博客中我们将深入探讨eBPFExtended Berkeley Packet Filter的基本框架和开发流程。eBPF是一种在Linux内核上运行的强大网络和性能分析工具它为开发者提供了在内核运行时动态加载、更新和运行用户定义代码的能力。这使得开发者可以实现高效、安全的内核级别的网络监控、性能分析和故障排查等功能。</p>
<p>本文是eBPF入门开发实践教程的第二篇我们将重点关注如何编写一个简单的eBPF程序并通过实际例子演示整个开发流程。在阅读本教程之前建议您先学习第一篇教程以便对eBPF的基本概念有个大致的了解。</p>
<p>在开发eBPF程序时有多种开发框架可供选择如 BCCBPF Compiler Collectionlibbpf、cilium/ebpf、eunomia-bpf 等。虽然不同工具的特点各异,但它们的基本开发流程大致相同。在接下来的内容中,我们将深入了解这些流程,并以 Hello World 程序为例带领读者逐步掌握eBPF开发的基本技巧。</p>

View File

@@ -533,11 +533,10 @@ int memleak__kmem_cache_alloc(struct trace_event_raw_kmem_alloc *ctx)
<p>这些挂载点包括常见的内存分配函数如malloc、calloc、realloc、mmap、posix_memalign、memalign、free等以及对应的退出点。另外我们也观察一些可能的分配函数如valloc、pvalloc、aligned_alloc等尽管它们可能不总是存在。</p>
<p>这些挂载点的目标是捕获所有可能的内存分配和释放事件,从而使我们的内存泄露检测工具能够获取到尽可能全面的数据。这种方法可以让我们不仅能跟踪到内存分配和释放,还能得到它们发生的上下文信息,例如调用栈和调用次数,从而帮助我们定位和修复内存泄露问题。</p>
<p>注意一些内存分配函数可能并不存在或已弃用比如valloc、pvalloc等因此它们的附加可能会失败。在这种情况下我们允许附加失败并不会阻止程序的执行。这是因为我们更关注的是主流和常用的内存分配函数而这些已经被弃用的函数往往在实际应用中较少使用。</p>
<p>完整的源代码https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/16-memleak</p>
<p>完整的源代码:<a href="https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/16-memleak">https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/16-memleak</a></p>
<p>参考:<a href="https://github.com/iovisor/bcc/blob/master/libbpf-tools/memleak.c">https://github.com/iovisor/bcc/blob/master/libbpf-tools/memleak.c</a></p>
<h2 id="编译运行"><a class="header" href="#编译运行">编译运行</a></h2>
<pre><code class="language-console">$ git clone https://github.com/iovisor/bcc.git --recurse-submodules
$ cd libbpf-tools/
$ make memleak
<pre><code class="language-console">$ make
$ sudo ./memleak
using default object: libc.so.6
using page size: 4096

View File

@@ -5,6 +5,7 @@
:root {
/* Browser default font-size is 16px, this way 1 rem = 10px */
font-size: 62.5%;
color-scheme: var(--color-scheme);
}
html {

View File

@@ -22,14 +22,6 @@
overflow-y: initial;
}
code {
background-color: #666666;
border-radius: 5px;
/* Force background to be printed in Chrome */
-webkit-print-color-adjust: exact;
}
pre > .buttons {
z-index: 2;
}

View File

@@ -50,6 +50,8 @@
--searchresults-border-color: #888;
--searchresults-li-bg: #252932;
--search-mark-bg: #e3b171;
--color-scheme: dark;
}
.coal {
@@ -90,6 +92,8 @@
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
}
.light {
@@ -130,6 +134,8 @@
--searchresults-border-color: #888;
--searchresults-li-bg: #e4f2fe;
--search-mark-bg: #a2cff5;
--color-scheme: light;
}
.navy {
@@ -170,6 +176,8 @@
--searchresults-border-color: #5c5c68;
--searchresults-li-bg: #242430;
--search-mark-bg: #a2cff5;
--color-scheme: dark;
}
.rust {
@@ -210,6 +218,8 @@
--searchresults-border-color: #888;
--searchresults-li-bg: #dec2a2;
--search-mark-bg: #e69f67;
--color-scheme: light;
}
@media (prefers-color-scheme: dark) {

View File

@@ -297,7 +297,7 @@ eBPF程序每次执行时候都需要进行编译编译则需要用户配置
<li>eunomia-bpf<a href="https://github.com/eunomia-bpf/eunomia-bpf">https://github.com/eunomia-bpf/eunomia-bpf</a></li>
</ul>
<p>您还可以访问我们的教程代码仓库 <a href="https://github.com/eunomia-bpf/bpf-developer-tutorial">https://github.com/eunomia-bpf/bpf-developer-tutorial</a> 以获取更多示例和完整的教程源代码,全部内容均已开源。我们会继续分享更多有关 eBPF 开发实践的内容,帮助您更好地理解和掌握 eBPF 技术。</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="ebpf-入门开发实践教程hello-world基本框架和开发流程"><a class="header" href="#ebpf-入门开发实践教程hello-world基本框架和开发流程">eBPF 入门开发实践教程Hello World基本框架和开发流程</a></h1>
<div style="break-before: page; page-break-before: always;"></div><h1 id="ebpf-入门开发实践教程hello-world基本框架和开发流程"><a class="header" href="#ebpf-入门开发实践教程hello-world基本框架和开发流程">eBPF 入门开发实践教程Hello World基本框架和开发流程</a></h1>
<p>在本篇博客中我们将深入探讨eBPFExtended Berkeley Packet Filter的基本框架和开发流程。eBPF是一种在Linux内核上运行的强大网络和性能分析工具它为开发者提供了在内核运行时动态加载、更新和运行用户定义代码的能力。这使得开发者可以实现高效、安全的内核级别的网络监控、性能分析和故障排查等功能。</p>
<p>本文是eBPF入门开发实践教程的第二篇我们将重点关注如何编写一个简单的eBPF程序并通过实际例子演示整个开发流程。在阅读本教程之前建议您先学习第一篇教程以便对eBPF的基本概念有个大致的了解。</p>
<p>在开发eBPF程序时有多种开发框架可供选择如 BCCBPF Compiler Collectionlibbpf、cilium/ebpf、eunomia-bpf 等。虽然不同工具的特点各异,但它们的基本开发流程大致相同。在接下来的内容中,我们将深入了解这些流程,并以 Hello World 程序为例带领读者逐步掌握eBPF开发的基本技巧。</p>
@@ -3801,11 +3801,10 @@ int memleak__kmem_cache_alloc(struct trace_event_raw_kmem_alloc *ctx)
<p>这些挂载点包括常见的内存分配函数如malloc、calloc、realloc、mmap、posix_memalign、memalign、free等以及对应的退出点。另外我们也观察一些可能的分配函数如valloc、pvalloc、aligned_alloc等尽管它们可能不总是存在。</p>
<p>这些挂载点的目标是捕获所有可能的内存分配和释放事件,从而使我们的内存泄露检测工具能够获取到尽可能全面的数据。这种方法可以让我们不仅能跟踪到内存分配和释放,还能得到它们发生的上下文信息,例如调用栈和调用次数,从而帮助我们定位和修复内存泄露问题。</p>
<p>注意一些内存分配函数可能并不存在或已弃用比如valloc、pvalloc等因此它们的附加可能会失败。在这种情况下我们允许附加失败并不会阻止程序的执行。这是因为我们更关注的是主流和常用的内存分配函数而这些已经被弃用的函数往往在实际应用中较少使用。</p>
<p>完整的源代码https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/16-memleak</p>
<p>完整的源代码:<a href="https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/16-memleak">https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/16-memleak</a></p>
<p>参考:<a href="https://github.com/iovisor/bcc/blob/master/libbpf-tools/memleak.c">https://github.com/iovisor/bcc/blob/master/libbpf-tools/memleak.c</a></p>
<h2 id="编译运行-5"><a class="header" href="#编译运行-5">编译运行</a></h2>
<pre><code class="language-console">$ git clone https://github.com/iovisor/bcc.git --recurse-submodules
$ cd libbpf-tools/
$ make memleak
<pre><code class="language-console">$ make
$ sudo ./memleak
using default object: libc.so.6
using page size: 4096

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long