当前位置: 首页 > news >正文

网站推广注册wap网页设计模板

网站推广注册,wap网页设计模板,砀山网站建设,梁志天设计公司项目Linux 内核在 2022 年主要发布了 5.16-5.19 以及 6.0 和 6.1 这几个版本#xff0c;每个版本都为 eBPF 引入了大量的新特性。本文将对这些新特性进行一点简要的介绍#xff0c;更详细的资料请参考对应的链接信息。总体而言#xff0c;eBPF 在内核中依然是最活跃的模块之一每个版本都为 eBPF 引入了大量的新特性。本文将对这些新特性进行一点简要的介绍更详细的资料请参考对应的链接信息。总体而言eBPF 在内核中依然是最活跃的模块之一它的功能特性也还在高速发展中。某种意义上说eBPF 正朝着一个完备的内核态可编程接口快速进化。 eBPF 进阶: 内核新特性进展一览 BPF kfuncsBloom Filter Map5.16Compile Once – Run EverywhereLinux 5.17bpf_loop() 辅助函数5.17BPF_LINK_TYPE_KPROBE_MULTI5.18动态指针和类型指针5.19USDT5.19bpf panic6.1BPF 内存分配器、链表6.1user ring buffer 6.1 BPF kfuncs BPF子系统暴露了内核内部算法和数据结构的许多方面这自然导致了对在内核变化时保持接口稳定性的关注。长期以来BPF对用户空间不提供接口稳定性保证的立场似乎一直有点问题过去内核开发者发现他们不得不维护那些不打算稳定的接口。现在BPF社区开始考虑至少为它的一些接口提供明确的稳定性承诺可能意味着什么。 BPF允许由用户空间加载的程序被附加到大量钩子中的任何一个并在内核中运行–在子系统的验证器得出这些程序不会损害系统的结论之后。一个程序将获得由它所连接的钩子提供给它的内核数据结构的访问权。在某些情况下程序可以直接修改这些数据从而直接影响内核的运行在其他情况下内核将对BPF程序返回的值采取行动例如允许或不允许某项操作。 还有两种机制内核可以通过它们使BPF程序获得额外的功能。帮助函数或 “helpers”是为提供给BPF程序而编写的特殊函数它们从扩展BPF时代开始就存在了。被称为kfuncs的机制比较新它允许任何内核函数被提供给BPF可能会有一些限制。Kfuncs更简单、更灵活如果它们首先被实现那么似乎不太可能有人会在后来添加帮助器。也就是说kfuncs有一个重要的限制即它们只能被JIT编译的BPF代码访问所以它们在缺乏JIT支持的架构上是不可用的这个列表目前包括32位Arm和RISC-V尽管增加这两种支持的补丁正在开发中. 每个kfunc都为BPF程序提供了一些有用的功能但几乎每个kfunc都暴露了内核内部工作方式的某些方面。 Reconsidering BPF ABI stability: https://mp.weixin.qq.com/s/wYDSXuwVgmGw-wmFgBNJcADocumentation/bpf: Add a description of “stable kfuncs” https://www.spinics.net/lists/kernel/msg4676660.html Bloom Filter Map5.16 布隆过滤器是一种节省空间的概率数据结构用于快速测试一个元素是否存在于一个集合中。在布隆过滤器中假阳性是可能的而假阴性则不可能。 这个补丁集包括布隆过滤器中可配置数量的哈希值和条目的基准测试。这些基准大致表明平均而言使用3个哈希函数是最理想的选择之一。当比较hashmap查找中使用3个哈希值的bloom filter和不使用bloom filter的hashmap查找时使用bloom filter的查找对于5万个条目大约快15%对于10万个条目快25%对于5万个条目快180%对于1百万个条目快200%。 BPF: Implement bloom filter map https://lwn.net/Articles/868024/ Compile Once – Run EverywhereLinux 5.17 Linux 5.17 为 eBPF 添加了一次编译到处执行Compile Once – Run Everywhere简称 CO-RE大大简化了 eBPF 程序处理多版本内核兼容时的复杂性以及循环逻辑的处理。 eBPF 的一次编译到处执行简称 CO-RE项目借助了 BPF 类型格式BPF Type Format, 简称 BTF提供的调试信息再通过下面的四个步骤使得 eBPF 程序可以适配不同版本的内核 第一在 bpftool 工具中提供了从 BTF 生成头文件的工具从而摆脱了对内核头文件的依赖。第二通过对 BPF 代码中的访问偏移量进行重写解决了不同内核版本中数据结构偏移量不同的问题。第三在 libbpf 中预定义不同内核版本中数据结构的修改解决了不同内核中数据结构不兼容的问题。第四在 libbpf 中提供一系列的内核特性探测库函数解决了 eBPF 程序在不同内核内版本中需要执行不同行为的问题。比如你可以用 bpf_core_type_exists() 和bpf_core_field_exists() 分别检查内核数据类型和成员变量是否存在也可以用类似 extern int LINUX_KERNEL_VERSION __kconfig 的方式查询内核的配置选项。 采用这些方法之后CO-RE 就使得 eBPF 程序可以在开发环境编译完成之后分发到不同版本内核的机器中运行并且也不再需要目标机器安装各种开发工具和内核头文件。所以Linux 内核社区更推荐所有开发者使用 CO-RE 和 libbpf 来构建 eBPF 程序。实际上如果你看过 BCC 的源代码你会发现 BCC 已经把很多工具都迁移到了 CO-RE。 eBPF多内核版本兼容详解 https://time.geekbang.org/column/article/534577BPF CO-RE reference guidehttps://nakryiko.com/posts/bpf-core-reference-guide/ bpf_loop() 辅助函数5.17 扩展的BPF虚拟机的主要特征之一是内置于内核的验证器它确保所有BPF程序都能安全运行。不过BPF开发者常常认为验证器有点喜忧参半虽然它能在很多问题发生之前抓住它们但它也很难让人满意。将其与一个善意但受规则约束且挑剔的官僚机构相提并论并不是完全错的。Joanne Koong提出的 bpf_loop() 建议是为了让一种类型的循环结构更容易取悦BPF的官僚们。 简而言之这就是Koong的补丁的目的。它增加了一个新的辅助函数可以从BPF代码中调用。 long bpf_loop(u32 iterations, long (*loop_fn)(u32 index, void *ctx),void *ctx, u64 flags);对 bpf_loop() 的调用将导致对 loop_fn() 的迭代调用迭代数和传入的 ctx 作为参数。flags 值目前未使用必须为零。loop_fn() 通常将返回0返回值为1将立即结束迭代。不允许有其他的返回值。 不像 bpf_for_each_map_elem() 受限于 bpf map 大小bpf_loop() 的循环次数高达 123 8388608超过 8 百万次大大地扩展了 bpf_loop() 的应用场景。不过bpf_loop() 并没有受限于 BPF 指令数1 百万条这是因为循环发生在 bpf_loop() 帮助函数内部。 A different approach to BPF loopshttps://lwn.net/Articles/877062/eBPF Talk: 实战经验之 loophttps://mp.weixin.qq.com/s/neOVsMNVWFbwpTSek-_YsA BPF_LINK_TYPE_KPROBE_MULTI5.18 这个补丁集增加了新的链接类型BPF_TRACE_KPROBE_MULTI它通过Masami制作的fprobe API [1]来连接kprobe程序。fprobe API允许一次在多个函数上附加探针速度非常快因为它工作在ftrace之上。另一方面它将探测点限制在函数入口或返回。 bpf: Add kprobe multi linkhttps://lwn.net/Articles/885811/ 动态指针和类型指针5.19 BPF程序中的所有内存访问都使用验证器进行安全性静态检查验证器在允许程序运行之前对其进行全面分析。虽然这允许 BPF 程序在内核空间中安全运行但它限制了该程序如何使用指针。直到最近一个这样的限制是在 BPF 程序中被指针引用的内存区域的大小必须在加载 BPF 程序时静态知道。Joanne Koong 最近设置的一个补丁集增强了 BPF以支持使用指向动态大小的内存区域的指针加载程序。 Koong 的补丁集增加了对访问 BPF 程序中动态大小的内存区域的支持其中包含一个名为 dynptrs 的新特性。dynptrs 背后的主要思想是将指向动态大小的数据区域的指针与验证器和一些 BPF 辅助函数使用的元数据相关联以确保对该区域的访问是有效的。Koong 的补丁集在一个新定义的类型中创建了这种关联称为struct bpf_dynptr。这种结构对 BPF 程序是不透明的。 https://mp.weixin.qq.com/s/rz4pd41Y-Cet5YVSAKmCRw USDT5.19 静态跟踪点tracepoint在用户空间也被称为 USDT用户静态定义的跟踪探针应用程序中感兴趣的特定位置跟踪器可以在此处挂载检查代码执行和数据。它们由开发人员在源代码中明确定义通常在编译时用 “–enable-trace” 等标志启用。静态跟踪点的优势在于它们不会经常变化开发人员通常会保持稳定的静态跟踪 ABI所以跟踪工具在不同的应用程序版本之间工作这很有用例如当升级 PostgreSQL 安装并遇到性能降低时。 eBPF 概述第 5 部分跟踪用户进程https://www.ebpf.top/post/ebpf-overview-part-5/Using user-space tracepoints with BPFhttps://lwn.net/Articles/753601/ bpf panic6.1 BPF子系统的关键卖点之一是加载BPF程序是安全的BPF验证器在允许加载之前确保该程序不会伤害内核。随着更多的功能被提供给BPF程序这种保证也许会失去一些力量但即便如此看到 Artem Savkov 的这个提议加入了一个明确设计为使系统崩溃的BPF助手可能会让人有点吃惊。如果这个补丁集以类似于目前的形式被合并它将是一个新时代的预兆即至少在某些情况下BPF程序被允许公开地进行破坏。 正如 Savkov 所指出的BPF 的主要用例之一是内核调试这项任务也经常因为存在一个适时的崩溃转储而得到帮助。通过使内核的panic() 函数对BPF程序可用Savkov试图将这两者结合起来允许BPF程序在检测到表明开发人员正在寻找的问题的条件时导致崩溃并创建崩溃转储。Savkov似乎不是唯一想要这种能力的人Jiri Olsa指出他也收到了关于这种功能的请求。 The BPF panic function: https://lwn.net/Articles/901284/ BPF 内存分配器、链表6.1 本系列介绍了用户定义的BPF对象在程序中的 BTF 类型。这允许BPF程序分配他们自己的对象建立他们的自己的对象层次并使用由BPF 运行时提供的基本构件来灵活地建立自己的数据结构。 然后我们介绍了对单一所有权BPF链表的支持。它可以放在BPF映射或分配的对象中并把这些被分配的对象作为元素。它作为一个侵入性的集合工作。这样做的目的是为了在将来使分配的对象成为多个数据结构的一部分。 这个补丁和未来补丁的最终目标是允许人们在 BPF C 中做一些有限的内核式编程并允许程序员灵活地从基本的构建块中灵活地构建自己的复杂数据结构。 关键的区别在于这种程序是经过验证的是安全的保存系统的运行时完整性并被证明是没有错误的 具体的功能包含 分配对象bpf_obj_new, bpf_obj_drop 来分配和释放对象单一所有权的BPF链表 在 BPF maps 中支持它们在分配的对象中支持它们 全局自旋锁。在被分配对象中的自旋锁。 参考https://lwn.net/Articles/914833/ user ring buffer 6.1 这个补丁集定义了一个新的映射类型BPF_MAP_TYPE_USER_RINGBUF它在一个环形缓冲器上提供了单用户空间生产者/单内核消费者的语义。 除了新的映射类型外还增加了一个名为bpf_user_ringbuf_drain()的辅助函数它允许BPF程序指定一个具有如下签名的回调样本由辅助函数发布到该回调。 voidstruct bpf_dynptr *dynptr, void *context。然后程序可以使用bpf_dynptr_read()或bpf_dynptr_data()辅助函数来安全地从dynptr中读取样本。目前没有可用的辅助函数来确定样本的大小但是如果需要的话可以很容易地添加一个。 libbpf 也添加了一些对应的 API: struct ring_buffer_user * ring_buffer_user__new(int map_fd,const struct ring_buffer_user_opts *opts); void ring_buffer_user__free(struct ring_buffer_user *rb); void *ring_buffer_user__reserve(struct ring_buffer_user *rb,uint32_t size); void *ring_buffer_user__poll(struct ring_buffer_user *rb, uint32_t size,int timeout_ms); void ring_buffer_user__discard(struct ring_buffer_user *rb, void *sample); void ring_buffer_user__submit(struct ring_buffer_user *rb, void *sample);bpf: Add user-space-publisher ring buffer map type https://lwn.net/Articles/907056/ 本文由 eunomia-bpf 团队完成我们正在探索 eBPF 和 WebAssembly 相互结合的工具链和运行时: https://github.com/eunomia-bpf/wasm-bpf以及在 Wasm 和 eBPF 之上尝试构建一些有趣的应用场景
http://www.w-s-a.com/news/612076/

