网站建设的实验结论网站推广协议

news/2025/10/9 11:29:06/文章来源:
网站建设的实验结论,网站推广协议,西安网站建设小程序开发,龙华区做网站介绍eBPF技术 当代计算机系统中#xff0c;性能、安全性和可观察性是至关重要的关键因素。为了应对这些挑战#xff0c;Linux 内核引入了一种名为eBPF#xff08;extended Berkeley Packet Filter#xff09;的强大技术。eBPF 不仅仅是一种网络数据包过滤器#xff0c;它…介绍eBPF技术 当代计算机系统中性能、安全性和可观察性是至关重要的关键因素。为了应对这些挑战Linux 内核引入了一种名为eBPFextended Berkeley Packet Filter的强大技术。eBPF 不仅仅是一种网络数据包过滤器它是一种可编程的内核技术可以用于解决各种各样的问题从网络性能优化到安全审计。本文将深入介绍eBPF技术包括其起源、基本概念、工作原理、应用领域和相关工具。 在当今计算机领域Linux 内核是一个广泛使用的操作系统内核而eBPF是 Linux 内核中的一项创新技术它具有广泛的用途可以用于改善系统性能、提高安全性、监控和审计系统行为。eBPF 能够实现高性能和可编程性使其成为解决多种问题的理想选择。 eBPF的起源 eBPF 最初起源于 Berkeley Packet FilterBPF后来演化为 extended BPF随着时间的推移它已经成为 Linux 内核的一部分。BPF 最早是由 Steven McCanne 和 Van Jacobson 在 1992 年创建的用于数据包捕获和过滤。extended BPF 允许用户编写更复杂的程序而不仅仅是数据包过滤从而扩展了其应用范围。 eBPF的基本概念 eBPF 提供了一个基于寄存器的虚拟机可以执行内核中嵌入的程序这些程序通常称为 BPF 程序。这些程序使用一种特殊的指令集可以访问内核数据和功能并在内核中执行。eBPF 具有以下基本概念 BPF 程序eBPF 程序是由用户编写的程序使用 BPF 指令集执行。它们通常编译成字节码并加载到内核中。 BPF 虚拟机eBPF 程序在 BPF 虚拟机中执行这是一个安全且受限的执行环境可以在内核中运行用户定义的代码。 BPF 地址空间eBPF 程序可以访问内核的地址空间包括数据结构和函数。 Hook PointseBPF 可以绑定到内核的挂钩点hook points这些挂钩点允许程序拦截和修改内核事件。 eBPF的工作原理 eBPF 工作原理涉及以下步骤 1、用户编写 eBPF 程序通常使用高级语言如C编写并使用 BPF 编译器编译成字节码。 2、编译后的程序加载到内核中然后通过 BPF 虚拟机执行。程序可以连接到内核的挂钩点hook points例如网络数据包处理、系统调用等。 3、在运行时eBPF 程序可以访问内核数据和事件并根据需求执行自定义逻辑。 4、eBPF 程序可以生成输出或者修改内核状态以实现各种用途例如性能优化、安全审计、监控和跟踪。 这里有详细的文档https://man7.org/linux/man-pages/man7/bpf-helpers.7.html eBPF的应用领域 eBPF 具有多个应用领域包括但不限于 网络性能优化 eBPF 可以用于实现高性能的网络数据包过滤、转发和路由。它可以用于改善网络性能、诊断网络问题并支持各种网络应用。 安全审计和监控 eBPF 可以用于监控系统的安全性跟踪恶意行为检测入侵并生成审计日志。它可以帮助系统管理员保持对系统安全性的可见性。 容器和云原生环境 eBPF 在容器和云原生环境中得到了广泛的应用。它可以用于监控容器的性能、安全性和行为以及在多个容器之间实现网络隔离和路由。 性能分析和跟踪 eBPF 可以用于性能分析和跟踪帮助开发人员识别和解决性能问题。它可以跟踪系统调用、函数执行时间、资源利用率等。 eBPF工具和库 为了更好地利用eBPF技术开发人员和系统管理员可以使用各种工具和库包括以下几种 bpftrace bpftrace 是一个高级工具用于跟踪和诊断系统性能问题。它提供了一种简洁的语法用于编写eBPF脚本以捕获和分析系统事件。 BCCBPF Compiler Collection BCC 是一个工具集提供了许多用于eBPF开发的工具和示例程序。它包括各种用于网络分析、性能分析和安全监控的工具。 libbpf libbpf 是一个库用于编写eBPF程序的用户空间工具。它提供了与内核交互的功能以及加载和执行eBPF程序的能力。 开始你的第一个 BPF 程序 BPF 程序的编译一般使用 LLVM.LLVM 是一种 genreal-purpose 的编译器LLVM 可以emit 不同的字节码。在本章中LLVM 将生成 bpf 的字节码然后我们会 load 到内核的虚拟中。 内核提供了一个系统调用专门用于 load bpf 的程序除了 load bpf 的程序这个系统调用还可以有一些其他的操作后面我们会看到它的用法接下来我们来看下 Hello world: #include linux/bpf.h #define SEC(NAME) __attribute__((section(NAME), used)) static int (*bpf_trace_printk)(const char *fmt, int fmt_size, ...) (void *)BPF_FUNC_trace_printk; SEC(tracepoint/syscalls/sys_enter_execve)int bpf_prog(void *ctx) {char msg[] Hello, BPF World!;bpf_trace_printk(msg, sizeof(msg));return 0; } char _license[] SEC(license) GPL;编译命令 clang -O2 -target bpf -c bpf_program.c -I /usr/include/x86_64-linux- gnu/ -o bpf_program.o我们使用 SEC 属性告诉 BPF VM,我们想在什么时候运行我们写的这个程序。在上面的代码中我们指定在 kernel 调用到 execve 的时候来调用我们自己写的程序。即SEC 中定义的是一个 Tracepoints,是 kernel 预先定义好的允许开发者在这里 injet 进去自己的代码。那你可能会问我怎么知道都有哪些 tracepoints 呢这个可以在/sys/kernel/debug/tracing/events/syscalls/这个目录下找到系统预留的所有的tracepoints. 另外我们需要使用指定 GPL 的协议。因为 kernel 本身就是 GPL 的。我们使用 bpf_trace_printk 来 打 印 在 内 核 中 生 成 的 日 志 。 当 然 你 也 可 以 通 过 /sys/kernel/debug/tracing/trace_pipe 来查看内核的日志。 我们需要一份源码来编译 libbpf git clone --depth 1 git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git可以将源码拷贝到/kernel-src 目录下然后编译 libbpf sudo mv ubuntu-bionic /kernel-srccd /kernel-src/tools/lib/bpfsudo make sudo make install prefix/usr/local现在我们有了 bpf 的代码需要一个程序把它 load 到内核中。 #include bpf_load.h #include stdio.h int main(int argc, char **argv) {if (load_bpf_file(bpf_program.o) ! 0) {printf(The kernel didnt load the BPF program\n);return -1;}read_trace_pipe();return 0; }Makefile CLANG clang EXECABLE monitor-exec BPFCODE bpf_program BPFTOOLS /home/king/share/ubuntu-bionic/samples/bpf BPFLOADER $(BPFTOOLS)/bpf_load.c CCINCLUDE -I/home/king/share/ubuntu- bionic/tools/testing/selftests/bpf LOADINCLUDE -I/home/king/share/ubuntu-bionic/samples/bpf LOADINCLUDE -I/home/king/share/ubuntu-bionic/tools/lib LOADINCLUDE -I/home/king/share/ubuntu-bionic/tools/perf LOADINCLUDE -I/home/king/share/ubuntu-bionic/tools/include LIBRARY_PATH -L/usr/local/lib64 BPFSO -lbpf .PHONY: clean $(CLANG) bpfload build clean:rm -f *.o *.so $(EXECABLE) build: ${BPFCODE.c} ${BPFLOADER}$(CLANG) -O2 -target bpf -c $(BPFCODE:.c) $(CCINCLUDE) -o ${BPFCODE:.o} bpfload: buildclang -o $(EXECABLE) -lelf $(LOADINCLUDE) $(LIBRARY_PATH) $(BPFSO) \$(BPFLOADER) loader.c $(EXECABLE): bpfload .DEFAULT_GOAL : $(EXECABLE)make 每执行一个 ls 就会有一行打印信息 bpftrace工具简介 bpftrace进行内核跟踪#### bpftrace 命令行操作单行命令工具 bpftrace -e programbpftrace直接跟-e选项后面加单行命令一些示例比如bpftrace -e BEGIN { printf(Hello world!\n); } bpftrace -e kprobe:vfs_read { [tid] count();} bpftrace -e kprobe:vfs_read /pid 123/ { [tid, comm] count();} bpftrace -e t:block:block_rq_insert { [kstack] count(); }单行命令工具可以按ctrl-c也结束只有结束后才会打印输出结果。#### bpftrace 编写脚本工具 bpftrace支持脚本编写只需要在其实出添加#!/usr/local/bin/bpftrace会被认为是一个bpftrace脚本。#!/usr/local/bin/bpftrace // this program times vfs_read() kprobe:vfs_read {start[tid] nsecs; } retprobe:vfs_read /start[tid]/ {$duration_us (nsecs - start[tid]) / 1000;us hist($duration_us);delete(start[tid]); }#### debug调试bpftrace -d bpftrace -vbpftrace语法结构 bpftrace编程语言参考了awk的语法基础结构probes /filter/ { actions }它是一种事件驱动的运行方式。 probes表示的就是事件包括tracepoint、kprobe、kretprobe、uprobe等等。除了这些跟踪点还有两个特殊的事件BEGIN、END用于在脚本开始处和结束处执行。filter表示的是过滤条件当一个事件触发时会先判断该条件满足条件才会执行后面的action行为。action表示的具体执行的操作。 示例bpftrace -e kprobe:vfs_read /pid 123/ { [tid, comm] count();}#### bpftrace 脚本变量内部变量built-inuid: 用户id。 tid 线程id pid 进程id。 cpu cpu id。 cgroupcgroup id. probe 当前的trace点。 comm 进程名字。 nsecs 纳秒级别的时间戳。 kstack内核栈描述 curtask当前进程的task_struct地址。 args: 获取该kprobe或者tracepoint的参数列表 arg0: 获取该kprobe的第一个变量tracepoint不可用 arg1: 获取该kprobe的第二个变量tracepoint不可用 arg2: 获取该kprobe的第三个变量tracepoint不可用 retval: kretprobe中获取函数返回值 args-ret: kretprobe中获取函数返回值备注bpftrace -lv tracepoint:syscalls:sys_enter_read这个命令-lv可以用来查看一个tracepoint对应的参数都有哪些。自定义临时变量 以$标志起始来定义和引用一个变量$x 1Map变量 map变量是用于内核向用户空间传递数据的一种存储结构定义方式是以符号作为其实标记。 这个map可以有单个key或者多个keypath[tid] nsecs path[pid, $fd] nsecsbpftrace默认在结束时会打印从内核接收到的map变量。#### 函数exit():退出bpftrace程序 str(char *):转换一个指针到string类型 system(format[, arguments ...]):运行一个shell命令 join(char *str[]):打印一个字符串列表并在每个前面加上空格比如可以用来输出args-argv ksym(addr)用于转换一个地址到内核symbol kaddr(char *name):通过symbol转换为内核地址 print(m [, top [, div]])可选择参数打印map中的top n个数据数据可选择除以一个div值#### map函数 bpftrace内构的一些map函数用于传递数据给map变量注意接收他们的变量是map类型。常用的包括count():用于计算次数 sum(int n):用于累加计算 avg(int n):用于计算平均值 min(int n):用于计算最小值 max(int n):用于计算最大值 hist(int n):数据分布直方图范围为2的幂次增长 lhist(int n)数据线性直方图 delete(m[key]):删除map中的对应的key数据 clear(m):删除map中的所有数据 zero(m):map中的所有值设置为0#### 附件 常用的一些单行命令示例bpftrace -e tracepoint:block:block_rq_i* { [probe] count(); } interval:s:1 { print(); clear(); } bpftrace -e tracepoint:syscalls:sys_exit_read /args-ret 0/ { bytes sum(args-ret); } bpftrace -e tracepoint:syscalls:sys_exit_read { ret hist(args-ret); } bpftrace -e tracepoint:syscalls:sys_exit_read { ret lhist(args-ret, 0, 1000, 100); } bpftrace -e tracepoint:syscalls:sys_exit_read /args-ret 0/ { [- args-ret] count(); } bpftrace -e kprobe:vfs_* { [probe] count(); } END { print(, 5); clear(); } bpftrace -e kprobe:vfs_read { start[tid] nsecs; } kretprobe:vfs_read /start[tid]/ { ms[comm] sum(nsecs - start[tid]); delete(start[tid]); } END { print(ms, 0, 1000000); clear(ms); clear(start); } bpftrace -e k:vfs_read { [pid] count(); } bpftrace -e tracepoint:syscalls:sys_enter_execve { printf(%s - %s\n, comm, str(args-filename)); } bpftrace -e tracepoint:syscalls:sys_enter_execve { join(args-argv); } bpftrace -e tracepoint:syscalls:sys_enter_openat { printf(%s %s\n, comm, str(args-filename)); } bpftrace -e tracepoint:raw_syscalls:sys_enter {[comm] count(); } bpftrace -e tracepoint:syscalls:sys_enter_* {[probe] count(); } bpftrace -e tracepoint:raw_syscalls:sys_enter {[pid, comm] count(); } bpftrace -e tracepoint:syscalls:sys_exit_read /args-ret/ { [comm] sum(args-ret); } bpftrace -e tracepoint:syscalls:sys_exit_read { [comm] hist(args-ret); } bpftrace -e tracepoint:block:block_rq_issue { printf(%d %s %d\n, pid, comm, args-bytes); } bpftrace -e software:major-faults:1 { [comm] count(); } bpftrace -e software:faults:1 { [comm] count(); } bpftrace -e tracepoint:syscalls:sys_enter_clone { printf(- clone() by %s PID %d\n, comm, pid); } tracepoint:syscalls:sys_exit_clone { printf(- clone() return %d, %s PID %d\n, args-ret, comm, pid); } bpftrace -e tracepoint:syscalls:sys_enter_setuid { printf(setuid by PID %d (%s), UID %d\n, pid, comm, uid); } bpftrace -e tracepoint:syscalls:sys_exit_setuid { printf(setuid by %s returned %d\n, comm, args-ret); } bpftrace -e tracepoint:block:block_rq_insert { printf(Block I/O by %s\n, kstack); } bpftrace -e tracepoint:syscalls:sys_enter_connect /pid 123/ { printf(PID %d called connect()\n, $1); } bpftrace -e tracepoint:timer:hrtimer_start { [ksym(args-function)] count(); } bpftrace -e t:syscalls:sys_enter_read { reads count(); } interval:s:5 { exit(); } bpftrace -e kprobe:vfs_read {ID pid;} interval:s:2 {printf(ID:%d\n, ID);} 这只是简介留下个以后详细学习的地址 地址1 地址2 结论 eBPF 技术已经成为 Linux 内核中的一个强大工具用于解决性能、安全性和可观察性等各种挑战。通过可编程性和灵活性eBPF 为开发人员和系统管理员提供了解决问题的新途径为未来的系统优化和安全性提供了更多的机会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做企业网站都需要注意哪点做北美市场的外贸网站

