RED HAT ENTERPRISE LINUX
Managing
Tuning Profiles
Manage tuning profiles
CIS126RH | RHEL System Administration 1
Mesa Community College
A freshly installed RHEL system uses generic kernel and hardware settings suited
for general workloads. Tuning profiles optimise dozens of kernel parameters,
disk I/O schedulers, CPU governors, and network settings in a single command —
adapting the system to its specific role as a database server, virtual machine host,
high-throughput network appliance, or power-conscious laptop. The tuned
daemon manages these profiles dynamically on RHEL. This skill is tested on the RHCSA exam.
Learning Objectives
- Explain what tuned is and why tuning profiles matter — Describe the tuned daemon, what kernel parameters profiles adjust, and when to select a non-default profile
-
Install and enable tuned —
Install the
tunedpackage, enable the service, and confirm it is running -
List and select tuning profiles —
Use
tuned-adm listto discover available profiles andtuned-adm profileto apply one -
Verify and recommend profiles —
Use
tuned-adm activeto confirm the current profile andtuned-adm recommendto get a system-specific suggestion
What is tuned?
tuned is a daemon that applies and manages system performance
tuning profiles. It adjusts kernel parameters dynamically based on the active
profile and can adapt settings when system usage patterns change.
- Adjusts kernel parameters via
sysctl(network buffers, virtual memory, scheduler settings) - Sets the CPU frequency governor (performance, powersave, schedutil)
- Configures disk I/O schedulers for each block device
- Manages CPU C-state and power state settings
- Applies transparent hugepages policy
- Adjusts IRQ affinity and NUMA settings on multi-socket systems
A tuning profile bundles dozens of individual sysctl settings, disk
scheduler settings, and CPU governor choices into one named, reusable, documented
package. Selecting a profile is faster, safer, and more reproducible than setting
each parameter manually.
Installing and Enabling tuned
The tuned package is available in the BaseOS repository and is
installed by default on most RHEL 9 configurations.
# Install tuned if not already present
$ sudo dnf install -y tuned
# Enable and start the tuned service
$ sudo systemctl enable --now tuned
# Verify the service is running
$ systemctl status tuned
● tuned.service - Dynamic System Tuning Daemon
Loaded: loaded (/usr/lib/systemd/system/tuned.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-05-25 07:00:00 MST; 14 days ago
Main PID: 1024 (tuned)
Tasks: 4 (limit: 49152)
Memory: 13.5M
# Confirm tuned-adm is available
$ tuned-adm --version
tuned 2.21.0
Most RHEL 9 installations have tuned already installed and running. The first
step on the exam is to check with systemctl status tuned before
attempting to install it.
Listing Available Profiles
tuned-adm list shows all available profiles, with the currently
active one marked.
$ tuned-adm list
Available profiles:
- accelerated-baseline - Basic set of optimizations
- balanced - General non-specialized tuned profile
- desktop - Optimize for desktop use cases
- hpc-compute - Optimize for HPC compute workloads
- intel-sst - Configure Intel Speed Select Technology
- latency-performance - Optimize for deterministic performance
- network-latency - Optimize for lowest network latency
- network-throughput - Optimize for highest network throughput
- optimize-serial-console - Optimize for serial console use
- powersave - Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent performance
- virtual-guest - Optimize for virtual guest environments
- virtual-host - Optimize for virtual host environments
Current active profile: throughput-performance
The available profiles depend on which tuned plug-in packages are installed.
Additional profiles come from packages like tuned-profiles-oracle,
tuned-profiles-cpu-partitioning, and others.
Built-in Profiles Reference
| Profile | Best for | Key adjustments |
|---|---|---|
balanced |
General use — good compromise between power and performance | Moderate CPU governor, balanced I/O scheduler |
throughput-performance |
High-throughput servers — databases, web servers | Performance CPU governor, increased network and disk buffers, disabled THP |
latency-performance |
Low-latency applications — trading, real-time control | Performance CPU governor, disabled C-states, disabled THP |
network-throughput |
High-bandwidth network workloads | Large network buffers, performance CPU, minimal power management |
network-latency |
Low-latency network applications | Disabled C-states, performance CPU, optimised IRQ affinity |
powersave |
Laptops and energy-efficient deployments | Powersave CPU governor, aggressive CPU C-states, disk power management |
virtual-guest |
VMs running inside a hypervisor | Reduced overhead, balloon driver hints, reduced I/O scheduler depth |
virtual-host |
Hypervisor hosts running VMs | Performance CPU, optimised disk I/O for VM image handling, THP enabled |
desktop |
Workstations and desktop environments | Responsive scheduling, balanced power, audio settings |
Applying a Tuning Profile
tuned-adm profile activates a new profile immediately.
The change takes effect at once and persists across reboots.
# Apply the throughput-performance profile
$ sudo tuned-adm profile throughput-performance
# Apply the virtual-guest profile
$ sudo tuned-adm profile virtual-guest
# Apply the powersave profile
$ sudo tuned-adm profile powersave
# Apply a composite profile (multiple profiles merged)
$ sudo tuned-adm profile throughput-performance network-throughput
# Confirm the new profile is active
$ tuned-adm active
Current active profile: throughput-performance
The exam task is typically: "Configure the system to use the X
tuning profile." The answer is always:
sudo tuned-adm profile X followed by
tuned-adm active to verify.
Verifying the Active Profile
After applying a profile, confirm it is active and check whether the system is tuned correctly.
# Show the currently active profile
$ tuned-adm active
Current active profile: throughput-performance
# Verify that all settings in the active profile are applied correctly
$ sudo tuned-adm verify
Verification succeeded, current system settings match the preset profile.
See tuned log file ('/var/log/tuned/tuned.log') for details.
# Show what settings the active profile applies
$ sudo tuned-adm profile-info throughput-performance
Profile name:
throughput-performance
Profile summary:
Broadly applicable tuning that provides excellent performance ...
Profile description:
...
# View the tuned service log for troubleshooting
$ sudo journalctl -u tuned --since today
tuned-adm recommend
tuned can analyse the system hardware and environment and recommend the most appropriate profile — useful on systems whose role is unclear or when first setting up a new server.
# Get a profile recommendation for this system
$ tuned-adm recommend
virtual-guest
# On a bare-metal server it might recommend:
throughput-performance
# On a laptop:
balanced
# Apply the recommended profile in one step
$ sudo tuned-adm profile $(tuned-adm recommend)
tuned detects whether the system is running as a VM (via /sys/class/dmi
and hypervisor detection), checks the system class (server, desktop, laptop), reads
CPU and memory characteristics, and matches these against a set of rules in
/usr/lib/tuned/recommend.conf.
Disabling tuned and the off Profile
In some situations — troubleshooting a performance regression, custom manual tuning, or a highly specialised workload — you may need to disable tuned's active management.
# Turn off all tuning — tuned still runs but applies no settings
$ sudo tuned-adm off
Switching to profile 'off'
# Confirm tuned is in the "off" state
$ tuned-adm active
No current active profile.
# Stop and disable the tuned service entirely
$ sudo systemctl disable --now tuned
# Re-enable and re-apply a profile
$ sudo systemctl enable --now tuned
$ sudo tuned-adm profile throughput-performance
The off pseudo-profile tells tuned to stop managing settings but
does not restore the original kernel defaults. Parameters set by the previous
profile remain at their current values until a reboot or until a new profile
is applied.
Profile File Structure
Profiles are directories containing a tuned.conf file.
Understanding the structure helps administrators create custom profiles
or understand what a profile does.
# Built-in profiles are in /usr/lib/tuned/
$ ls /usr/lib/tuned/
balanced latency-performance network-latency throughput-performance ...
# Each profile is a directory with tuned.conf inside
$ ls /usr/lib/tuned/throughput-performance/
tuned.conf
# View what throughput-performance actually sets
$ cat /usr/lib/tuned/throughput-performance/tuned.conf
[main]
summary=Broadly applicable tuning that provides excellent performance
[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100
[vm]
transparent_hugepages=never
[disk]
readahead=>4096
User-created and customised profiles are stored in /etc/tuned/PROFILE_NAME/tuned.conf.
Profiles in /etc/tuned/ take precedence over same-named profiles in
/usr/lib/tuned/ and survive package updates.
Creating a Custom Profile
Custom profiles allow you to combine and extend built-in profiles with site-specific settings.
# Create a custom profile directory
$ sudo mkdir -p /etc/tuned/my-database
# Create the profile configuration
$ sudo tee /etc/tuned/my-database/tuned.conf <<EOF
[main]
summary=Custom database server profile
include=throughput-performance
[sysctl]
vm.swappiness=10
net.core.somaxconn=65535
[vm]
transparent_hugepages=never
EOF
# The new profile is immediately available
$ tuned-adm list | grep my-database
- my-database - Custom database server profile
# Apply it
$ sudo tuned-adm profile my-database
Dynamic Tuning
tuned can monitor system activity and automatically adjust settings between profiles based on CPU usage, disk activity, and network traffic — without administrator intervention.
# Enable dynamic tuning in /etc/tuned/tuned-main.conf
$ cat /etc/tuned/tuned-main.conf
[tuned]
dynamic_tuning = 0 # 0 = disabled (default), 1 = enabled
# Enable dynamic tuning
$ sudo sed -i 's/dynamic_tuning = 0/dynamic_tuning = 1/' \
/etc/tuned/tuned-main.conf
$ sudo systemctl restart tuned
# Check current tuning activity
$ sudo tuned-adm active
$ sudo journalctl -u tuned -f
Dynamic tuning is disabled by default because it continuously adjusts settings, which can make performance less predictable and harder to debug. Most production servers use static profile assignment. Enable dynamic tuning only when the workload genuinely varies throughout the day.
Choosing the Right Profile
Match the tuning profile to the server's primary workload and environment.
| Scenario | Recommended profile | Reason |
|---|---|---|
| General-purpose RHEL server | throughput-performance |
Maximises throughput for most server workloads |
| Virtual machine guest (inside VMware, KVM, etc.) | virtual-guest |
Reduces hypervisor overhead, optimises balloon driver |
| KVM or libvirt hypervisor host | virtual-host |
Optimises VM image I/O and CPU scheduling for hosting VMs |
| Network gateway or high-bandwidth server | network-throughput |
Maximises network buffer sizes and processing efficiency |
| Energy-efficient deployment or laptop | powersave |
Minimises power consumption at the cost of peak performance |
| Low-latency application (trading, real-time) | latency-performance |
Disables CPU C-states and power management to minimise latency jitter |
| Mixed or unknown workload | balanced |
Reasonable compromise when the workload is not specialised |
tuned-adm Command Reference
| Task | Command |
|---|---|
| List all available profiles | tuned-adm list |
| Show the currently active profile | tuned-adm active |
| Apply a specific profile | sudo tuned-adm profile PROFILENAME |
| Apply the recommended profile | sudo tuned-adm profile $(tuned-adm recommend) |
| Get a profile recommendation | tuned-adm recommend |
| Verify the active profile is correctly applied | sudo tuned-adm verify |
| Show details of a specific profile | tuned-adm profile-info PROFILENAME |
| Show details of the active profile | tuned-adm profile-info |
| Disable all tuning (without stopping tuned) | sudo tuned-adm off |
| Enable the tuned service | sudo systemctl enable --now tuned |
| Check tuned service status | systemctl status tuned |
| View tuned log for troubleshooting | sudo journalctl -u tuned |
Common Mistakes
| Mistake | What goes wrong | Correct approach |
|---|---|---|
Running tuned-adm profile without sudo |
Permission denied — changing system tuning requires root | Use sudo tuned-adm profile PROFILENAME |
| tuned service not running when applying a profile | tuned-adm warns or fails — the daemon must be running | Run sudo systemctl start tuned first |
| Misspelling a profile name | tuned-adm reports "No such profile" and no change is made | Use tuned-adm list first to confirm the exact profile name |
| Forgetting to verify after applying | Exam task is incomplete — the profile may not have applied cleanly | Always run tuned-adm active after applying a profile |
Editing files in /usr/lib/tuned/ |
Changes are overwritten by package updates | Create custom profiles in /etc/tuned/ — these survive updates |
Expecting tuned-adm off to restore default kernel settings |
Parameters remain at tuned values — off only stops future adjustments | Apply balanced to return to a moderate state, or reboot to clear dynamic changes |
Knowledge Check
Answer these before moving to the next slide.
- What command lists all available tuning profiles on the system and shows which one is currently active?
- A new database server has just been deployed on bare metal. Write the command to apply the most appropriate tuning profile for this workload.
- Write the command to confirm which tuning profile is currently active after applying a change.
- A RHEL system is running as a guest inside a VMware hypervisor. Which tuning profile is most appropriate, and why?
- After applying a profile, you want to confirm that every setting in the profile has been successfully applied to the running system. What command do you use?
- The tuned service is not running. Write the two commands needed to enable it now and ensure it starts automatically on future boots.
Knowledge Check — Answers
tuned-adm list— displays all available profiles with their descriptions, and shows the currently active profile at the bottom of the output.sudo tuned-adm profile throughput-performance— this profile maximises throughput for server workloads including databases, applying performance CPU governor settings, large network and disk buffers, and disabling transparent hugepages.tuned-adm active— shows the name of the currently active profile. No sudo is needed to read the active profile.- The
virtual-guestprofile. Running as a VM guest means the system shares physical hardware with other VMs via the hypervisor. The virtual-guest profile reduces overhead from features like CPU C-states and disk elevator settings that are unnecessary inside a VM and can interfere with hypervisor scheduling. sudo tuned-adm verify— compares every parameter defined in the active profile against the current system state and reports any discrepancies.- One option:
sudo systemctl enable tuned(for future boots) andsudo systemctl start tuned(to start now). Preferred single command:sudo systemctl enable --now tuned— the--nowflag does both in one step.
Key Takeaways
-
tuned applies sets of kernel parameters optimised for specific workloads.
The
tuneddaemon must be running. Enable it withsystemctl enable --now tuned. Each profile bundles dozens of sysctl, CPU governor, disk I/O, and power management settings into one named package. -
The three core commands are list, profile, and active.
tuned-adm listshows available profiles.sudo tuned-adm profile PROFILENAMEapplies one.tuned-adm activeconfirms which is running. Changes take effect immediately and persist across reboots. -
Match the profile to the workload.
throughput-performancefor servers.virtual-guestfor VMs.virtual-hostfor hypervisors.powersavefor energy efficiency.latency-performancefor low-latency applications. Usetuned-adm recommendwhen unsure. -
Verify after applying with
tuned-adm verify. A successful verification confirms every profile setting is correctly applied. On the exam, verification is the step that completes the task.
Graded Lab
- Run
systemctl status tunedto confirm tuned is running. If it is not, install it withdnf install tunedand enable it withsystemctl enable --now tuned. - Run
tuned-adm listto see all available profiles. Note which profile is currently active. - Run
tuned-adm recommendto see which profile tuned suggests for this system. Compare it to the currently active profile. - Apply the
virtual-guestprofile withsudo tuned-adm profile virtual-guest. Confirm withtuned-adm active. - Run
sudo tuned-adm verifyto confirm all profile settings are applied correctly. - Apply the
throughput-performanceprofile and verify it is active. Then view its configuration file at/usr/lib/tuned/throughput-performance/tuned.confand identify one kernel parameter it sets.
"Manage tuning profiles."
The exam task is: apply a named profile, verify it is active.
sudo tuned-adm profile PROFILENAME then
tuned-adm active.