热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用ChatGPT,通过自然语言编写eBPF程序和追踪Linux系统

eBPF是一项革命性的技术,起源于Linux内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核

eBPF 是一项革命性的技术,起源于 Linux 内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核的源代码或加载内核模块。今天,eBPF被广泛用于各类场景:在现代数据中心和云原生环境中,可以提供高性能的网络包处理和负载均衡;以非常低的资源开销,做到对多种细粒度指标的可观测性,帮助应用程序开发人员跟踪应用程序,为性能故障排除提供洞察力;保障应用程序和容器运行时的安全执行,等等。eBPF 已经成为了一个越来越受欢迎的技术,它可以帮助我们更加高效地对内核和用户态的几乎所有应用进行追踪和分析。

但是,eBPF 的开发,或者追踪内核产生的各类事件,需要一定的专业知识,对于一些不熟悉该技术的开发人员来说,可能会有一定的困难。这时,我们的 demo 工具 GPTtrace 所带来的一些新的思路,也许就可以帮助你解决这个问题。它使用 ChatGPT ,通过自然语言编写 eBPF 程序和追踪 Linux 内核:https://github.com/eunomia-bpf/GPTtrace

如果你是一名开发人员,想要更加高效地进行追踪和分析,那么类似的方案绝对值得尝试:这种 ChatGPT 和 eBPF 技术的结合将在未来的软件开发、调试、以及可观测性场景中发挥更加重要的作用,同时它可能也会带来一种全新的、交互式地学习范式。

我们做了哪些尝试?

GPTtrace 使用 ChatGPT 技术,允许开发人员通过自然语言编写 eBPF 程序和追踪 Linux 内核,无需事先了解该技术的专业知识。它使得开发人员可以更快、更准确地定位和解决软件中的问题。例如,根据进程名称统计 Page Faults 次数:

请添加图片描述

我们还有一个视频演示与讲解,可以在这里观看:https://www.bilibili.com/video/BV1oM411J7gp/

我们是怎样做到的?

