163 lines
3.2 KiB
Markdown
163 lines
3.2 KiB
Markdown
|
|
# Linux CPU tuning
|
||
|
|
|
||
|
|
## 1. Understanding CPU Governors
|
||
|
|
|
||
|
|
CPU governors control the CPU frequency scaling on Linux systems. The main governors are:
|
||
|
|
|
||
|
|
- performance: Runs the CPU at maximum frequency
|
||
|
|
- powersave: Runs the CPU at minimum frequency
|
||
|
|
- ondemand: Dynamically scales CPU frequency based on system load
|
||
|
|
- conservative: Similar to ondemand, but scales frequency more gradually
|
||
|
|
- schedutil: Uses the CPU scheduler for frequency scaling decisions
|
||
|
|
|
||
|
|
To view available governors:
|
||
|
|
```bash
|
||
|
|
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
|
||
|
|
```
|
||
|
|
|
||
|
|
To set a governor:
|
||
|
|
```bash
|
||
|
|
sudo cpupower frequency-set -g <governor>
|
||
|
|
```
|
||
|
|
|
||
|
|
## 2. CPU Frequency Scaling
|
||
|
|
|
||
|
|
You can manually set CPU frequencies:
|
||
|
|
|
||
|
|
View available frequencies:
|
||
|
|
```bash
|
||
|
|
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
|
||
|
|
```
|
||
|
|
|
||
|
|
Set minimum and maximum frequencies:
|
||
|
|
```bash
|
||
|
|
sudo cpupower frequency-set --min <freq> --max <freq>
|
||
|
|
```
|
||
|
|
|
||
|
|
## 3. CPU Affinity
|
||
|
|
|
||
|
|
CPU affinity allows you to bind processes to specific CPU cores:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
taskset -c 0,1 <command> # Run command on cores 0 and 1
|
||
|
|
```
|
||
|
|
|
||
|
|
## 4. Nice and Ionice
|
||
|
|
|
||
|
|
Adjust process priorities:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nice -n <value> <command> # Set CPU scheduling priority (-20 to 19)
|
||
|
|
ionice -c <class> -n <value> <command> # Set I/O scheduling priority
|
||
|
|
```
|
||
|
|
|
||
|
|
## 5. CPU Isolation
|
||
|
|
|
||
|
|
Isolate CPUs from the scheduler to dedicate them to specific tasks:
|
||
|
|
|
||
|
|
Add to kernel boot parameters:
|
||
|
|
```bash
|
||
|
|
isolcpus=2,3
|
||
|
|
```
|
||
|
|
|
||
|
|
## 6. IRQ Balancing
|
||
|
|
|
||
|
|
Manage interrupt request (IRQ) distribution:
|
||
|
|
|
||
|
|
Disable IRQ balancing:
|
||
|
|
```bash
|
||
|
|
sudo service irqbalance stop
|
||
|
|
```
|
||
|
|
|
||
|
|
Manually set IRQ affinity:
|
||
|
|
```bash
|
||
|
|
echo <cpu_mask> > /proc/irq/<irq_number>/smp_affinity
|
||
|
|
```
|
||
|
|
|
||
|
|
## 7. CPU Power Management
|
||
|
|
|
||
|
|
Control CPU power-saving features:
|
||
|
|
|
||
|
|
Disable C-states:
|
||
|
|
```bash
|
||
|
|
echo 1 > /sys/devices/system/cpu/cpu0/cpuidle/state1/disable
|
||
|
|
```
|
||
|
|
|
||
|
|
Adjust Intel P-states:
|
||
|
|
```bash
|
||
|
|
echo passive > /sys/devices/system/cpu/intel_pstate/status
|
||
|
|
```
|
||
|
|
|
||
|
|
## 8. Kernel Parameters
|
||
|
|
|
||
|
|
Adjust various kernel parameters for CPU performance:
|
||
|
|
|
||
|
|
Edit /etc/sysctl.conf:
|
||
|
|
```ini
|
||
|
|
kernel.sched_migration_cost_ns = 5000000
|
||
|
|
kernel.sched_autogroup_enabled = 0
|
||
|
|
kernel.sched_wakeup_granularity_ns = 15000000
|
||
|
|
```
|
||
|
|
|
||
|
|
Apply changes:
|
||
|
|
```bash
|
||
|
|
sudo sysctl -p
|
||
|
|
```
|
||
|
|
|
||
|
|
## 9. CPU Topology
|
||
|
|
|
||
|
|
Understand your CPU topology:
|
||
|
|
```bash
|
||
|
|
lscpu
|
||
|
|
lstopo
|
||
|
|
```
|
||
|
|
|
||
|
|
## 10. Monitoring and Profiling
|
||
|
|
|
||
|
|
Use tools to monitor CPU performance:
|
||
|
|
|
||
|
|
- top/htop: Real-time system monitor
|
||
|
|
- perf: Linux profiling tool
|
||
|
|
- stress-ng: CPU stress testing tool
|
||
|
|
- s-tui: Terminal-based CPU monitoring
|
||
|
|
|
||
|
|
## 11. NUMA (Non-Uniform Memory Access)
|
||
|
|
|
||
|
|
For multi-socket systems, manage NUMA settings:
|
||
|
|
|
||
|
|
View NUMA info:
|
||
|
|
```bash
|
||
|
|
numactl --hardware
|
||
|
|
```
|
||
|
|
|
||
|
|
Run a command with NUMA policy:
|
||
|
|
```bash
|
||
|
|
numactl --cpunodebind=0 --membind=0 <command>
|
||
|
|
```
|
||
|
|
|
||
|
|
## 12. Compiler Optimizations
|
||
|
|
|
||
|
|
When compiling software, use CPU-specific optimizations:
|
||
|
|
|
||
|
|
GCC flags:
|
||
|
|
```bash
|
||
|
|
-march=native -mtune=native
|
||
|
|
```
|
||
|
|
|
||
|
|
## 13. CPU Vulnerabilities Mitigations
|
||
|
|
|
||
|
|
Control CPU vulnerability mitigations:
|
||
|
|
|
||
|
|
View current mitigations:
|
||
|
|
```bash
|
||
|
|
grep . /sys/devices/system/cpu/vulnerabilities/*
|
||
|
|
```
|
||
|
|
|
||
|
|
Disable mitigations (may impact security):
|
||
|
|
Add to kernel boot parameters:
|
||
|
|
```bash
|
||
|
|
mitigations=off
|
||
|
|
```
|
||
|
|
|
||
|
|
This guide covers the main aspects of CPU tuning on Linux. Remember that optimal settings depend on your specific hardware and workload. Always test thoroughly and monitor system performance when making changes.
|