BPF的可移植性和CO-RE (Compile Once – Run Everywhere) 在上一篇文章中介绍了提高socket性能的几个socket选项,其中给出了几个源于内核源码树中的例子,如果选择使用内核树中的Makefile进行编译的话,可能会出现与本地头文件冲突的情况,如重复定义变量,结构体类型不对等错误.这些问题大大影响了BPF程序的可移植性. 本文将介绍BPF可移植性存在的问题,以及如何使用BPF CO-RE(Compile Once – Run Everywhere)解决这些问…
BPF CO-RE 示例代码解析 在BPF的可移植性和CO-RE一文的末尾提到了一个名为runqslower的工具,该工具用于展示在CPU run队列中停留的时间大于某一值的任务.现在以该工具来展示如何使用BPF CO-RE. 目录 BPF CO-RE 示例代码解析 环境 编译 运行 代码解析 内核空间(BPF)代码 用户空间代码 TIPs 总结 参考 环境 本地测试的话,建议采用Ubuntu,其内核本身已经开启了BTF选项,无需再对内核进行编译.我用的是Ubuntu 20.10,内核版本5.8…
本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基于 Ruby,主要以命令行的方式运行.Vagrant 由 HashiCorp 官方出品,相信提到大名鼎鼎的 HashiCorp 公司,大家还能够联想到著名的安全密码存储 Valut.服务注册发现 Consul.大规模调度系统 Normad 等等. Vagrant 可基于官方提供的各种虚拟机打包文件(…
BCC和libbpf的转换 本文讲述如何将基于BCC的BPF应用转换为libbpf + BPF CO-RE.BPF CO-RE可以参见上一篇博文. 为什么是libbpf和BPF CO-RE? 历史上,当需要开发一个BPF应用时可以选择BCC 框架,在实现各种用于Tracepoints的BPF程序时需要将BPF程序加载到内核中.BCC提供了内置的Clang编译器,可以在运行时编译BPF代码,并将其定制为符合特定主机内核的程序.这是在不断变化的内核内部下开发可维护的BPF应用程序的唯一方法.在BPF…
学习Golang书籍&资料: 1. The Go Programming Language Specification:  http://golang.org/ref/spec 2. How to Write Go Code: http://golang.org/doc/code.html 3. Effective Go: http://golang.org/doc/effective_go.html 4. Go语言编程.pdf 5. Go语言程序设计.pdf 6. 学习GO语言.pdf 7.…
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经写了一些Java程序.之前的每个Java程序都被保存为一个文件,比如Test.java.随后,该程序被编译为Test.class.我们最终使用$java Test来运行程序. 然而,在一个正常的Java项目中,我们往往需要编写不止一个.java程序,最终的Java产品包括了所有的Java程序.因此,Java需要解决组织Java程序的问题.包(package)的目的就是为了…
包(package)的目的就是为了更好的组织Java程序.   包的建立 包的建立非常简单.我们只用在Java程序的开始加入package就可以了.我们以Human类为例,将它放入包中: package com.vamei.society; public class Human{    /**     * constructor     */    public Human(int h){        this.height = h;        System.out.println("I'…
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经写了一些Java程序.之前的每个Java程序都被保存为一个文件,比如Test.java.随后,该程序被编译为Test.class.我们最终使用$java Test来运行程序. 然而,在一个正常的Java项目中,我们往往需要编写不止一个.java程序,最终的Java产品包括了所有的Java程序.因此,Java需要解决组织Java程序的问题.包(package)的目的就是为了…
本文为转载,阅读不友好,请先查看原文:https://blog.gmem.cc/cmake-study-note 收下为原文内容================> 基础知识 CMake简介 CMake是一个开源的可扩展工具,用于独立于编译器的管理构建过程.CMake必须和本地构建系统联合使用,在每个源码目录中,需要编写CMakeLists.txt文件,以声明如何生成标准的构建文件(例如GNU Make的Makefiles,或者MSVS的解决方案). CMake支持所有平台的内部构建(in-sou…
准备校招面试之Java篇 一. Java SE 部分 1.1 Java基础 1. 请你解释Object若不重写hashCode()的话,hashCode()如何计算出来的? Object 的 hashcode 方法是本地方法,也就是用 c 语言或 c++ 实现的,该方法直接返回对象的 内存地址. 2. 请你解释为什么重写equals还要重写hashcode? HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hash…