您的位置:首页 > 移动互联

智汇华云 | eBPF介绍与使用

发布时间:2022-09-13 13:03:46  来源:互联网     背景:

  Linux在日常的使用中已经无处不在了,从人们的手机,到电视机,再到路由器,都运行在linux内核之上,而eBPF就是Linux内核的一把瑞士军刀,通过eBPF可以在linux内核中运行程序,运维人员可以使用它对linux内核进行监控,开发者可以使用它对linux内核功能进行定制修改,做到很多以前无法实现的功能。

  官方的说法: eBPF is a revolutionary technology with origins in the Linux kernel that can run sandboxed programs in an operating system kernel.

  个人认为,简单的说,eBPF可以理解为一个框架,通过这个框架,我们可以在内核中执行自己编写的程序代码。

  eBPF基本概念

  eBPF的前身是BPF(extended Berkeley Packet Filter),BPF是内核中用来做高效过滤网络报文的,tcpdump里面就是用的BPF技术过滤报文。2014年内核3.18中eBPF第一次出现,此时的eBPF已经成为内核的顶级子系统,演进为一个通用执行引擎,允许用户在内核中运行自己的程序。

  挂载点(Hook)eBPF程序基于事件触发,当内核代码走到对应的挂载点就会执行挂载在此处的eBPF程序。常见的挂载点有:系统调用,内核函数进入/退出,内核跟踪点,网络数据包等等。

  映射(Maps)eBPF程序中用来存储数据,共享数据的结构体就是Maps,内核内置了多种类型的Maps给开发者使用,常见的有哈希表,数组,LRU,Ring buffer等等。

  帮助函数(Helper Calls)内核为了保证安全,运行在内核中的eBPF程序只能调用当前内核版本预定义好的函数,不能随意调用其他内核函数,函数名称都是以bpf_开头命名。例如u32 bpf_get_smp_processor_id(void),可以获取当前eBPF程序运行在哪个cpu上。

  加载与验证(Loader & Verification)编写好的eBPF程序需要先通过编译,生成字节码,之后通过调用bpf系统调用将字节码加载到内核,此时内核会运行自己的验证器来检验eBPF程序,确保程序是安全的,有限循环的,不会把linux系统搞坏。

  eBPF特点

  强大的内核可编程性。随着内核版本的升级,内核中可以运行eBPF程序的地方越来越多,eBPF可以做的事情也越来越多。不同内核功能加入eBPF版本列表:

  XDP(快速数据路径)Kernel 4.8

  LIRC(红外)Kernel 4.18

  限制100万条指令Kernel 5.2

TRX交易所

  Socket lookup(控制数据包入socket)Kernel 5.9

  开发方便开发者不需要自己定义数据结构,直接使用现成的Maps进行存储共享数据,只需要关注具体的业务实现代码。由于eBPF程序先编译成字节码,之后内核自己校验通过之后再生成可用的内核代码,所以可以一次编译处处运行,不需要像内核模块一样,每次更新内核之后都要重新编译。

  可以在x86上编译mips架构上运行的eBPF字节码。免去交叉编译的痛苦。

  安全数据操作都是通过Maps,操作Maps的函数也是预先定义好的,不存在访问空指针。

  eBPF使用

  介绍了这么多eBPF的概念,接下来实际操作一下,看看eBPF程序如何编译和使用,这里采用原汁原味的linux源代码编译演示。

  使用最新的archlinux系统,其他系统也差不多,稍微按照实际情况改一下。

  # asp checkout linux# 准备linux内核源码

  # makepkg -o -d –skippgpcheck# 下载linux源代码

  # make mrproper

三星 智能音箱

  # zcat /proc/config.gz >.config

  # make headers_install

  # make modules_prepare

  # make VMLINUX_BTF=/sys/kernel/btf/vmlinux M=samples/bpf

  # asp checkout linux# 准备linux内核源码

  # makepkg -o -d –skippgpcheck# 下载linux源代码

  # make mrproper

  # zcat /proc/config.gz >.config

  # make headers_install

  # make modules_prepare

  # make VMLINUX_BTF=/sys/kernel/btf/vmlinux M=samples/bpf

  这里把内核自带的bpf示例程序都编译出来了,在目录samples/bpf下面。

