性能优化技巧

概述

本文档介绍 Quectel Pi H1 单板计算机的系统性能优化技巧,涵盖内核配置、系统调优、应用程序优化等多个方面。通过合理的优化策略,可以显著提升系统的响应速度、吞吐量和能效比。

环境准备

在使用性能分析工具之前,需要先配置系统环境。

终端环境配置

TERM 环境变量

某些工具(如 perf reportperf top)需要 TERM 环境变量:

# 临时设置(当前会话有效)
export TERM=xterm-256color

# 永久设置(添加到 .bashrc)
echo 'export TERM=xterm-256color' >> ~/.bashrc
source ~/.bashrc

# 验证设置
echo $TERM

perf 工具权限配置

为了获得更详细的内核性能数据,需要调整 perf 相关权限:

# 查看当前权限设置
cat /proc/sys/kernel/kptr_restrict
cat /proc/sys/kernel/perf_event_paranoid

# 临时配置(重启后失效)
echo 0 > /proc/sys/kernel/kptr_restrict
echo -1 > /proc/sys/kernel/perf_event_paranoid

# 永久配置
cat >> /etc/sysctl.conf << 'EOF'

# perf 性能分析工具配置
kernel.kptr_restrict = 0
kernel.perf_event_paranoid = -1
EOF

# 应用配置
sysctl -p

参数说明

  • kptr_restrict = 0:允许读取内核符号地址(用于符号解析)
  • perf_event_paranoid = -1:允许所有用户使用 perf 的所有功能

软件包安装

安装常用的性能分析工具:

# 更新软件包索引
apt update

# 安装基础性能工具
apt install -y htop sysstat iperf3

# 验证安装
htop --version
iostat -V
iperf3 --version

性能分析工具

在进行优化之前,需要先使用工具分析系统瓶颈,找到性能问题的根源。

系统性能监控

top/htop - 进程监控

实时监控系统资源使用情况:

# 安装 htop(功能更强大)
apt install htop

关键指标

  • CPU 使用率(user、system、iowait)
  • 内存使用率(used、buffers、cache)
  • 进程优先级和状态

vmstat - 虚拟内存统计

监控系统整体性能:

# 每秒输出一次,共输出 10 次
vmstat 1 10

关键指标

  • si/so:swap in/out(应该接近 0)
  • bi/bo:块设备 I/O(block in/out)
  • wa:I/O 等待时间百分比

iostat - I/O 统计

分析磁盘 I/O 性能:

# 安装 sysstat
apt install sysstat

# 每秒输出一次磁盘统计
iostat -x 1

关键指标

  • %util:设备利用率
  • await:平均 I/O 等待时间
  • svctm:平均服务时间

perf - 性能分析工具

Linux 内核提供的强大性能分析工具:

# 记录系统性能数据(10秒)
perf record -a -g sleep 10

# 查看报告(需要设置 TERM 环境变量)
perf report

# 查看 CPU 热点(实时显示)
perf top

# 或使用非交互模式
perf top -n

使用前提

  • 需要设置 TERM 环境变量(见"环境准备"章节)
  • 建议配置 perf 权限以获得完整的内核符号信息
  • 如遇到权限警告,可忽略或按"环境准备"章节配置

常见警告

WARNING: Kernel address maps are restricted

这是正常的安全限制,可通过配置 kernel.kptr_restrict 解决。

网络性能测试

iperf3 - 网络带宽测试

测试网络吞吐量:

# 安装 iperf3(如未安装)
apt install iperf3

# 查看版本
iperf3 --version

# 服务端模式(监听)
iperf3 -s

# 客户端模式(测试 10 秒)
iperf3 -c <服务器IP> -t 10

# 双向测试
iperf3 -c <服务器IP> -t 10 --bidir

# 使用多个并行流
iperf3 -c <服务器IP> -t 10 -P 4

测试示例

# 在服务器端(192.168.1.100)
iperf3 -s

# 在客户端
iperf3 -c 192.168.1.100 -t 10

ping - 网络延迟测试

测试网络延迟和丢包率:

ping -c 100 <目标IP>

内核优化

内核配置优化

# 进入内核源码目录并编辑配置
cd sources/quectel-src/kernel/qcm6490-idp/kernel-source
make menuconfig

关键配置

  • 调度器:Server(高吞吐)/ Desktop(平衡)/ Low-Latency(实时)
  • 内存:启用透明大页(Transparent Hugepage)
  • 调试:生产环境禁用所有调试选项

启动优化

# 禁用不必要的服务
systemctl disable <服务名>

# 设备树禁用未使用的外设
&usb3 {
    status = "disabled";
};

系统级优化

CPU 优化

# CPU 调频策略:performance(性能)/ powersave(省电)/ ondemand(推荐)
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# CPU 亲和性(绑定进程到特定核心)
taskset -cp 0-3 <PID>

内存优化

编辑 /etc/sysctl.conf

vm.swappiness = 10              # 降低 swap 使用
vm.dirty_ratio = 10             # 脏页缓存比例
vm.dirty_background_ratio = 5
vm.min_free_kbytes = 65536      # 最小空闲内存

启用 zram 压缩内存:

modprobe zram
echo 536870912 > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0 -p 10

存储 I/O 优化

# 编辑 /etc/fstab 添加 noatime 挂载选项
/dev/mmcblk0p8  /  ext4  defaults,noatime,nodiratime  0  1

# I/O 调度器(deadline 适合 eMMC,bfq 通用)
echo deadline > /sys/block/mmcblk0/queue/scheduler

