• 2024-11-09基于eBPF实现vxlan封装和解封装
    不同于cilium基于Linux内核完成vxlan封装和解封装的逻辑,这里基于eBPF自己完成vxlan封装和解封装,不走Linux内核vxlan模块。tc_ingress和tc_egress加载到主机veth口和主机网口ens33上。eBPF封装vxlan:通过bpf_skb_adjust_room函数,增加ip头+udp头+vxlan头+以太网头。打通跨节点流
  • 2024-10-11内核级流量治理引擎Kmesh八大新特性解读
    本文分享自华为云社区《内核级流量治理引擎Kmeshv0.5发布!进击的Sidecarless服务网格》,作者:云容器大未来。我们非常高兴地宣布Kmeshv0.5.0的发布。首先,感谢我们的贡献者在过去两个月中的辛勤工作。在v0.5.0版本中,我们进行了许多重要的增强,包括命令行工具kmeshctl、更全面
  • 2024-09-13Cilium网络插件
    一、基础知识:eBPF和XDP1.1BPF全称为“BerkeleyPacketFilter”,于1997年自Linux2.1.75版本的内核引入。基于寄存器(CPU之上的小型存储空间)的虚拟机,运行于内核空间。主要功能包括:负责运行从用户空间(通过系统调用)注入的代码而无须对内核进行编程(开发内核模块)。使用自定义的64
  • 2024-09-06Buzzer:一款针对eBPF的安全检测与模糊测试工具
    关于BuzzerBuzzer是一款功能强大的模糊测试工具链,该工具基于Go语言开发,可以帮助广大研究人员简单高效地开发针对eBPF的模糊测试策略。功能介绍下面给出的是当前版本的Buzzer整体架构:元素解析:1、ControlUnit:通过命令行标志--fuzzing_strategy启动指定的FuzzingStra
  • 2024-09-03观测云核心技术解密:eBPF Tracing 实现原理
    前言eBPF是一种强大的内核技术,允许在内核中安全地执行自定义代码。通过eBPF,开发者可以在不修改内核源码的情况下,对内核功能进行扩展和监控。eBPFTracing利用这一技术,对系统调用、内核函数等进行跟踪,从而实现对应用行为的深入洞察。与传统的监控方式相比,eBPFTracing具有以下
  • 2024-08-26数据库性能诊断利器 聚好看DBdoctor亮相中国数据库技术大会
       2024年8月22-24日,备受瞩目的第15届中国数据库技术大会(DTCC2024)于北京隆总召开。数字化创新浪潮汹涌澎湃,数据库作为信息技术的核心基础设施,正以前所未用的速度推动各行各业的智能化升级。作为在数据库技术领域率先掌握前沿eBPF技术的企业,聚好看科技于本次大会展示自研数据
  • 2024-08-20使用cilium开发ebpf程序
    使用go开发ebpf程序最常见的一个框架就是cilium。开发前需要了解ebpf,了解go语言的基础知识。在本地安装go之后下载bpf2gogogetgithub.com/cilium/ebpf/cmd/bpf2go从最简单的开发框架开始下载示例源码gitclonehttps://github.com/cilium/ebpf.git在ebpf/examples下是官方
  • 2024-08-14(转)《eBPF 核心技术与实战》
    原文:https://fanlv.fun/2022/11/05/study-ebpf/概览eBPF 是什么呢?从它的全称“扩展的伯克利数据包过滤器(ExtendedBerkeleyPacketFilter)”来看,它是一种数据包过滤技术,是从 BPF(BerkeleyPacketFilter) 技术扩展而来的。BPF 提供了一种在内核事件和用户程序事件发
  • 2024-07-30基于BPF提升postgres可观测性的前提或条件
    最近看到一个新产品(dbdoctor)使用了eBPF技术,可实现对sql级别的监控,其涵盖了,cpu,内存,io,网络等,功能非常强大,目前mysql版本的已经开卖了。经过一番了解发现,该技术对于数据库的性能分析,故障排查方面很有用处。下面对了解到的内容总结一下。参考:Linux可观测性BPF&eBPF以及BCC&bpf
  • 2024-07-16eBPF bpf_redirect函数
    函数定义https://www.man7.org/linux/man-pages/man7/bpf-helpers.7.html网卡响应报文网卡要响应报文,不是经过该网卡就可以。报文必须进入这个网口才行,bpf_redirect表示进入这个网口(虚拟机网口除外,需要指定BPF_F_INGRESS才行)。因为网卡响应在tcingress之前,所以左侧流程虚拟
  • 2024-07-12基于eBPF的procstat软件追踪程序Offcpu时间
    在现代计算机系统中,性能调优和问题诊断是大家经常会面临的问题,解决这些性能问题是确保程序高效运行的关键。有时不知为何程序的吞吐量和时延出现抖动,有一种可能就是程序发生了Offcpu。了解程序的Offcpu时间有助于识别潜在的性能瓶颈和系统资源调度问题。今天,我们将介绍一
  • 2024-07-11eBPF 容器持久化map到宿主机上
    问题现象k8s上启动pod后,使用主机网络的容器,加载eBPF程序到网口上,持久化map只能保存在容器文件系统/sys/fs/bpf中。容器复位后,新容器与原来eBPF程序使用的不是同一个map。问题分析新容器使用新的文件系统,无法找回原来的/sys/fs/bpf挂载点,需要持久化到宿主机上。k8s挂载传播,实现
  • 2024-07-11eBPF 用户态和内核态基于ringbuf交互
    相比于perf_event_array,ringbuf优势在于1.读取数据是有序的,即提交顺序和消费顺序保持一致。2.避免数据复制,即提交数据到map和传递到用户态都不需要拷贝。内核态ringbuf/ringbuf.c#include"../headers/vmlinux.h"#include"../headers/bpf_endian.h"#include"../headers/b
  • 2024-07-09基于eBPF的procstat软件追踪等待锁和持有锁的时间
    在并发编程中,锁的使用是保证线程安全的重要手段。然而,过度使用锁或者锁竞争可能导致性能瓶颈。为了分析程序中锁的使用情况,我们可以借助procstat软件来追踪程序加锁时间和等待锁的时间。procstat是一个基于eBPF(extendedBerkeleyPacketFilter)的软件,能够对系统的各种行为进
  • 2024-07-08香橙派编译linux内核支持ebpf和虚拟WIFI
    前言上一篇文章香橙派5plus上跑云手机方案一redroid(带硬件加速)中说了怎么运行redroid,这篇补一下怎么修改参数编译内核。补充上篇文章有个内容需要补充一下:更新完内核需要用下面的命令防止内核被apt更新,不然后面使用aptupdate又回到官方的内核(注意版本号,当前是1009)。sudo
  • 2024-05-27cilium 基础
    cilium概述Cilium是一种网络、可观察性和安全解决方案,具有基于eBPF的数据平面。它提供了一个简单的扁平第3层网络,能够以本机路由或覆盖模式跨越多个集群。它具有L7协议感知能力,可以使用与网络寻址分离的基于身份的安全模型在L3-L7上实施网络策略。Cilium为Pod之间
  • 2024-05-21Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化
    本文分享自华为云社区《Kmesh进入CNCF云原生全景图》 ,作者:云容器大未来。近日,Kmesh 正式进入CNCF云原生全景图,位于ServiceMesh 类别下。CNCFLandscape在云原生实践过程中的每个环节帮助用户了解有哪些具体的软件和产品选择,Kmesh进入CNCFLandscape,成为了CNCF构建云
  • 2024-05-19eBPF常用map类型
    map种类map类型特点HashMapBPF_MAP_TYPE_HASHhashmap。BPF_MAP_TYPE_PERCPU_HASHpercore的hashmap。BPF_MAP_TYPE_LRU_HASHmap塞满之后,继续插入,自动删除最近最少使用的entry。ArrayMapBPF_MAP_TYPE_ARRAY数组,key是整数。
  • 2024-05-10cilium Service Mesh
    ServiceMesh介绍ServiceMesh关注于集群内部的微服务通信、控制和监控。它提供诸如负载均衡、故障恢复、安全性增强、监控和跟踪等功能。ServiceMesh可以帮助管理复杂的微服务架构,实现服务之间的可靠通信,并提供各种附加功能来增强系统的可观测性和安全性。随着分布式应用程
  • 2024-05-07cilium 组件
    cilium组件架构图CiliumAgentCiliumagent(cilium-agent)在集群中的每个节点上运行。在较高级别上,代理通过Kubernetes或API接受配置,这些配置描述了网络、服务负载平衡、网络策略以及可观测性和监控要求。Ciliumagent侦听来自Kubernetes等编排系统的事件,以了解容
  • 2024-05-05eBPF约束
    内核态约束1.内核态eBPF无法使用C语言标准库。因为不支持malloc,所以无法扩展skb空间且无法直接从内核态拷贝整个报文到用户态。2.内核态eBPF无法获取当前时间,bpf_ktime_get_ns函数返回系统启动后运行纳秒数,不包括系统暂停时间。https://www.man7.org/linux/man-pages/man7/bpf
  • 2024-05-04eBPF基于LPM实现路由匹配
    基于eBPFlpmmap,icmp只有匹配上路由才能通。最终目录结构效果展示启动应用前,可以ping通192.168.0.1和192.168.0.105。启动应用后,无法ping通192.168.0.1,可以ping通192.168.0.105。停止应用后,可以ping通192.168.0.1和192.168.0.105。icmp/drop-icmp.c#include"../heade
  • 2024-04-24ebpf在Android安全上的应用:ebpf的一些基础知识(上篇)
    ebpf在Android安全上的应用:ebpf的一些基础知识(上篇)一、ebpf介绍eBPF是一项革命性的技术,起源于Linux内核,它可以在特权上下文中(如操作系统内核)运行沙盒程序。它用于安全有效地扩展内核的功能,而无需通过更改内核源代码或加载内核模块的方式来实现。(PS:介绍来源于https://ebpf.i
  • 2024-04-15操作系统是否支持ebpf特性检查
    内核版本信息uname-a操作系统信息cat/etc/os-release查看是否支持kprobe事件zcat/proc/config.gz|grepCONFIG_KPROBE_EVENTSorcat/boot/config-$(uname-r)|grepCONFIG_KPROBE_EVENTS查看是否配置为CONFIG_KPROBE_EVENTS=y查看是否支持uprobe事件zcat/proc/
  • 2024-04-14eBPF xdp和tc区别
     xdptc层次网卡驱动层数据链路层位置进入Linux网络协议栈之前在Linux网络协议栈中方向只有ingress有ingress和egress修改支持修改报文支持修改报文,有skb结构,修改更方便cilium加载eBPF到虚拟网卡tc上来实现流量转发。