分类 system 中的文章

一道思考题所引起动态跟踪 ‘学案’

本文地址:https://www.ebpf.top/post/ftrace_kernel_dynamic 1. 基础知识 1.1 默认编译 1.2 使用 -pg 选项 1.3 使用 -pg 和 -mfentry 选项 1.4 对内核进行验证 2. ftrace 中 kprobe 跟踪机制验证 3. 使用内核模块进行验证 3.1 使用 kallsyms_lookup_name 方式获取 3.2 直接使用内核函数地址(踩坑笔记,可跳过) 4. 使用 gdb + qemu……

阅读全文

Ubuntu 21.10 安装调试符号

本文地址:https://www.ebpf.top/post/ubuntu-21-10-dbgsym 1. 背景 2. 手动搜索下载安装 3. 使用第三方源安装 步骤 1:GPG 秘钥导入 步骤 2:添加仓库配置 步骤 3:更新安装包 步骤 4:安装调试符号包 步骤 5: 验证符号包已经成功安装 4. 源码安装及关联 5. 最终调测……

阅读全文

基于 Ubuntu 21.04 BPF 开发环境全攻略

本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基于 Ruby,主要以命令行的方式运行。Vagrant 由 HashiCorp 官方出品,相信提到大名鼎鼎的 HashiCorp 公司,大家还能够联想到著名的安全密码存……

阅读全文

VirtualBox VM 空间瘦身记(vmdk)

本文地址:https://www.ebpf.top/post/shrink_vbox_vmdk_size 在使用 VirtualBox( VMDK 模式)管理虚拟机的时候,我们经常会遇到一些编译安装场景(比如编译 Linux 内核),会导致磁盘空间急剧膨胀,但是在编译完成后即使我们删除了相关的文件,在 VM 虚……

阅读全文

Ubuntu 20.04 Kdump + Crash 初体验

1. Kdump 工作原理介绍 内核崩溃转储指的是在内核异常情况时,将 RAM 中部分内容进行转储到磁盘或者其他存储中。当内核发生 panic 时,内核依靠 kexec 机制在预先保留的内存区域快速重启一个新的内核实例,预留内存区域大小可通过内核启动参数 crashkernel 指定。 为了实现 “双内核” 布局,Kdump 在内核崩溃后立即使用 kexec 引导到转储……

阅读全文

来来,让我看看你究竟在干什么?

1. 系统的线程栈跟踪(内核) 在某些特殊场景中,我们可能会遇到偶发系统内核 CPU 抖动,这时候我们可能需要知晓动时刻内核中的所有运行任务的一个快照,这种场景下 sysrq 可以完全满足我们的需求。 如果只是需要分析系统的热点路径,perf 会是一个比较好的选择。 1.1 sysrq 是什么? sysrq 代表的是 Magic System Request Key。开启了该……

阅读全文

Linux 进程管理

本文是技术团队内部分享的版本,目的是通过进程管理及调度器历史对于 Linux 进程管理的演进过程起到一个总览的作用,完整的 PDF 可以在这里 下载。水平有限,本文内容仅供参考,有错误欢迎指正。 1. 基础知识 进程类型 实时进程 非实时进程 CPU 资源占用类型 CPU 消耗性 (CPU-Bound) I/O 消耗性 (IO-Bound)……

阅读全文

使用 GDB + Qemu 调试 Linux 内核

1. 概述 在某些情况下,我们需要对于内核中的流程进行分析,虽然通过 BPF 的技术可以对于函数传入的参数和返回结果进行展示,但是在流程的调试上还是不如直接 GDB 单步调试来的直接。本文采用的编译方式如下,在一台 16 核 CentOS 7.7 的机器上进行内核源码相关的编译(主要是考虑编译效率),调试则是基于 VirtualBox 的 Ubuntu 20.04 系统中……

阅读全文

kpatch 热修 ipvs estimation_timer 内核延时问题

1. kpatch 是什么? livepatch 实时或动态内核修补允许为正在运行的内核提供功能增强,无需重新启动系统,这对于某些在线系统修复安全漏洞非常有帮助。 Kpatch 是给 Linux 内核 livepatch 的工具,由 Redhat 公司出品。最早出现的打热补丁工具是 Ksplice。但是 Ksplice 被 Oracle 收购后,一些发行版生产商就不得不开发自己的热补丁工具,分别是 Redhat 的 Kpatch 和……

阅读全文