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

《高效入门eBPF》直播背后的有趣故事

eBPF直播准备过程记录大家好,我是这次eBPF入门直播的讲解人,在陈老师的提议下,在这里和大家分享一下准备直播内容背后的故事。所以今天的这篇文字不讲解技术,是记录和分享。1从开始




eBPF直播准备过程记录




大家好,我是这次eBPF入门直播的讲解人,在陈老师的提议下,在这里和大家分享一下准备直播内容背后的故事。所以今天的这篇文字不讲解技术,是记录和分享。


1


从开始准备到直播,差不多不到4天时间,这段时间里我是属于一边学习eBPF一边准备ppt的状态,因为我自己也算是一个初学者。老师是星期三(2.3号)中午的时候,发消息问我是否可以准备一次关于eBPF的直播,并且要在3个平台进行直播,当时我又惊又喜。惊得是我之前从来没有做过直播,毫无经验可言,还有eBPF这个技术,我对它的学习只有之前写过代码BPF C代码和BCC脚本,没有深入学习过它的内部原理,而且有些概念也是模糊的,理解并不深刻,这相当于要从头开始认真的学习它。喜的是我认为这又是一次新的挑战,可以在这个过程中把eBPF原理搞懂,也锻炼一下。随后老师问我需要几天时间准备,我在脑海中大概的规划了一下,把时间拆成两块,学习eBPF原理和制作PPT,两天学习原理一天做PPT(后来实际上是在并发的执行了),所以我给老师说了需要3天时间准备。


老师中午说完直播的事情后,当天下午的时间我还没有正式开始准备。我去了解了一下高效率学习的一些方法,还有一些关于结构化思考的文章,这些对理解eBPF当然是没什么帮助的,但是我觉得高效率的学习工作应该是有一套方法论的,我也想借鉴其中的方法论来提高效率。事实上也证明,确实是有用的。


晚上时候我了解到一个日程管理软件Notion,所以我下载了它并学习如何使用它,接下来我就准备用它来规划学习。所以在晚上,我在上面写了第一个计划:了解Notion。了解也是为了后面高效的利用它。



对Notion使用熟悉了以后,后面准备的这几天里我都用Notion来做日程规划,这是到今天(2.8)已经做过的规划记录。



从第二天(2.4号)开始,我开始使用Notion来规划日程。今天做的事情不是很多,主要是自己的eBPF入门哈哈。



家里有一本《BPF之巅》,正好是放假回来买的。如果不是这次直播要学习eBPF,我也不知道我何时会翻开它哈哈。这本书巨厚,厚度和Linux经典巨著《深入Linux内核架构》相差无几。我想在这本书中找到入门eBPF的思路。这本书我是挑着看的,有时需要从前几页直接跳到最后的附录看。第一遍读后知道了一些BPF里面的术语概念,比如BPF程序、BPF指令集、BPF指令格式、BPF字节码、虚拟指令集规范、BPF虚拟机、BPF解释器、BPF加载器、BPF验证器等。理解了这些点,下一步就是要如何把这些点串起来,形成对BPF框架的理解。构建起框架后,再选择框架中的某个点深入。下午没有再看书,社区的公众号要推送直播消息,所以撰写了下文案,构思了下直播内容的大纲。


从三天(2.5号)开始差不多正式投入到学习eBPF。有了前面的一些eBPF技术术语后,我开始提出一些思考,我想从我最好奇的地方去理解eBPF的内部原理,比如eBPF这个词究竟代表的含义是什么,它在内核中怎么存在的,又是如何在内核中工作的?所以当天的日程规划也比较明确,就是把这3个问题搞清楚。



接着在搞清楚那两个问题的过程中,我也尝试把理解eBPF技术过程中的各个点梳理出来,穿成一条线,帮助新学习eBPF技术的同学可以清晰的了解学习路线。所以在随着不断查资料深入的过程中,eBPF技术原理路线也在不停的改,下面是中间不停变动的草稿。


第一版就是围绕最初的那几个问题,后面学到新的东西后不断扩充进来。



因为觉得第一版的草稿内容比较简单,所以第2版草稿中我去搜集了关于eBPF的面试题,想看看面试中有哪些问的深入的问题,跟着问题深入。但是关于eBPF的面试题很少,只找到了一个:BPF 和 eBPF 是什么原理?有什么好处?第一问正好已经包含了。然后我又把自己设想成面试官的身份,对自己提一些思考问题。



随着继续学习,我发现对于eBPF技术,有些是属于技术本身的核心原理,另外一些其实不能算是核心原理,比如eBPF的优势和局限性,起源和发展等等,如果揉在一起讲很难区分出重点。所以我想到利用二维坐标系来把它们区分开。纵轴代表深度,就是对eBPF技术原理理解越深越好;横轴代表广度,就是对eBPF技术知道越多越好,根据这样的思路,又重新制作了第3版草稿。



