Linux内核之tracepoint介绍

概述

Tracepoint 是一种在 Linux 内核中插入的静态探测点,用于跟踪和调试内核行为。它允许开发者在特定位置插入代码,收集运行时信息,而不会显著影响性能。

原理

特性

  • 静态探测点: 在内核预定义, 自定义的函数可以插入在这里
  • 动态启用: 默认不启用, 减少性能开销
  • 低开销
阅读更多

bpftrace简介

概述

bpftrace是一个基于eBPF的高级跟踪工具, 用于动态追踪Linux系统的行为和性能.

用于可以用简单的一行命令或者简洁的脚本,实现监控分析内核和用户空间程序的运行,而无需修改或者重新编译

安装

sudo apt-get install bpftrace
阅读更多

动态链接库的基本介绍

ld.so

ld.so的路径存在于任意一个存在动态链接库的elf文件上的.interp setion中

# objdump -s -j .interp /bin/ls
/bin/ls: file format elf64-x86-64

Contents of section .interp:
02a8 2f6c6962 36342f6c 642d6c69 6e75782d /lib64/ld-linux-
02b8 7838362d 36342e73 6f2e3200 x86-64.so.2.

#readelf -a /bin/ls | grep 'interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

任何动态链接的程序都需要ld.so去启动,即直接执行一个动态链接库程序等价于执行 ld.so <program>

调试

阅读更多

wsl常见问题解决

更改wsl虚拟磁盘位置

默认虚拟磁盘文件大体是在C:\Users\XXX\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc\LocalState (以ubuntu2404为例)

将里面的vhdx移动到目标盘位置,比如 D:\wsl\24.04\ , 然后执行命令即可

wsl --unregister Ubuntu-24.04
wsl --import-in-place Ubuntu-24.04 "D:\wsl\24.04\ext4.vhdx”

压缩磁盘

阅读更多

性能优化工具-strace

概述

使用 strace 查看系统调用统计可以帮助你分析一个进程的行为,特别是它在运行时进行的系统调用

原理

strace 使用 ptrace 系统调用追踪目标进程

当被跟踪的进程

阅读更多

性能优化工具-iostat

常用命令

  • -x 扩展信息

  • -m 使用MB单位

  • 命令后跟数字x y 每x秒刷新, 显示y次

    #每隔 2 秒显示一次详细的设备统计信息,共显示 5 次。

    iostat -x 2 5
  • -c 显示cpu相关的信息

  • -p 指定特定设备信息,比如-p sda只展示sda下的\

指标

基本指标

  • Device: 设备名称,例如 sda 表示第一个SCSI磁盘设备。
阅读更多

性能优化工具-perf

概述

perf 是一个强大的 Linux 性能分析工具,它可以用来收集和分析性能数据。

perf的命令有很多,下文将就其中常用的几条进行阐述


usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

The most commonly used perf commands are:
annotate Read perf.data (created by perf record) and display annotated code
archive Create archive with object files with build-ids found in perf.data file
bench General framework for benchmark suites
buildid-cache Manage build-id cache.
buildid-list List the buildids in a perf.data file
c2c Shared Data C2C/HITM Analyzer.
config Get and set variables in a configuration file.
daemon Run record sessions on background
data Data file related processing
diff Read perf.data files and display the differential profile
evlist List the event names in a perf.data file
ftrace simple wrapper for kernel's ftrace functionality
inject Filter to augment the events stream with additional information
iostat Show I/O performance metrics
kallsyms Searches running kernel for symbols
kvm Tool to trace/measure kvm guest os
list List all symbolic event types
mem Profile memory accesses
record Run a command and record its profile into perf.data
report Read perf.data (created by perf record) and display the profile
script Read perf.data (created by perf record) and display trace output
stat Run a command and gather performance counter statistics
test Runs sanity tests.
top System profiling tool.
version display the version of perf binary
probe Define new dynamic tracepoints
trace strace inspired tool
kmem Tool to trace/measure kernel memory properties
kwork Tool to trace/measure kernel work properties (latencies)
lock Analyze lock events
sched Tool to trace/measure scheduler properties (latencies)
timechart Tool to visualize total system behavior during a workload

See 'perf help COMMAND' for more information on a specific command.

安装

阅读更多

linux二进制文件加载源码分析

linux二进制加载

结构

linux_binfmt 用来定义二进制格式的结构,代表某种 特定的格式,比如elf

struct linux_binfmt {
struct list_head lh; // 链表头部
struct module *module; // 模块
int (*load_binary)(struct linux_binprm *); // 加载函数
int (*load_shlib)(struct file *);
#ifdef CONFIG_COREDUMP
int (*core_dump)(struct coredump_params *cprm); // coredump处理函数,如elf会有定义
unsigned long min_coredump; /* minimal dump size */
#endif
} __randomize_layout;

linux_binprm 用来存放可执行 文件的各种参数,代表可执行文件的运行时结构

阅读更多

使用psmisc fuser 关闭指定端口或者路径的进程

使用psmisc fuser 关闭指定端口或者路径的进程

fuser 是一个非常有用的工具,可以用来查看哪些进程正在使用特定的文件、目录、或者端口。你也可以用它来查找和终止访问特定二进制文件的进程。

查询关闭特定端口的进程

格式如下,如启动了一个端口为8080的tcp服务进程

sudo fuser 8080/tcp
阅读更多