前言我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。...与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。...内核探针 kprobes内核探针可以跟踪大多数内核函数,并且系统损耗最小。当跟踪的内核函数被调用时,附加到探针的BPF代码将被执行,之后内核将恢复正常模式。...print_functionfrom bcc import BPFfrom time import sleep# define BPF programbpf_program = """#include linux.../traceing/events目录中:图片使用命令perf list 也可以列出可使用的tracepoint点:图片对于bcc程序来说,以监控kfree_skb为例,tracepoint程序可以这样写:
前言 我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。...与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。...对于bcc程序来说,以监控kfree_skb为例,tracepoint程序可以这样写: b.attach_tracepoint(tp="skb:kfree_skb", fn_name="trace_kfree_skb...master/INSTALL.md bcc程序编写指导手册 https://github.com/iovisor/bcc/blob/master/docs/reference_guide.md 参考书《Linux...内核观测技术 BPF》 本文来源于陈莉君老师“Linux内核之旅”。
前言:之前的文章介绍了基于 tracepoint 静态追踪技术的实现,本文再介绍基于 kprobe 的动态追踪即使的实现。同样,动态追踪也是排查问题的利器。...kprobe 是内核提供的动态追踪技术机制,它允许动态安装内核模块的方式安装系统钩子,非常强大。下面先看一个内核中的例子。...#include linux/kernel.h>#include linux/module.h>#include linux/kprobes.h> #define MAX_SYMBOL_LEN...,等到函数执行完后,弹出返回地址时,就会执行内核 hack 的代码,从而执行我们的钩子,执行完后再跳回到真正的返回地址继续执行。...总结:内核通过劫持的方式实现了 kprobe,基于 kprobe 的动态追踪技术可谓是非常复杂而强大,我们可以利用这个机制,动态修改逻辑,收集信息。
而这些方向往往都涉及到底层的东西,所以就自然需要去了解内核提供的一些技术,内核提供的能力,经过多年的发展,可谓是百花齐放,而且非常复杂。本文简单分享一下内核的静态追踪技术的实现。...不过和打日志不一样的是,我们想在哪里打就在哪里加对应的代码,而 Tracepoints 则几乎是依赖于内核决定哪里可以插桩,说几乎是因为我们也可以写内核模块注册到内核来通知插桩点。...2 trace event 有了 Tracepoint 机制后,我们就可以写模块加载到内核中实现自己的插桩点。但是内核也为我们内置提供了非常多的插桩点。具体是通过 trace event 来实现的。...我们可以看到插桩的这种机制是一种静态的机制,我们通常需要依赖当前版本的内核所支持的桩,从而获得对应的信息,但其实内核也提供了动态追踪的能力,可以实现热插拔获取信息的能力。...总的来说,Linux 下的追踪技术多种多样,虽然非常复杂,但是上层也提供了各种更方便的工具,这些能力是我们深入排查问题的利器。
一、前言 ● 随机写会导致磁头不停地换道,造成效率的极大降低;顺序写磁头几乎不用换道,或者换道的时间很短 ● 本文来讨论一下两者具体的差别以及相应的内核调用 二、环境准备 组件 版本 OS Ubuntu...1)同步随机写 主要采用fio作为测试工具,为了能够看到系统调用,使用strace工具,命令看起来是这样 先来测试一个随机写 strace -f -tt -o /tmp/randwrite.log...sda: ios=0/262162, merge=0/10, ticks=0/6948, in_queue=6932, util=46.49% 可以看到: 吞吐量提升至70M左右 再来看一下内核调用:...util=74.32% 可以看到,slat指标出现,lat 近似等于 slat + clat 之和(avg平均值);并且换成异步io之后,吞吐量得到了极大的提升,120M左右 六、总结 ● fio应该作为磁盘的...baseline工具,拿到机器(物理机或者云机器)都应该第一时间对机器的磁盘做一个基线测试,做到心中有数 ● 本文所有的测试,都是绕开了缓存,在实际应用中需要将缓存的影响考虑进去
1、trace、trace-cmd 2、BPF、eBPF https://github.com/iovisor/bcc 3、perf 4、SystemT...
背景| Linux 内核模块 Linux 内核模块在概念和原理层面与动态链接模块(DLL或so)类似。...但对于 Linux 来说,内核模块可以在系统运行期间动态扩展系统功能,而无须重新启动系统,更无须重新编译新的系统内核镜像。...正是因为内核模块这种机制,方便了Linux 贡献者选择设备驱动成为进入 Linux 复杂系统的一个入口点,而不会被 Linux 代码的复杂性而压倒。...也正是因为内核模块这个特点,Rust for Linux 项目的目标就是让 Rust 成为Linux内核模块开发的第二语言。...通常是可以驻有文件系统的设备(比如磁盘),和字符设备类似,但块设备有一个请求缓冲区,因此它们可以选择响应请求的最佳顺序。 网络设备。通常是指能与其他主机交换数据的设备。
,如果内核模块的代码写的有问题,会直接导致内核 crash,在生产环境上使用内核模块需要谨慎考虑。...随着 Linux 追踪技术的发展,TraceFS 文件系统也成为了追踪系统的基础设施,很多跟踪工具都使用 TraceFS 作为管理接口,比如 Perf、LTTng 等。...handler 固定是 uprobe_dispatcher 函数,uprobe_dispatcher 函数会根据 uprobe event 的 flag 属性来判断往哪个 ring buffer 里写追踪数据...话说回 Linux 追踪技术。...应该选择哪个内核追踪技术?
场景二:内核模块Bug 在文件系统处理文件需要的信息都存放在索引节点(inode)中,如果在删除文件的时候索引节点的引用计数不为0(表示文件正在被使用),则不会在磁盘中真正的删除文件,从而保证正在使用此文件的进程能够正常的处理文件...首先我们一起来看一下内核中关于文件系统的一些关键数据结构的关联,当一个进程打开一个文件后,便会在内核中创建一个file对象,这个对象主要描述了进程如何与文件进行交互。...当多个进程打开同一个文件时,内核中变会创建相应的file对象,但是他们都公用同一个dentry,只不过每一次打开文件dentry的引用计数d_count加1。...这次客户在删除文件后,磁盘空间没有释放,通过"lsof"命令也没有找到正在占用此文件的进程。于是再次怀疑这是由于产品的内核模块早成的。...后经分析得到:在上一篇博文《Linux Kernel模块内存泄露查找 (2)》中解释过由于在产品内核模块中,对dentry引用,并使用完之后并没有对其引用计数减1,从而造成内存泄露。
在一个结构体中定义各连续的寄存器(每个寄存器占四个字节),然后将offset 首地址ioremap,得到的地址传给结构体指针。然后操作寄存器的时候,就操作结...
作者简介 韩传华,就职于国内一家半导体公司,主要从事linux相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,乐于分享喜欢学习,喜欢专研Linux内核源代码。...写时复制技术(一下简称COW)是linux内核比较重要的一种机制,我们都知道:父进程fork子进程的时候,子进程会和父进程会以只读的方式共享所有私有的可写页,当有一方将要写的时候会发生COW缺页异常。...那么究竟COW在linux内核中是如何触发?又是如何处理的呢?我们将在本文中以源代码情景分析的方式来解读神秘的写时COW,从源代码级别的角度彻底理解它。...需要说明的是:本文中所分析的内核源码时linux-5.0版本内核,使用arm64处理器架构,当然此文章发布时linux内核已经是linux-5.8.x,当你查看最新的内核源码的时候会发现变化并不是很大。...本文主要会从下面几个方面去分析讨论写时复制: 1.fork子进程时内核为COW做了哪些准备 2.COW进程是如何触发的 3.内核时怎样处理COW这种缺页异常的 4.匿名页的reuse 一,从fork说起
Linux磁盘-小结 总结 1.通过前面我们对磁盘的介绍,我们初步掌握了在Liunx服务器里面,如何让一个磁盘为我所用。...2.在日常运维使用中,掌握磁盘的使用情况,并根据磁盘在实际使用的情况进行调整。 3.文字描述部分大部分是基于GPT生成的,但是比较重要或者经常遇到的问题都用红色进行标注。...4.磁盘使用满,虽然这个是最常见的问题,但是在排查问题的时候往往会被忽略,可以养成一个习惯,如果服务器有异常可以先检查磁盘情况。...6.如果你致力学习Linux,希望你把这些命令多多练习,不要让它只是只成为你保存的记录和文档。 磁盘讲完以后,会讲讲Linux基本的网络操作命令,敬请期待。
系统成为只读,重启后报:/dev/VolGroup00/LogVol00:UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 出现这样的问题需要使用fsck命令扫描修复磁盘...扫描前最好通过其他方法将能备份出来的数据备份出来,以防fsck将文件扫描损坏) 解决以上问题的方法: 1、使用光盘启动,进入救援模式 1.1、将bios调整为光盘启动模式 1.2、光盘启动进入救援模式: 输入 linux
又因为限制内存,所以直观的想法是直接 Direct IO, 但 Direct IO 能否跑满磁盘 IO 呢?...机器配置 CPU: 64 核 Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz 磁盘 : Intel Optane SSD 测试磁盘 IO 性能 官方称读 / 写带宽是...2566MiB/s (2691MB/s), 2566MiB/s-2566MiB/s (2691MB/s-2691MB/s), io=8192MiB (8590MB), run=3192-3192msec 顺序写性能...通过数据我们发现,单次 4k 的 Direct IO 写入无法跑满磁盘的 I/O 带宽,仅仅只有 800MB/S 实验三: mmap 写入 通过前面这两个实验我们发现,Buffer IO 是可以跑满磁盘...(关于 mmap() 的源码分析,我们在后面的文章会详细分析 ),我们实验三的思路是: 首先 fallocate 一个大文件,然后 mmap() 内存映射 16k 的 Block, memcpy() 写满之后
文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用
文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;
Linux磁盘涉及到的命令不是很多,但是在实际运维中的作用却很大,因为Linux系统及业务都会承载到硬盘上。如果磁盘使用和配置不合理,可能会引起系统无法启动或者业务系统无法提供预期的服务。...主要从以下几个方面来介绍: 1.分区介绍 2.创建分区 3.MBR&GPT 4.格式化&挂载 5.inode&硬连接 6.磁盘操作命令(本章节) 7.小结 df 命令 df 命令(磁盘空间使用情况查询)...是一个常用于查看文件系统磁盘空间使用情况的命令。...du 命令 du 命令用于查看目录或文件的磁盘使用情况,即显示指定路径下文件和目录的磁盘使用量。它可以帮助你快速了解文件或目录占用的存储空间大小。...注意事项 du 命令计算磁盘使用量时,默认只统计文件的物理大小,而不包括间接块、块大小或磁盘分配的大小。 使用 -h 选项可以更方便地查看磁盘使用情况,以人类可读的格式显示。
用Rust写Linux内核 Rust 作为第二语言被引入 Linux 内核,虽然目前是实验性质,但对每一个 Rustaceans 来说都是一件值得关注的大事。...本文通过编写一个简单的字符设备驱动,带领我们了解如何通过 Rust 为 Linux 编写内核模块。...这是一个适用于 Linux 和 Windows 的软件键盘重映射器。功能概述: 跨平台宜人的配置文件。 多层按键功能。 高级按键定制。...jtroo/kanata/blob/main/docs/design.md GitHub:https://github.com/jtroo/kanata boson-lang:用Rust写个语言 Rust 写的解释型
内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...Linux内核的有哪些组成部分? 进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC) Linux内核的的组成部分之间有什么关系?...Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则。 配置文件(Kconfig):给用户提供配置选择的功能。...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写的源代码复制到Linux 内核源代码的相应目录。...次引导加载程序加载Linux内核和可选的初始RAM 磁盘,将控制权交给Linux内核源代码。 运行被加载的内核,并启动用户空间应用程序。
我们无法确定RUST在内核的最终趋势,有多少人愿意迁移,但是至少Linus愿意试水。.../ 这里我们只摘录一小部分比对,比如C版本中断服务程序: 对应的RUST中断服务程序: 比如C版本的amba_driver: RUST版本的amba_driver: 你愿意迁移到RUST写内核代码吗
领取专属 10元无门槛券
手把手带您无忧上云