哔哩哔哩港股市值

  这里我们具体看一个sampleip的eBPF程序,看看eBPF程序是如何编写的

  直接上代码:

  首先17到23行定义了一个maps,叫ip_map,类型是哈希,键是u64,值是u32,最大长度8192。

  之后定义了一个do_sample函数,函数参数类型是bpf_perf_event_data,里面有当前内核IP指令指针寄存器的内容。通过调用bpf_map_lookup_elem函数来更新ip_map。

  运行内核编译好的sampleip程序,默认是采样5秒,每秒采样99次,程序结束后会把ip_map采集到的信息打印出来。

  从这个实例中可以看出,开发的eBPF程序比传统的内核开发方便了很多,数据结构不用操心,可以调用的函数也不用操心,都是预先定义好的,只需要实现自己的业务逻辑即可。

  eBPF使用场景

  linux性能分析,性能调优上面的sampleip就是简单的内核性能分析,可以看出当前内核经常调用的函数。eBPF对于内核开销很小,可以在生产环境排查问题的时候进行精确定位,同时由于eBPF的安全性,不用担心会把内核搞挂。有兴趣的可以去看一下bcc,里面对于内核每个子系统都有对应的eBPF监控程序,非常方便。

智汇华云 | eBPF介绍与使用

  linux网络加速eBPF在这个领域中也是牛的很,底层有XDP快速数据路径,可以直接在网卡收到数据包的同时进行处理,避免内核分配skb开销,可以用来实现DDos,负载均衡,性能媲美DPDK。再往上一点内核的tc也可以hook eBPF程序实现自定义流量分类,再向上的socket层还可以调用eBPF实现动态修改socket选项,甚至tcp的拥塞算法内核也提供了eBPF挂载的地方,可以自己实现一套新的拥塞算法。

  安全管理systemd中使用eBPF控制服务可以监听的端口,libvirtd也使用eBPF进行设备的访问控制,社区还有eBPF控制进程允许访问的文件,允许读写哪些/sys文件。

  eBPF的出现让Linux内核开发变得简单,降低了内核开发门槛,为普通人了解深入linux内核提供了途径,真的是一个革命性的发明,有linux的地方就有ebpf ^^。


返回网站首页

本文评论
凡态智能锁好不好_智能锁赛道新选手 - 凡态智能锁
  我国的智能锁行业起步相对晚,但随着智能家居、物联网技术的成熟与发展,家用普及率逐年升高。从90年代初开始酒店使用的1.0版刷卡单机锁,到2010年前2.0版指纹单机锁,再到2016...
日期:12-16
漫步者LolliPods小度版真无线智能耳机全新上市,打造智享声活「漫步者lollipods和小度蓝牙耳机」
  早在2019年,漫步者发布了LolliPods真无线蓝牙降噪耳机,获得消费者的广泛好评。2021年上半年,漫步者发布了匠心力作LolliPods Pro真无线主动降噪蓝牙耳机,再造降噪里程碑式新...
日期:07-28
桔子数科释放创新服务优势 打造有温度的金融服务_小桔金融科技
  数字化时代,诸多传统金融机构都在寻求发展新路径,数字科技与金融数字化的紧密结合,为提高金融机构的经营质效和推进金融服务的客户体验度提供了强有力的支撑。尤其在新冠疫...
日期:07-26
灵活定制、一键化部署|Whale 帷幄私有化部署亮出制胜法宝
  伴随 Docker 技术的发展升级,创新的交付私有化部署成为了可能,私有化部署也因此拥有了更多的市场空间。在基于 SaaS 服务的部分业务不断升级的过程中,客户发现原有 SaaS 服...
日期:07-30
浪潮网络:智能感知网络 释放算力动能_浪潮信息云计算
  3月17日,主题为“智算创见 数实相融”的2022浪潮信息生态伙伴大会(IPF2022)正式举行,大会围绕智算的技术趋势、时代认知、发展挑战等内容进行了深入的探讨。浪潮网络作为...
日期:07-29
华为快应用,加速构建全场景智慧生态_华为全场景智慧化战略
  9月10日,华为HDD(HUAWEI Developer Day)技术沙龙在成都召开。本次会议汇聚了众多优秀的合作伙伴和开发者,就“开放生态,定义未来”主题展开研讨。现场,华为消费者云服务快应...
日期:07-28
更美APP为更多的求美者提供优质且高效的服务「更美app下载」
  如今互联网的快速发展为人们的生活带来了很多的便捷,特别是线上购物,已经成为了很多人主要的消费途径。只是这种线上购物的方式,在消费者付款之前是无法感知真实的产品和服...