166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入…

世界的物质性及发展规律

世界的物质统一性原理是辩证唯物主义最基本,最核心的观点,是马克思主义的基石物质运动总是在一定的时间和空间中进行的,没有离开物质运动的纯粹时间和空间,也没有离开时间和空间的物质运动 物质运动和时间空间的不…

word快速调整某列宽度

调整某列宽度!AI真的好使,以下是直接搬运的,作为个人记录。方法一:直接拖拽(最直观、最快) 这是最推荐也是最常用的方法。移动鼠标:将鼠标光标悬停在您想要调整宽度的列的右边框线上。光标会变成一个左右双向箭…

word设置表格内容自动调整

使用VBA宏(一劳永逸,最快)按 Alt + F11 打开VBA编辑器。 在左侧“工程资源管理器”中,双击您当前的文档(例如 Document1 或 你的文件名)。 在弹出的右侧代码窗口中,粘贴以下代码:Sub AutoFitAllTablesToWindow…

深入解析:携手订单日记,溯元粒开启智能升级之路

深入解析:携手订单日记,溯元粒开启智能升级之路pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

特殊符号网站企业简介优势项目案例等模块点选即用

对学习资源充满渴望的大学生可申请免费试读 ~ 作者:哈哥撩编程(视频号、抖音、公众号同名) 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#…

