05. 李枫 用于 Linux 内核调试的 Python 2) eBPF 2.1 BPF (Berkeley Packet Filter, aka cBPF) https://en.wikipedia.org/wiki/Berkeley_Packet_Filter http://www.tcpdump.org/papers/bpf-usenix93.pdf History is it https://blog.cloudflare.com/bpf-the-forgotten-bytecode/ … Source: net/brendangregg/kernel-recipes-2017-performance-analysis-with-bpf Workflow o Source: ebpfbasics-190611051559.pdf 2.2 eBPF (extended BPF) since Linux Kernel v3.15 and ongoing0 码力 | 63 页 | 4.07 MB | 1 年前3
NJSD eBPF 技术文档 - 0924版本12之前 initial RTO是⼀个常数1s • 应⽤类型BPF_PROG_TYPE_SOCK_OPS • HOOK BPF_SOCK_OPS_TIMEOUT_INIT • 内核中调⽤栈 • tcp_timeout_init • tcp_call_bpf(BPF_SOCK_OPS_TIMEOUT_INI T) • bpf_cgrougp_run_sock_ops • … • 写cache流程基于inode cache优化 • bpf程序类型 BPF_PROG_TYPE_EXTFUSE • Hook点及⽅法 • fuse_request_send • FUSE_LOOKUP / FUSE_GETATTR / FUSE_SETATTR / • map 结构 • dentry map BPF_MAP_TYPE_HASH • key (inode (inode id, node name) • value inode id • inode map BPF_MAP_TYPE_HASH • key inode id • value fuse_attr (⽂件属性)基于data cache部分 • bpf程序类型 BPF_PROG_TYPE_EXTFUSE • Hook点及⽅法 • fuse_file_read_iter, fuse_file_write_iter0 码力 | 20 页 | 7.40 MB | 6 月前3
2.2.1通过Golang+eBPF实现无侵入应用可观测bcc libbpf + bpf + core 编程 bcc 依靠运行时汇编,将整个大型LLVM/Clang 库带入并嵌入其中 编译过程中资源用量大,对Cpu、Mem有要求 依赖内核的头包 bpf 程序跟其他的用户空间的程序没有太大区别 编译成二进制文件,可以适应不同运行环境 libbpf 扮演bpf程序装载机角色 开发人员只需要关注bpf程序的正确性和性能,不 return nil } bpf2go 01. 副标题 //go:generate go run github.com/cilium/ebpf/cmd/bpf2go -cc clang -cflags $BPF_CFLAGS -type insp_pl_event_t - type insp_pl_metric_t bpf ../../../../bpf/packetloss.c -- -- -I../../../../bpf/headers -D__TARGET_ARCH_x86 1、安装环境 2、写好bpf.c和bpf.h,放到指定目录 3、go generate 获取转换后的go文件 构建完整的应用可观测系统 第五部分 架构感知 JMeter testdemo1 testdemo2 Mysql Redis Kafka hcmine 节点 属性 关系 架构0 码力 | 29 页 | 3.83 MB | 1 年前3
2022年美团技术年货 合辑用,这是极其困难的事情。此时,eBPF 出现,它以较小的子系统改动,保障了系统 内核的稳定,还具备实时动态加载的特性,能将业务逻辑加载到内核,实现热更新的 动态执行。 eBPF 由 BPF 发 展 而 来,BPF 全 称 Berkeley Packet Filter,1992 年 由 Steven McCanne 和 Van Jacobson 提出,1997 年引入 Linux Kernel ingress 与 egress 的位置,可以更准确地 确定 hook 点。 ● XDP 的 BPF_PROG_TYPE_XDP 程序类型,可以丢弃、修改、重传来自 ingress 的流量,但无法对 egress 起作用。 ● TC 的 BPF_PROG_TYPE_SCHED_CLS 除了拥有 XDP“BPF_PROG_ TYPE_XDP”的功能外,还可以对 egress 起作用。 前者最常 的协议,不是则直接放行 if (!( 不是 SSHD 协议 (&c))) { return XDP_PASS; } // 判断 rootkit 是否匹配,网卡信息与来源端口是否匹配 hack_mac[] = “读取 bpf map 配置。” if( 密钥不匹配 ) { return XDP_PASS; } 1300 > 2022年美团技术年货 // 读取 map,是否已经存在该 client 信息 struct netinfo0 码力 | 1356 页 | 45.90 MB | 1 年前3
openEuler 24.03 LTS 技术白皮书polling 移到内核线程处理,使 CPU 调度器可以合理调度提升性能。 • bpf新增kfunc特性:允许bpf通过符号方式直接调用内核和ko提供的函数,ko可以通过注册kfunc的方式来动态提供bpf接口。 • bpf 新增 dynamic pointer 特性:在 bpf 中引用动态分配的内存,此前 bpf 使用的内存必须在 verifier 检查时已静态指定。 • perf 新增特性支持:新增支持 防止文件系统损坏。 • riscv bpf 新特性支持:支持 trampoline 特性、Zbb 扩展特性、kfunc 支持特性、cpu-v4 指令特性和原子操作指令特性等,扩 展了 bpf 的能力。 • arm64 bpf 新特性支持:新增 bpf 栈变量 ldr/str 优化、pac 支持、trampoline 支持与 cpuv4 指令支持等特性,扩展了 bpf 的能力。 • 内存可靠性分级0 码力 | 45 页 | 6.18 MB | 1 年前3
OpenShift Container Platform 4.14 电源监控joules_total 主机组件的累积能源消耗,容器使用的 CPU 和 DRAM 除外。通常,这个指标是 ACPI 主机的能源消耗。 kepler_container_bpf_cpu_time_us_total 使用 BPF 跟踪的容器使用的总 CPU 时间。 kepler_container_cpu_cycles_total 使用硬件计数器的容器使用的总 CPU 周期。CPU 周 期是与 CPU kepler_container_bpf_net_tx_irq_total 传送到使用 BPF 跟踪的容器的网卡的数据包总数。 kepler_container_bpf_net_rx_irq_total 从容器网卡接收的数据包总数,使用 BPF 跟踪。 指 指标 标名称 名称 描述 描述 第 第 5 章 章 视觉 视觉化 化电 电源 源监 监控指 控指标 标 13 kepler_container_bpf_block_irq_total ck_irq_total 使用 BPF 跟踪的容器的块 I/O 调用总数。 kepler_node_info 节点元数据,如节点 CPU 架构。 kepler_node_core_joules_total 在节点和操作系统上运行的所有容器使用的 CPU 内核 使用的总能源消耗。 kepler_node_uncore_joules_total 由在节点和操作系统上运行的所有容器使用的、非核 心0 码力 | 20 页 | 350.27 KB | 1 年前3
绕过conntrack,使用eBPF增强 IPVS优化K8s网络性能Conntrack Pre-route route IPVS entry Post-route Iptables snat Conntrack Post-route Pre-route IPVS entry BPF SNAT IPVS mode data path IPVS-eBPF mode data path How eBPF does SNAT • Why does SNAT with eBPF NodePort +64% -47% +22% Test result • Perf shows number of instructions per request drops by 38% IPVS-BPF IPVS 0 20000 40000 60000 80000 100000 120000 140000 160000 180000 Nodeport short connection #param unroll • Size limitation of BPF program <= 4096 • Move SNAT allocate port loop into IPVS kernel module • Bounded loop support in Linux 5.3 • Size limitation of BPF program is one million after Linux0 码力 | 24 页 | 1.90 MB | 1 年前3
openEuler 22.09 技术白皮书openEuler 22.09 基于 Linux Kernel 5.10 内核构建,在此基础上,同时吸收了社区高版本的有益特性及社区创新特性: • BPF CO-RE (Compile Once-Run Everywhere) 特性:解决 BPF 的可移植性,即编写的程序通过编译和内核校验之后, 能正确地在不同版本的内核上运行,而无需针对不同内核重新编译。 • 内存 RAS - 高可靠内存: 容错增强:支持 copy_from_user 读操作时,发生内存多 bit 错误,可以通过杀掉受影响的进程,而避 免内核复位。 • 可编程内核调度框架抢占、选核、选任务部分实现及示例。 • 基于 BPF 实现内核缓存,可以大幅提升 Redis 性能。 • 支持 AArch64 SME (Scalable Matrix Extension):ME 是下一代 SIMD,其功能超越了 ARM 的 Neon。旨在为0 码力 | 13 页 | 1.39 MB | 1 年前3
Cilium的网络加速秘诀中实现对service解析 • sock_ops + sk_msg。记录本地应用之间通信的socket,实现本地数据包的加速转发 加速同节点pod间通信 cilium 使用 eBPF 程序,借助 bpf_redirect() 或 bpf_redirect_peer() 等 helper 函数,快速帮助同宿主机间 的流量转发,节省了大量的内核协议栈 处理流程 pod 1 process kernel0 码力 | 14 页 | 11.97 MB | 1 年前3
sealos 以 kubernetes 为内核的云操作系统sealfs 直接从容器拦截 IO,对接 sealfs 分布式文件系统,避免 fuse 用户态内核态反复横跳 在 Sealos 上使用 GPU 在 Sealos 上利用 Cilium + BPF 实现流量统计 Slide source credit to: How to Make Linux Microservice-Aware with Cilium and eBPF (InfoQ, 2019)0 码力 | 29 页 | 7.64 MB | 9 月前3
共 27 条
- 1
- 2
- 3













