tuned Performance Profiles
Introduction¶
tuned is a daemon (default on RHEL) that applies a coherent set of performance
tweaks based on a profile. Instead of hand-editing sysctl, CPU governor,
I/O scheduler, and THP settings separately, you pick a profile that matches the
machine's role.
The built-in profiles¶
tuned-adm list
| Profile | For |
|---|---|
balanced |
desktop / general (default) — moderate power saving |
throughput-performance |
servers where throughput > latency & power; disables power saving, tunes VM/network for bulk work |
latency-performance |
low, predictable latency — CPU governor performance, low dirty_ratio, disables THP |
network-latency |
latency-performance + network stack tuning, busy-poll |
network-throughput |
large buffers, tuned for bulk network transfer |
virtual-guest |
a VM — adjusts dirty ratios and readahead for virtualized I/O |
virtual-host |
a hypervisor |
powersave |
laptops on battery |
accelerator-performance, hpc-compute |
GPU / HPC nodes |
tuned-adm active # current profile
tuned-adm recommend # what tuned thinks this machine should use
tuned-adm profile throughput-performance
tuned-adm verify # did all settings actually apply?
What a profile actually changes¶
A profile is a set of plugins. throughput-performance for example:
- CPU — governor
performance(no frequency scaling down),energy_perf_biasperformance. sysctl—vm.dirty_ratio,vm.dirty_background_ratio,vm.swappiness=10,kernel.sched_*,net.core.*mem_maxbumped.- Disk — I/O scheduler (
mq-deadline/nonefor SSD/NVMe), readahead. - Transparent Hugepages — usually left
alwaysfor throughput, set toneverfor latency/DB profiles. - Kernel command-line additions (via
tunedbootloader plugin) — e.g.skew_tick, isolated CPUs — these need a reboot.
Inspect a profile:
cat /usr/lib/tuned/throughput-performance/tuned.conf
A custom profile¶
Inherit from a built-in and override:
# /etc/tuned/myapp/tuned.conf
[main]
summary=App server: throughput base, DB-friendly memory, no THP
include=throughput-performance
[vm]
transparent_hugepages=never
[sysctl]
vm.swappiness=1
vm.max_map_count=262144
net.core.somaxconn=4096
net.ipv4.tcp_congestion_control=bbr
[disk]
readahead=4096
[bootloader]
cmdline_myapp=+processor.max_cstate=1 intel_idle.max_cstate=0
tuned-adm profile myapp
tuned-adm verify
# if [bootloader] changed the cmdline:
grubby --info=ALL | grep args # confirm, then reboot
Files in /etc/tuned/ override /usr/lib/tuned/.
Verification and troubleshooting¶
tuned-adm active
tuned-adm verify # reports any setting that doesn't match the profile
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/block/nvme0n1/queue/scheduler
cat /sys/kernel/mm/transparent_hugepage/enabled
sysctl vm.swappiness net.ipv4.tcp_congestion_control
journalctl -u tuned
tuned-adm verifyreports mismatches — something else is overriding tuned: a/etc/sysctl.d/file (loaded after tuned, or before — order matters), a cloud-initbootcmd, another daemon, or acpupower/cpufreqservice. tuned re-applies on its own schedule but a persistent override wins.- Profile applied but performance unchanged — the profile isn't the
bottleneck (the app, the disk, the network are), or the machine role doesn't
match the profile (running
powersaveon a server, orvirtual-gueston bare metal). [bootloader]cmdline changes not taking effect — those need a reboot;tuned-adm verifywill flag the cmdline mismatch until then.- Latency profile hurt throughput (or vice versa) — expected trade-off. THP
neverhelps DB/latency but can reduce throughput for some workloads; test with your actual load. - tuned fighting a manual
sysctl -w— tuned owns the settings in its profile; put your override in a custom profile's[sysctl]section, not in/etc/sysctl.d/where it's ambiguous. - Cloud instance recommends
virtual-guest— good default; add a custom profile inheriting it for app-specificsysctl.
Related tools and reading¶
- On-site: Linux commands reference.
- Related posts: sysctl network tuning for servers, Diagnosing disk I/O with iostat.
Stuck on something this site can't fix?Reach out to Prabath directly on LinkedIn.More in Linux & Sysadmin
resolv.conf and systemd-resolved
On modern distros /etc/resolv.conf points at a stub resolver managed by systemd-resolved. Editing it directly usually does nothing — here's the real model.
October 24, 2026Tuning Open File Limits on Linux
Four different limits control how many files a process can open. 'Too many open files' means you're hitting one specific one — here's how to find and raise it.
October 24, 2026ss and conntrack for Connection Debugging
ss shows you every socket and its send/receive queues; conntrack shows what the firewall is tracking. Together they explain most 'connection refused' and 'no buffer space' problems.
October 24, 2026