基于MTPA的永磁同步电机FOC仿真

基于MTPA(最大转矩电流比)的永磁同步电机(PMSM)FOC(磁场定向控制)仿真一、系统架构设计 1. 控制策略框架 graph TD A[速度环PI] --> B[电流环PI] B --> C[MTPA优化] C --> D[Clarke-Park变换] D -->…

2025 年最新壳寡糖厂家权威推荐排行榜:聚焦水溶性、高纯度、酶解型产品,为农化企业等下游客户精准筛选优质合作方多级别/农业级/多功能壳寡糖/壳寡糖水溶肥公司推荐

当前壳寡糖市场蓬勃发展,但乱象也随之凸显。众多品牌涌入市场,产品质量却天差地别,部分品牌用落后工艺生产,导致产品纯度低、活性不足,难以满足农化企业对高品质原料的需求;行业研发水平不均衡,多数品牌缺乏核心…

Ubuntu24.04 部分软件开启 Fractional Scaling

原因 因为 ubuntu24.04 默认使用的是 Wayland 环境,而很多软件不支持 Wayland,所以会使用兼容的 XWayland,尤其是 Electron 应用默认使用 XWayland。 修改方式 找到字体模糊软件的 .desktop 文件,在 Exec 的选项中…

2025 年最新酶解海藻源头厂家权威推荐榜单:全方位剖析实力厂商,助力选购优质酶解海藻产品酶解海藻液/酶解海藻肥/纯酶解海藻/高浓度酶解海藻厂家推荐