但是第3版在纵向排列上,只是把关于涉及eBPF技术的原理点罗列,更科学的逻辑应该是先有一个总体铺垫的过程,然后再逐个点深入,就像前面先了解eBPF技术的一些术语,然后搭建eBPF框架,再深入某个点一样。所以按照这个思路,重新设计了各个原理点的先后顺序,最终在第4版确定了下来。


第4版,最终版。



确定好了基本的eBPF讲解路线后,后面制作PPT就可以按照这个大纲来准备。


在第4天(2.6号),差不多算全力投入。在早上规划了当天的日程。



今天进行了大量思考,所以也把思考的其中一个过程记录下来。


学习eBPF的过程中,也在不断的思考和梳理,不好理解的逻辑就触类旁通,暂时模糊的地带就靠合理的分析推理,后面时间再去求证。eBPF有些术语听着很抽象,比如BPF字节码,我去查资料字节码是什么,然后了解到java字节码,java字节码被java虚拟机执行,我又去了解java虚拟机,最后梳理了java源程序经过编译器生成字节码,然后被java虚拟机解释执行的过程,我把BPF字节码、BPF虚拟机和java字节码、java虚拟机触类旁通,我觉的它们的实现思想是一致的。通过理解java编译到解释执行的工作原理,我终于有一种恍然大悟的感觉,第一次理解了为什么BPF指令要编译成BPF字节码,也清楚了BPF虚拟机存在的意义,不再仅仅是停留在知道有BPF字节码和BPF虚拟机这两个东西,而不清楚它俩的关系纽带。从外部看,BPF程序要被编译成字节码,BPF字节码是需要被BPF虚拟机解释执行。因为BPF虚拟机做的就是解释执行的工作,所以有些BPF文档里把虚拟机称为解释器也就可以理解了,比如不开启JIT就使用内核解释器来解释执行BPF字节码,这些内容可以串起来了。


这是站在虚拟机的角度来理解,如果进一步思考,我把它与处理器和机器码来对比理解。为了与虚拟机概念符合,就把真实的处理器叫做物理机吧。物理机执行机器码,那虚拟机也要执行自己的机器码,这个“机器码”就叫做字节码,可能也是为了区别于机器码的叫法,当然字节码也有自己的特点。机器码符合一定的CPU体系结构的指令集规范的,比如x86指令集和ARM指令集,那虚拟机顺理成章也应该有指令集规范,这就是指令格式,现在理解了为什么要定义那个bpf_insn结构体了,要用它来定义BPF指令格式。但是又会有新的思考,定义好这个有什么用呢,何时会用到呢?查资料了解到java的编译器可能就是按照java字节码格式来编译生成字节码的,所以BPF指令格式是为了告诉编译器按照什么规则来编译BPF指令以生成BPF字节码?然后内核解释器也按照这个格式规范来对BPF字节码解码执行?这些都是我不太肯定的点,但是如果从逻辑上分析一下,感觉也比较合理。然后因为时间比较紧,而且这些问题都是属于BPF内部原理之外的一些东西,BPF内部原理比如BPF程序如何被加载进内核,怎么被虚拟机执行的还没有搞清楚,所以没有花时间去求证。后面的学习就是深入eBPF的内部原理,阅读了几篇篇高质量的博客,其中一篇没有全部读完,只看了对于理解有帮助的部分,这里面包括一些对BPF源码分析的博客,加深了对eBPF内部实现的理解。也是在这些大牛的技术博客的帮助下,一点一点结合之前所有零碎的点进行整合理解,最后终于对整个eBPF的运作机制有了初步的全景图式理解。学习eBPF期间也在穿插的准备直播PPT的草稿版。


最后一天(2.7号)。今天要把PPT做完



计划预计上午做完,下午修改格式。本来想着修改好PPT的格式后自己预演一下,因为第一次直播还是有点紧张,所以想排练一下。结果直到下午七点半左右才把PPT做好,距离正式开讲只剩半个小时了,所以时间依然是很紧的。





下面是制作的PPT的其中几张





晚上直播完以后,我又回看了录屏,思考里面有问题的地方和可以改进的点。以上就是直播准备的过程,记录在这里和大家分享。


非常感谢老师提供的机会,非常感谢为这次直播做了大量准备工作的社区工作人员,同时非常感谢观看这次直播的小伙伴们,谢谢大家!



END



直播用的ppt扫描下方二维码即可获取




CSDN直播回放请点击阅读原文,或者关注B站“Linux内核之旅”也可以查看回放




推荐阅读
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文总结了淘淘商城项目的功能和架构,并介绍了传统架构中遇到的session共享问题及解决方法。淘淘商城是一个综合性的B2C平台,类似京东商城、天猫商城,会员可以在商城浏览商品、下订单,管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。商城的架构包括后台管理系统、前台系统、会员系统、订单系统、搜索系统和单点登录系统。在传统架构中,可以采用tomcat集群解决并发量高的问题,但由于session共享的限制,集群数量有限。本文探讨了如何解决session共享的问题。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
author-avatar
EGO-Underwear
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有