性能优化技巧
2025-11-28
概述
本文档介绍 Quectel Pi H1 单板计算机的系统性能优化技巧,涵盖内核配置、系统调优、应用程序优化等多个方面。通过合理的优化策略,可以显著提升系统的响应速度、吞吐量和能效比。
环境准备
在使用性能分析工具之前,需要先配置系统环境。
终端环境配置
TERM 环境变量
某些工具(如 perf report、perf 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 高 | htop、perf top |
找出高 CPU 进程,优化算法 |
| 内存不足 | free、vmstat |
启用 zram,检查内存泄漏 |
| I/O 慢 | iostat |
优化挂载选项,更换调度器 |
| 网络延迟 | ping、iperf3 |
调整 TCP/IP 参数,检查连接 |
优化原则
先测量,再优化,后验证 - 不要过早优化!
- 使用工具找到瓶颈(htop、iostat、perf)
- 针对瓶颈进行优化
- 重新测量验证效果
- 平衡性能、功耗和复杂度
性能与功耗平衡:
- 性能优先:
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor - 平衡模式:
echo ondemand > ...(推荐) - 省电优先:
echo powersave > ...
总结
优化要点:
- 环境准备:DNS、TERM、perf 权限
- 性能分析:使用工具定位瓶颈
- 系统调优:CPU、内存、I/O、网络
- 持续监控:防止性能退化