随着现代农业对生物刺激素需求的不断增长,酶解海藻产品因能有效促进作物生长、提升抗逆能力,市场热度持续攀升。然而当前行业乱象频发,部分厂家为降低成本采用化学添加工艺,破坏产品活性成分且存在环境隐患,导致产…

自己公司做公益网站怎么弄企业所得税优惠

第4章 机器学习基础 本章包括以下内容: 除分类和回归之外的机器学习形式 评估机器学习模型的规范流程 为深度学习准备数据 特征工程 解决过拟合 处理机器学习问题的通用工作流程 学完第 3 章的三个实例,你应该已经知道如何用神经网络解决分类问题和回归…

德州网站建设招聘藁城外贸网站建设

一款经典游戏,会在时间的沉淀中被每一代玩家所怀念,经久不衰。对于紫龙游戏来讲,他们就是这样一群怀揣着创作出经典游戏的初心而聚集在一起的团队,致力于研发出被广大玩家喜爱的作品。 从 2015 年团队成立,到 2019 年走…

图表全能王新增支持散点图功能,数据分析更强大!

在数据分析和可视化的过程中,散点图(Scatter Plot)是一个非常有用的工具。它不仅可以帮助我们识别数据之间的关系,还能直观地展示变量之间的相关性。无论是科研、市场分析,还是财务分析,散点图都能提供极大的帮助…

