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

  1. 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
  2. Install and enable tuned — Install the tuned package, enable the service, and confirm it is running
  3. List and select tuning profiles — Use tuned-adm list to discover available profiles and tuned-adm profile to apply one
  4. Verify and recommend profiles — Use tuned-adm active to confirm the current profile and tuned-adm recommend to 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
tuned vs manual sysctl

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
tuned is enabled by default on RHEL 9

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
Profile count varies by packages installed

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
RHCSA Exam Pattern

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)
How recommend works

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
tuned-adm off does not revert previous tuning

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
Custom profiles go in /etc/tuned/

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 off by default

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 profilestuned-adm list
Show the currently active profiletuned-adm active
Apply a specific profilesudo tuned-adm profile PROFILENAME
Apply the recommended profilesudo tuned-adm profile $(tuned-adm recommend)
Get a profile recommendationtuned-adm recommend
Verify the active profile is correctly appliedsudo tuned-adm verify
Show details of a specific profiletuned-adm profile-info PROFILENAME
Show details of the active profiletuned-adm profile-info
Disable all tuning (without stopping tuned)sudo tuned-adm off
Enable the tuned servicesudo systemctl enable --now tuned
Check tuned service statussystemctl status tuned
View tuned log for troubleshootingsudo 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.

  1. What command lists all available tuning profiles on the system and shows which one is currently active?
  2. A new database server has just been deployed on bare metal. Write the command to apply the most appropriate tuning profile for this workload.
  3. Write the command to confirm which tuning profile is currently active after applying a change.
  4. A RHEL system is running as a guest inside a VMware hypervisor. Which tuning profile is most appropriate, and why?
  5. 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?
  6. 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

  1. tuned-adm list — displays all available profiles with their descriptions, and shows the currently active profile at the bottom of the output.
  2. 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.
  3. tuned-adm active — shows the name of the currently active profile. No sudo is needed to read the active profile.
  4. The virtual-guest profile. 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.
  5. sudo tuned-adm verify — compares every parameter defined in the active profile against the current system state and reports any discrepancies.
  6. One option: sudo systemctl enable tuned (for future boots) and sudo systemctl start tuned (to start now). Preferred single command: sudo systemctl enable --now tuned — the --now flag does both in one step.

Key Takeaways

  1. tuned applies sets of kernel parameters optimised for specific workloads. The tuned daemon must be running. Enable it with systemctl enable --now tuned. Each profile bundles dozens of sysctl, CPU governor, disk I/O, and power management settings into one named package.
  2. The three core commands are list, profile, and active. tuned-adm list shows available profiles. sudo tuned-adm profile PROFILENAME applies one. tuned-adm active confirms which is running. Changes take effect immediately and persist across reboots.
  3. Match the profile to the workload. throughput-performance for servers. virtual-guest for VMs. virtual-host for hypervisors. powersave for energy efficiency. latency-performance for low-latency applications. Use tuned-adm recommend when unsure.
  4. 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 tuned to confirm tuned is running. If it is not, install it with dnf install tuned and enable it with systemctl enable --now tuned.
  • Run tuned-adm list to see all available profiles. Note which profile is currently active.
  • Run tuned-adm recommend to see which profile tuned suggests for this system. Compare it to the currently active profile.
  • Apply the virtual-guest profile with sudo tuned-adm profile virtual-guest. Confirm with tuned-adm active.
  • Run sudo tuned-adm verify to confirm all profile settings are applied correctly.
  • Apply the throughput-performance profile and verify it is active. Then view its configuration file at /usr/lib/tuned/throughput-performance/tuned.conf and identify one kernel parameter it sets.
RHCSA Objective

"Manage tuning profiles." The exam task is: apply a named profile, verify it is active. sudo tuned-adm profile PROFILENAME then tuned-adm active.