日期:07-28
国庆餐饮火爆,普渡机器人亮相CCTV-2《经济信息联播》
  国庆假期各地旅游区人潮涌动,餐饮消费也掀起高潮。尤其对于广东这边的早茶文化,很多人选择以一顿精致的广式早茶开启欢乐假期,茶楼便成为亲朋好友相聚的首选地点。  广东...
日期:10-12
官宣:之前科技正式更名远鲸科技「远鲸科技是做什么的公司」
  9月1日,北京之前科技有限公司正式更名为“北京远鲸科技有限公司”,同时启用全新品牌视觉标识。新版标识呈拍打水面的鲸鱼尾状,底色为海洋蓝,简洁且具有识别性,寓意有活力,富有...
日期:07-28
长江流域民族服饰展亮相武汉博物馆 擎朗机器人帮你涨知识
  近日,长江文明馆(武汉自然博物馆)联合中南民族大学民族学博物馆主办“同源共生 ‘衣’彩纷呈——长江流域民族服饰展”,共展出长江流域多个民族的精选服饰、银饰和丝织刺...
日期:10-24
充电不能“胡来”,雅迪电动车提出更严谨的解决方案_雅迪电动车充电问题
  电动车因为轻巧灵活方便的特点,一经上市就深受老百姓的喜爱,是我国人民日常通勤的主要交通工具,所以现在电动车数量也越来越多。但目前,我国很多消费者也缺乏安全充电意...
日期:07-29
万人在线“吃席”,520四对新人在Soul举办了一场集体赛博式“云婚礼”
  520,“我爱你”,数字时代情人节。在这个关于爱的节日到来之际,5月19日晚7点,社交平台Soul App上举办了一场特殊的集体赛博“云婚礼”。平台数据显示,当晚共有超过3.5万用户...
日期:07-14
中国移动远程医疗平台_中国移动超清视话助力开启远程医疗新场景
  从书信、口信问药,到邮件、语音电话问诊,信息通信技术的演进推动着远程医疗服务水平的不断提升。近期,中国移动基于5G网络环境推出5G新通话产品,其中的超清视话功能助力优化...
日期:11-11
双十一完美收官 极米NEW Z6X爆卖8万台 H3S爆卖4万台「极米z6x双十一价格」
  极米2021年双十一完美收官,官方总战报显示,极米全网成交总额(GMV)突破8亿,同比增长超90%,蝉联八连冠!单品方面,旗舰爆品H3S全网单品销售量超4万台,全网单品GMV破2.5亿;人气爆...
日期:07-26
创想三维618半价购机 轻松享受3D打印造物乐趣_创想三维3d打印机多少钱
  一年一度的618狂欢大促正火热进行中,创想三维这次活动优惠力度拉满,为国内3D打印爱好者准备了多项诚意满满的福利,不仅购买机器即享受耗材、配件等福利,还在6月15日晚8点,准...
日期:04-13
超短焦投影机 峰米R1_采用超短焦技术的坚果O1、峰米R1投影,有什么优缺点?
  超短焦技术拥有较小的投射比,可以在较短的投影距离,投射更大的画面。过去,这项技术基本用在2万+的激光电视身上,让不少朋友望而兴叹。相比激光电视,超短焦投影虽然配置更低,但...
日期:07-14
腾讯PAG动画组件正式对外开源
  2022年1月14日,腾讯宣布 PAG(Portable Animated Graphics)动画组件正式开源。  PAG 是腾讯 AVGenerator OTeam 自主研发的一套完整的动画工作流解决方案,助力于将 AE (A...
日期:07-14
赋能元宇宙创新发展,摩尔线程亮相2022年中国国际服务贸易交易会
  2022年中国国际服务贸易交易会于8月31日至9月5日在北京举行,并首次设立“元宇宙”体验馆,全方位展示“底层技术、共性能力、应用系统、场景建设”四层元宇宙完整技术体系...
日期:09-06
2021咖啡健康化趋势洞察报告(2017-2021年中国咖啡行业投资分析及前景预测报告)
  随着《关于实施健康中国行动的意见》、《健康中国行动(2019—2030年)》等文件颁布,国民健康素养逐渐提升,高蛋白、低糖、低脂等健康饮食理念深入人心,饮品行业也随之掀起健...
日期:02-24
后疫情时代,帅丰X1双子星蒸烤一体集成灶持续领跑厨卫市场_帅丰分体式集成灶
  8月4日,国家卫健委新闻发言人表示,当前全球疫情上升迅速,疫情输入风险加大,全国疫情呈现多点发生、局部暴发的态势,并呼吁大家始终做好个人防护。  其实,如果问新冠疫情自爆...
日期:07-29