图表全能王新增支持K线图,数据分析更强大!

数据分析不仅限于科研和市场调查,金融领域同样对精确的数据解读和可视化有着极高的要求。尤其是在股票、外汇、期货等市场中,K线图(Candlestick Chart)已经成为投资者分析市场趋势、捕捉交易信号的经典工具。今天,…

图表全能王 (ChartStudio) 新增径向树图 (Radial Tree Diagram):创新层级数据可视化

ChartStudio —— 一款强大的数据分析与可视化工具,最新版本新增了 径向树图 (Radial Tree Diagram) 功能,为用户提供了全新的数据可视化方式。径向树图可以帮助你清晰展示复杂的层级关系,带来更直观、创新的数据展…

建设银行龙卡网站双德网站建设

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么?二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改 三、差异随机种子1. webUI位置2. 什么是差异随机种子3.使用差异…

图表全能王 (ChartStudio) 新增箱线图:轻松展示数据分布

ChartStudio —— 一款强大的数据分析与可视化工具,最新版本新增了 箱线图(Box Plot)功能,帮助用户更高效地展示数据的分布、离群点和集中趋势。 什么是箱线图? 箱线图是一种统计图表,常用于展示数据的分布情况。…

2025 年树脂排水沟厂家权威排行榜单,U形/线性/成品/混凝土/园林/市政/玻璃钢树脂排水沟公司推荐

一、树脂排水沟厂家推荐榜推荐一:淮安鑫塬铭新材料有限公司推荐指数:★★★★★ 口碑评分:9.9 分 品牌介绍:作为国内专业的树脂混凝土新材料研发与生产企业,淮安鑫塬铭新材料有限公司始终坚守 “诚信立业,质量为…

VS2022 过期

VS2022 过期今天我的VS2022 Enterprise快到期, 网上找了一下, 找到了这个, 验证Enterprise是OK的, Pro没试过, 记录一下Visual Studio 2022(VS2022)激活密钥 - 可均可可 - 博客园

论文速读 | 25年10月

Mastering the game of Go with deep neural networks and tree searchAlphaGo 2016 人类数据训练网络 —— 自我对弈强化学习 —— MCTS(PUCT)Mastering the game of Go without human knowledgeAlphaZero 2017 完全摒…