相关文章:

  • 为什么打开网址都是站长工具开发一款网站需要多少钱
  • 做一个网站app需要多少钱分类信息网站建设计划
  • 怎样下载建设部网站建模培训
  • 北流网站建设制作旅游网站开发目的和目标
  • 网站公司怎么做的网站建设论文二稿
  • 网站建设服务商都有哪些html项目答辩
  • 网站上传到万网主机wordpress视频防盗链
  • 西安建设商城类网站广告设计公司文案
  • 如何建设好高校网站麻辣烫配方教授网站怎么做
  • 宁波网站建设计品牌推广策略分析
  • 网站自建设需要买什么时候开始深圳市建筑市场信息公开平台
  • 平台营销型网站建设小城镇建设的网站文献
  • 燕郊个人做网站小企业网站模板
  • 网站ip需要备案新开河街做网站公司
  • 网站定制设计方案wordpress批量传图片
  • 做外贸兼职的网站设计福州网站开发私人
  • 金华建站模板目前国内有哪些网站做家具回收
  • 个人做网站还是公众号赚钱好部门网站建设和维护
  • 系列图标设计网站推荐建商城网站
  • 中牟建设工程信息网站黑龙江 哈尔滨
  • 网站设计基本结构wap自助建论坛网站
  • 专业番禺网站建设爱做网站外国
  • 深圳罗湖网站设计公司价格制作网站的公司办什么营业执照
  • 长清网站建设价格群辉NAS搭建wordpress
  • 变更股东怎样在工商网站做公示网站建设和网站优化哪个更重要
  • 西安手机网站python网站开发效率
  • 深圳建站的公司羽毛球赛事2022直播
  • j2ee网站开发搜索推广的流程
  • 网站目录结构图虚拟主机如何安装WordPress
  • 信产部网站备案保定软件开发网站制作