作者回复: 1. 谢谢指出,已经修复了。 2. 是的,但我们专栏还是希望使用新版本的内核来学习,这样一方面能体验最新的特性,另一方面不需要等后面需要用到新特性的时候再重新配置开发环境。
作者回复: 太赞了👍 感谢分享追踪文件打开的这些应用场景
作者回复: 👍谢谢分享!我通常还是使用虚拟机作为开发环境,只在部署的时候才用容器。
作者回复: 对大部分应用来说,性能损失基本可以忽略。但如果应用对性能有比较极致的敏感,比如到了纳秒或者指令集,那就需要考虑eBPF的性能损耗了。 给你分享一个eBPF性能评估的演讲,希望有所帮助:https://ebpf.io/summit-2020-slides/eBPF_Summit_2020-Lightning-Bryce_Kahle-How_and_When_You_Should_Measure_CPU_Overhead_of_eBPF_Programs.pdf。
作者回复: 这些参数都是由BCC框架默认提供的,不需要使用的时候再额外传入。
作者回复: 看来你已经对BCC比较熟悉了😊
作者回复: 1. 每个系统调用在内核中都有类似 sys_xxx 的实现函数,我们后面课程会讲到怎么查询内核中的跟踪点,根据名字去过滤就可以找到实现函数的名字。当然,如果你要看具体的实现步骤,就得需要去看看内核的源码了。 2. 没有固定的格式,这个数据结构其实就是你想在用户态中获取的数据,不同的程序需要的数据是不同的。
作者回复: 嗯,碰到这种问题最好的方法是去查man手册。比如,你可以在 https://man7.org/linux/man-pages/man2/openat2.2.html#VERSIONS 看到,openat2 是 5.6 内核才支持的。所以,对旧的内核来说,就需要替换成 openat 系统调用。
作者回复: 这个时候就需要去看文档了。比如前两个问题的答案都在 https://github.com/iovisor/bcc/blob/23a21423a31719bd79e9e975b8f6dca8f7a331e5/docs/reference_guide.md#2-open_perf_buffer: https://github.com/iovisor/bcc/blob/23a21423a31719bd79e9e975b8f6dca8f7a331e5/docs/reference_guide.md#2-open_perf_buffer 对于CO-RE的原理,可以看一下 https://nakryiko.com/posts/bpf-core-reference-guide/
作者回复: 嗯,碰到这种问题最好的方法是去查man手册。比如,你可以在 https://man7.org/linux/man-pages/man2/openat2.2.html#VERSIONS 看到,openat2 是 5.6 内核才支持的。所以,对旧的内核来说,就需要替换成 openat 系统调用(我们课程推荐使用新一些的内核,这样可以体验最新的eBPF特性,所以还是继续使用openat2作为示例)。