我们目前的思路是通过预训练 eBPF 程序,让 ChatGPT 学会如何编写各种 eBPF 程序或 bpftrace 的 DSL。大概分为这几步:

  1. 预训练 ebpf 程序,利用一些 ebpf 的开发资料,先和 ChatGPT 对话多次,让 ChatGPT 通过对话上下文如何写各种 eBPF 程序或者 bpftrace 的 DSL(其实我们在十二月份就做过一些类似的实践,产出了一份教程文档,但没有把它变成一份工具:https://github.com/eunomia-bpf/bpf-developer-tutorial);
  2. 调用 ChatGPT api,并把返回的结果解析之后作为命令输入 shell 执行,或者将 eBPF 程序写到文件里面编译运行
  3. 如果编译和加载报错,把对应的报错信息返回给 ChatGPT,让它再生成一个新的 eBPF 程序或者命令

我们使用了 ChatGPT 的 Python API,花了一个下午简单实现了这个小玩具,它可以使用中文或者英文等多种语言输入任意自然语言的描述,例如 “追踪进程打开的文件” “Show per-second syscall rates” 等等,正确率不是 100%,不过十次里面大概已经可以有七八次可以正确进行追踪了,遇到报错还会自行进行修正和调整。

进一步的优化?

这个玩具项目本身只是想展示一下可能性,很快应该会有更好的类似 ChatGPT 这样的的 api,和更通用的训练/执行框架出来的,希望它能起到抛砖引玉的效果。目前看起来还有很多可以优化的空间:

  1. 能联网搜索之后,让这个工具去获取 bcc/bpftrace 仓库里面的示例程序学习,效果应该还会好很多;
  2. 或者让这个应用自己能联网搜索 Stack Overflow 之类的结果,查询如何编写 eBPF 程序,类似新 Bing 的搜索方式;
  3. 提供更多高质量的文档和教程,看起来输出的准确度和教程、代码示例的质量密切相关;
  4. 其实还可以多次调用其他工具执行命令返回结果,比如说 ChatGPT 输出命令,用 bpftrace 查询一下当前内核版本和支持的 tracepoint,然后返回输出(这也是一次对话),再给出程序,效果应该还要好不少

短期来看,我们希望尝试基于这个工具构建一个交互式的、带有提示的内核追踪工具和学习 eBPF 程序的教程,帮助用户在编写 eBPF 程序时更快地了解语法和调试错误,并且可以根据用户的反馈调整提示和建议的质量;以及提供一个结构化的学习 eBPF 程序的教程,从基础的语法和 API 开始,结合通过用户最终想编写的 eBPF 程序的需求,逐步向用户介绍常用的 eBPF 应用场景和编写技巧。

某种意义上来说,它甚至可以不仅仅是一种语言模型,借助简单的对话的交互模式,以及能操控各类工具、访问网络的手段,它也许可以起到一个巨大的、前无古人的知识库的作用:连接各行各业,根据自然语言输入而非关键词,给出综合概括的、无法被搜索引擎简单获取到的思考和答案。

在当今信息爆炸的时代,我们可以轻易地获得各种海量的信息,但这也带来了另一个问题,就是信息的分散和碎片化,很难将这些信息整合起来,形成有价值的知识。而 ChatGPT 可以通过自然语言交互的方式,将各种信息和知识整合起来,乃至主动去获取知识和接收反馈(就像我们在 GPTtrace 中做的一样),形成一个巨大的知识库,为人们提供综合的思考和答案。

这种方式可以连接各行各业,不受特定领域或行业的限制,根据自然语言输入而非关键词,给出更加准确、综合的概括。此外,由于 ChatGPT 可以操控各类工具和访问网络,它可以更加深入地了解各种知识和信息,并为用户提供更加全面和深入的解答。

这种革命性的变化可能已经站在人类文明变革的前夜,我们获取知识和思考的方式将被颠覆,类似的大模型的出现将成为这个变革的重要推手。

未来在何方?

其实这个模型本身的效果,并不算惊艳,甚至可以说还有非常多的成长空间。对于我这样的非 AI 专业研究人员(AI工具和模型的消费者)来说,和传统的训练深度学习模型的方式比起来:

  • 训练模型不需要整理数据集和清洗数据集,仅仅需要几篇高质量的文档和教程,数量非常少,使用自然语言描述即可;极大地减少了非专业人士的准备工作;
  • 只需要对话上下文即可直观和方便地进行训练,任何人都可以轻松理解(或者尝试类比)AI 是怎么进行学习的;
  • 可以适应非常多种不同领域的任务,只要任何任务能被转换成一段文本或指令;

正如哈尔滨工业大学车万翔先生在青源Workshop中提及的,ChatGPT 时代,NLPer 的危与机中所说的那样:

ChatGPT时代,为了应对当前的挑战,自然语言领域的研究者可以借鉴信息检索研究者的经验。首先,学术界可能不再进行系统级别的研究,主要集中在相对边缘的研究方向上;其次,使用工业界巨头提供的数据进行实验,并不一定能得出可靠的结论,由于存在隐私问题,数据的真实性存疑;通过调用公司提供的 API 进行研究,一旦模型被调整,其结论有可能也会改变。

当使用 AI 解决特定问题的门槛变得足够的低廉,反而是 AI 更进一步普及、更进一步解决更多细分场景下的问题的巨大机会。另一方面可能是支撑 AI 的基础设施:当生成的内容(例如代码,文本,算法,音频视频)的成本变得更廉价,也许可编程、低代码的平台也会变得相对原先巨大的单体应用来说,变得更加具有可扩展性和可复用性。例如,从一段描述或交互式地对话中直接生成一个 FaaS 的接口发布,直接生成一个网页前端并部署,或使用 ChatGPT 生成的代码直接作为可观测的采集和数据处理程序,部署到大型的可观测性平台中。

我们现在也在探索一些 eBPF 和 Wasm 结合的编译工具链和运行时,希望实现从内核态到用户态的可编程扩展效果:https://github.com/eunomia-bpf/wasm-bpf

一些参考链接


  • ChatGPT:https://chat.openai.com/chat
  • GPTtrace:https://github.com/eunomia-bpf/GPTtrace
  • ChatGPT Python API: https://github.com/mmabrouk/chatgpt-wrapper
  • 基于 CO-RE (一次编写,到处运行) libbpf 的 eBPF 开发者教程:通过 20 个小工具一步步学习 eBPF(尝试教会 ChatGPT 编写 eBPF 程序):https://github.com/eunomia-bpf/bpf-developer-tutorial
  • ChatGPT类工具如何实现「降维打击」| 聊天机器人闭门研讨观点总结:https://mp.weixin.qq.com/s/fB9rguy26ej-alm7l_i8iQ
  • eunomia-bpf 开源社区:https://github.com/eunomia-bpf

注:本文使用 ChatGPT 进行辅助写作完成。







推荐阅读
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 在本地环境中调试远程服务器上的网站代码执行问题,可以通过以下步骤实现:首先,在本地安装 Visual Studio 并配置远程调试工具。接着,确保服务器和本地机器之间的网络连接畅通,并正确设置防火墙规则以允许调试流量。最后,使用 Visual Studio 的远程调试功能连接到服务器,进行代码调试。这种方法不仅提高了开发效率,还减少了在服务器上直接操作的风险。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 近期,有同事希望下载网络上的一些有趣视频用于个人用途,但在尝试过程中遇到了下载难题。通过使用Chrome开发者工具检查网络请求后,发现视频并非以常见的MP4格式提供,而是通过多个TS片段进行流式传输。为了高效地批量下载这些TS文件,可以利用FFmpeg这一强大的多媒体处理工具,实现自动化下载和合并,从而轻松获取完整的视频内容。 ... [详细]
author-avatar
我是黄小果1960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有