作为IT工程师,我可以为您提供全面的Linux CPU性能调优方案。以下是系统化的调优方法和工具:
vmstat 1
查看系统整体状态mpstat -P ALL 1
查看每个CPU核心的使用情况sar -u 1 3
收集系统活动报告perf top
性能分析工具# 查看当前调度策略
chrt -p <pid>
# 设置进程为实时调度(FIFO)
chrt -f -p 99 <pid>
# 设置进程为轮转调度(RR)
chrt -r -p 99 <pid>
# 提高进程优先级(更低的nice值)
nice -n -10 <command>
# 修改运行中进程的nice值
renice -n -10 -p <pid>
# 查看进程当前CPU亲和性
taskset -p <pid>
# 设置进程CPU亲和性
taskset -c 0,2,4 <command>
taskset -c 0-3 <command> # 绑定到前4个核心
# 创建cgroup
cgcreate -g cpu:/mygroup
# 限制CPU使用
cgset -r cpu.cfs_period_us=100000 mygroup
cgset -r cpu.cfs_quota_us=50000 mygroup # 限制为50% CPU
# 将进程加入cgroup
cgclassify -g cpu:mygroup <pid>
cpupower frequency-info
# 设置为性能模式(最大频率)
cpupower frequency-set -g performance
# 设置为节能模式
cpupower frequency-set -g powersave
# 禁用CPU核心
echo 0 > /sys/devices/system/cpu/cpuX/online
# 启用CPU核心
echo 1 > /sys/devices/system/cpu/cpuX/online
# 减少上下文切换(增加时间片)
sysctl -w kernel.sched_min_granularity_ns=10000000
sysctl -w kernel.sched_wakeup_granularity_ns=15000000
# 禁用NUMA平衡(某些高负载场景)
sysctl -w kernel.numa_balancing=0
# 调整进程fork速率限制
sysctl -w kernel.threads-max=100000
sysctl -w kernel.pid_max=100000
# 减少交换倾向(0-100, 0表示尽量避免交换)
sysctl -w vm.swappiness=10
# GCC编译时指定CPU架构
gcc -march=native -O3 -pipe -fomit-frame-pointer -o program program.c
# 1. 首先生成profile数据
gcc -fprofile-generate -o program program.c
./program (使用典型工作负载)
# 2. 使用profile数据重新编译
gcc -fprofile-use -o program program.c
# 安装irqbalance
apt install irqbalance
# 手动设置IRQ亲和性
echo 3 > /proc/irq/<irq_num>/smp_affinity
# 查看THP状态
cat /sys/kernel/mm/transparent_hugepage/enabled
# 禁用THP(某些内存密集型应用)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 查看当前C-states
cpupower idle-info
# 禁用深度C-states(降低延迟)
for i in /sys/devices/system/cpu/cpu*/cpuidle/state*/disable; do echo 1 > $i; done
sysbench cpu --threads=4 run
stress-ng --cpu 4 --cpu-method all -t 60s
通过以上方法的组合使用,您可以根据具体应用场景对Linux系统的CPU性能进行精细调优。建议在调整前做好基准测试,每次只调整一个参数并记录效果。