# 增加预读缓存
echo 2048 > /sys/block/mmcblk0/queue/read_ahead_kb

网络优化

编辑 /etc/sysctl.conf

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_tw_reuse = 1

应用配置:sysctl -p

应用程序优化

编译器优化

# 编译时使用 -O3 优化
gcc -O3 -flto program.c -o program

# 多线程并行化
gcc -fopenmp -O3 program.c -o program

库优化

# 使用高性能数学库
apt install libopenblas-dev

# 预链接减少启动时间
apt install prelink
prelink -amR

基准测试

# CPU 测试
apt install sysbench
sysbench cpu --threads=4 --time=60 run

# 存储测试
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 conv=fdatasync
dd if=/tmp/testfile of=/dev/null bs=1M

# I/O 测试
apt install fio
fio --name=test --rw=randwrite --bs=4k --size=1G --runtime=60

优化检查清单

  • 环境准备:DNS、TERM、perf 权限
  • 性能分析:htop、iostat、perf、iperf3
  • CPU:调频策略(ondemand)
  • 内存:swappiness、zram
  • 存储:noatime、I/O 调度器
  • 网络:TCP/IP 参数
  • 编译:使用 -O3 优化
  • 禁用不必要的服务

常见问题与解决方案

软件包安装问题

DNS 解析失败

症状

Error: Failed to fetch https://mirrors.xxx.xxx/...
Temporary failure resolving 'mirrors.xxx.xxx'

解决方案

# 1. 检查网络连接
ping -c 3 8.8.8.8

# 2. 配置 DNS
cat > /etc/resolv.conf << 'EOF'
nameserver 8.8.8.8
nameserver 114.114.114.114
EOF

# 3. 测试 DNS
ping -c 3 www.baidu.com

# 4. 更新软件源并重试
apt update
apt install <软件包名>

软件包管理器错误

问题:使用 opkg 命令报错 command not found

原因:Quectel Pi H1 使用 Linux 系统,应使用 apt 而非 opkg

解决方案

# 错误用法
opkg install htop

# 正确用法
apt install htop

性能分析工具问题

perf 报错 "TERM needs set"

症状

# perf report
TERM environment variable needs set.

# perf top  
TERM environment variable needs set.

解决方案

# 临时设置
export TERM=xterm-256color

# 永久设置
echo 'export TERM=xterm-256color' >> ~/.bashrc
source ~/.bashrc

# 验证
echo $TERM

perf 内核符号警告

症状

WARNING: Kernel address maps (/proc/{kallsyms,modules}) are restricted

影响:无法获取详细的内核符号信息,性能分析不够准确

解决方案

# 检查当前设置
cat /proc/sys/kernel/kptr_restrict
cat /proc/sys/kernel/perf_event_paranoid

# 临时配置
echo 0 > /proc/sys/kernel/kptr_restrict
echo -1 > /proc/sys/kernel/perf_event_paranoid

# 永久配置
cat >> /etc/sysctl.conf << 'EOF'
kernel.kptr_restrict = 0
kernel.perf_event_paranoid = -1
EOF
sysctl -p

htop/top 中文乱码

症状:终端显示中文时出现乱码

原因:终端编码设置问题

解决方案

# 设置 locale
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# 或使用英文界面避免乱码
export LANG=C

# 永久设置
echo 'export LANG=en_US.UTF-8' >> ~/.bashrc

网络测试问题

iperf3 命令未找到

症状

bash: iperf3: command not found

解决方案

# 安装 iperf3
apt update
apt install iperf3

# 验证安装
iperf3 --version

iperf3 连接失败

症状:客户端无法连接到服务器

排查步骤

# 1. 检查服务器是否启动
# 在服务器端
iperf3 -s

# 2. 检查网络连通性
ping <服务器IP>

# 3. 检查防火墙
# 查看防火墙状态
iptables -L -n

# 临时开放 iperf3 端口(5201)
iptables -A INPUT -p tcp --dport 5201 -j ACCEPT

# 4. 指定监听地址
iperf3 -s -B 0.0.0.0

系统配置问题

sysctl 配置不生效

症状:修改 /etc/sysctl.conf 后配置未生效

解决方案

# 1. 应用配置
sysctl -p

# 2. 验证配置
sysctl -a | grep <参数名>

# 3. 如果仍不生效,检查配置文件语法
cat /etc/sysctl.conf

# 4. 手动设置测试
echo <值> > /proc/sys/<路径>

权限被拒绝

症状

Permission denied

解决方案

# 1. 确认以 root 用户运行
whoami

# 2. 切换到 root
sudo su -
# 或
su -

# 3. 或使用 sudo
sudo <命令>

性能问题排查

问题 诊断工具 解决方法
CPU 高 htopperf top 找出高 CPU 进程,优化算法
内存不足 freevmstat 启用 zram,检查内存泄漏
I/O 慢 iostat 优化挂载选项,更换调度器
网络延迟 pingiperf3 调整 TCP/IP 参数,检查连接

优化原则

先测量,再优化,后验证 - 不要过早优化!

  1. 使用工具找到瓶颈(htop、iostat、perf)
  2. 针对瓶颈进行优化
  3. 重新测量验证效果
  4. 平衡性能、功耗和复杂度

性能与功耗平衡

  • 性能优先:echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
  • 平衡模式:echo ondemand > ...(推荐)
  • 省电优先:echo powersave > ...

总结

优化要点:

  1. 环境准备:DNS、TERM、perf 权限
  2. 性能分析:使用工具定位瓶颈
  3. 系统调优:CPU、内存、I/O、网络
  4. 持续监控:防止性能退化

相关文档