Linux 调试之动态打印 [toc] 一、概述在 kernel 驱动代码中,使用动态输出是系统内核调试的重要手段之一,printk 打印是全局的,只能设置输出等级,而且使用 printk 每次都要重新编译内核,很不方便。。而动态输出可以在不需要重新编译内核的情况下,方便的打印出内核的 debug 信息。动态输出可以动态选择打开某个内核子系统的输出,可以有选择性地打开某些模块的输出,printk 被 dev_info,de 2024-08-08 Linux > 性能优化/调试 #Linux #性能优化/调试
Linux 下查看 CPU 使用率 [toc] CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查性能问题时,通常会关注的第一个指标。 一、什么是 CPU 使用率Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。 为了维护 CPU 时间, Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Ji 2024-08-07 Linux > 性能优化/调试 #Linux #Linux 命令 #性能优化/调试
Linux 利用 ftrace 分析内核调用 [toc] 一、概述在 Linux 中,ftrace 是一种用于跟踪内核函数调用和事件的工具。它是一个功能强大的跟踪框架,可用于分析和调试内核性能问题。 ftrace 提供了多种功能,包括函数跟踪、事件记录和性能分析等。它能够记录函数的调用和返回信息,以及函数执行的路径和时间。通过跟踪这些信息,我们可以了解到内核函数的执行情况,从而定位和解决性能问题。 ftrace 使用了内核中的一些机制来实现 2024-08-07 Linux > 性能优化/调试 #Linux #Linux 命令 #性能优化/调试
Linux 中 core dump 异常的分析 [toc] 一、概述 在 UNIX 系统中,常将“主内存称为核心(core),因为在使用半导体作为内存材料之前,便是使用核心(core)。而核心映像(core image)就是 “进程”(process)执行当时的内存内容。当进程发生错误或收到 “信号”(signal)而终止执行时,系统会将核心映像写入一个文件,以作为调试之用,这就是所谓的核心转储(core dump)。 Core dump 2024-08-06 Linux > 性能优化/调试 #Linux #Linux 命令 #调试
Linux 利用 iostat 和 iotop 进行 IO 分析 @toc 一、概述在Linux 系统上,iostat 和 iotop 这两个 IO 数据工具非常常用。它们都是性能分析领域中不可缺少的工具性软件。 如果 Linux 系统性能变慢,我们会用 top 命令 来查看系统性能。它被用来检查是什么进程在服务器上占有如此高的使用率,对于大多数 Linux 系统管理员来说很常见,现实世界中被 Linux 系统管理员广泛采用。 如果在进程输出中你没有看到很大的 2024-08-06 #Linux #Linux 命令 #性能优化/调试
Linux 下 perf 的使用 [TOC] 一、概述1、perf 作用perf 是一个性能分析工具(基于 Linux 内核提供的性能事件 perf_event 口),用于对 Linux 系统进行性能调优和性能分析。它可以通过收集硬件性能计数器、跟踪系统事件和采样程序调用栈等方式来提供详细的性能统计信息。 perf 依赖事件进行统计,这里的事件是通过采样机制,并不是 clock 级别的统计;根据使用 perf 工具的不同按测量事 2024-08-05 Linux > 性能优化/调试 #Linux #Linux 命令 #性能优化/调试
Linux 下 ag 命令的使用 [toc] 一、概述1、功能在 Linux 系统中,ag 命令是用于文本搜索的高效工具。它具有快速、灵活的搜索功能,并支持正则表达式匹配。 2、下载在下面是各个系统安装 ag 的命令: 1sudo apt-get install silversearcher-ag MacOS: 1brew install the_silver_searcher Debian/Ubuntu: 1 2024-08-05 Linux > Linux 命令 #Linux #Linux 命令
Linux 下 objdump 命令的使用 [TOC] 一、概述objdump 工具是用来显示二进制文件的信息,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。该命令常用于 Linux下反汇编目标文件或者可执行文件。 什么是反汇编反汇编(disassembly)是指将已编译的机器码转换回可读的汇编代码的过程。在计算机系统中,程序的源代码经过编译器转换成机器码(二进制代码)后才能被计算机执行。反汇编就是将这些机器码再次转 2024-08-04 Linux > Linux 命令 #Linux #Linux 命令 #调试
Linux 进程调度(一)之初识进程 [TOC] 一、初识进程1、基本概念进程是任何多道程序设计的操作系统中的基本概念。通常把进程定义为程序执行的一个实例,因此,如果 16 个用户同时运行 vi,那么就有 16 个独立的进程(尽管它们共享同一个可执行代码)。在 Linux 源代码中,常把进程称为任务(task)或线程(thread)。 进程类似于人类:它们被产生,有或多或少有效的生命,可以产生一个或多个子进程最终都要死亡。一个微小的 2024-07-31 Linux > 进程调度 #Linux #进程调度
Linux 内存管理(八)之 slab 分配器 @TOC 前言在上一节 Linux 内存管理(七)之伙伴系统算法 中,我们学习了 Linux 内核如何使用伙伴系统算法以页为单位管理内存,进行内存分配。这一节,将要提到的 slab 算法也是一种内存分配算法。 一、为什么要引入 slab 算法Linux 内存以页为单位进行内存管理,伙伴系统算法以 $2^n$ 次方个页面来进行内存分配管理,最小为 $2^0$,也就是一页,最大为 $2^{11}$, 2024-07-29 Linux > 内存管理 #内存管理 #Linux #slab