HOME


5h-3LL 1.0
DIR: /usr/share/doc/tuned/manual
/usr/share/doc/tuned/manual/
Upload File:
Current File : /usr/share/doc/tuned/manual/index.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 9.1.0" />
<meta name="keywords" content="documentation, tuned, performance, power, linux" />
<title>TuneD documentation: Optimizing system throughput, latency, and power consumption</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overridden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="book">
<div id="header">
<h1>TuneD documentation: Optimizing system throughput, latency, and power consumption</h1>
<span id="revnumber">version 2.24.1,</span>
<span id="revdate">2024-10-09</span>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>This documentation explains how to use the <strong>TuneD</strong> application to monitor and optimize the throughput, latency, and power consumption of your system in different scenarios.</p></div>
</div>
</div>
<h1 id="getting-started-with-tuned_tuned-documentation">Getting started with TuneD</h1>
<div class="paragraph _abstract"><p>As a system administrator, you can use the <strong>TuneD</strong> application to optimize the performance profile of your system for a variety of use cases.</p></div>
<h1 id="the-purpose-of-tuned_getting-started-with-tuned">The purpose of TuneD</h1>
<div class="paragraph _abstract"><p><strong>TuneD</strong> is a service that monitors your system and optimizes the performance under certain workloads. The core of <strong>TuneD</strong> are <em>profiles</em>, which tune your system for different use cases.</p></div>
<div class="paragraph"><p><strong>TuneD</strong> is distributed with a number of predefined profiles for use cases such as:</p></div>
<div class="ulist"><ul>
<li>
<p>
High throughput
</p>
</li>
<li>
<p>
Low latency
</p>
</li>
<li>
<p>
Saving power
</p>
</li>
</ul></div>
<div class="paragraph"><p>It is possible to modify the rules defined for each profile and customize how to tune a particular device. When you switch to another profile or deactivate <strong>TuneD</strong>, all changes made to the system settings by the previous profile revert back to their original state.</p></div>
<div class="paragraph"><p>You can also configure <strong>TuneD</strong> to react to changes in device usage and adjusts settings to improve performance of active devices and reduce power consumption of inactive devices.</p></div>
<h1 id="tuned-profiles_getting-started-with-tuned">TuneD profiles</h1>
<div class="paragraph _abstract"><p>A detailed analysis of a system can be very time-consuming. <strong>TuneD</strong> provides a number of predefined profiles for typical use cases. You can also create, modify, and delete profiles.</p></div>
<div class="paragraph"><p>The profiles provided with <strong>TuneD</strong> are divided into the following categories:</p></div>
<div class="ulist"><ul>
<li>
<p>
Power-saving profiles
</p>
</li>
<li>
<p>
Performance-boosting profiles
</p>
</li>
</ul></div>
<div class="paragraph"><p>The performance-boosting profiles include profiles that focus on the following aspects:</p></div>
<div class="ulist"><ul>
<li>
<p>
Low latency for storage and network
</p>
</li>
<li>
<p>
High throughput for storage and network
</p>
</li>
<li>
<p>
Virtual machine performance
</p>
</li>
<li>
<p>
Virtualization host performance
</p>
</li>
</ul></div>
<div class="paragraph"><p>The <code>tuned.conf</code> file can contain one <code>[main]</code> section and other sections for configuring plug-in instances. However, all sections are optional.</p></div>
<div class="paragraph"><p>Lines starting with the hash sign (<code>#</code>) are comments.</p></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="the-default-tuned-profile_getting-started-with-tuned">The default TuneD profile</h1>
<div class="paragraph _abstract"><p>During the installation, the best profile for your system is selected automatically. Currently, the default profile is selected according to the following customizable rules:</p></div>
<div class="tableblock">
<table rules="all"
width="100%"
frame="border"
cellspacing="0" cellpadding="4">
<col width="28%" />
<col width="28%" />
<col width="42%" />
<thead>
<tr>
<th align="left" valign="top"> Environment </th>
<th align="left" valign="top"> Default profile </th>
<th align="left" valign="top"> Goal</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p class="table">Compute nodes</p></td>
<td align="left" valign="top"><p class="table"><code>throughput-performance</code></p></td>
<td align="left" valign="top"><p class="table">The best throughput performance</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">Virtual machines</p></td>
<td align="left" valign="top"><p class="table"><code>virtual-guest</code></p></td>
<td align="left" valign="top"><p class="table">The best performance. If you are not interested in the best performance, you can change it to the <code>balanced</code> or <code>powersave</code> profile.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">Other cases</p></td>
<td align="left" valign="top"><p class="table"><code>balanced</code></p></td>
<td align="left" valign="top"><p class="table">Balanced performance and power consumption</p></td>
</tr>
</tbody>
</table>
</div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="merged-tuned-profiles_getting-started-with-tuned">Merged TuneD profiles</h1>
<div class="paragraph _abstract"><p>As an experimental feature, it is possible to select more profiles at once. <strong>TuneD</strong> will try to merge them during the load.</p></div>
<div class="paragraph"><p>If there are conflicts, the settings from the last specified profile takes precedence.</p></div>
<div class="exampleblock">
<div class="title">Example 1. Low power consumption in a virtual guest</div>
<div class="content">
<div class="paragraph"><p>The following example optimizes the system to run in a virtual machine for the best performance and concurrently tunes it for low power consumption, while the low power consumption is the priority:</p></div>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile virtual-guest powersave</code></pre>
</div></div>
</div></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">Merging is done automatically without checking whether the resulting combination of parameters makes sense. Consequently, the feature might tune some parameters the opposite way, which might be counterproductive: for example, setting the disk for high throughput by using the <code>throughput-performance</code> profile and concurrently setting the disk spindown to the low value by the <code>spindown-disk</code> profile.</td>
</tr></table>
</div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="the-location-of-tuned-profiles_getting-started-with-tuned">The location of TuneD profiles</h1>
<div class="paragraph _abstract"><p><strong>TuneD</strong> stores profiles in the following directories:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
[filename]<code>/usr/lib/tuned/</code>
</dt>
<dd>
<p>
Distribution-specific profiles are stored in the [filename]<code>/usr/lib/tuned/</code> directory. Each profile has its own directory. The profile consists of the main configuration file called <code>tuned.conf</code>, and optionally other files, for example helper scripts.
</p>
</dd>
<dt class="hdlist1">
[filename]<code>/etc/tuned/</code>
</dt>
<dd>
<p>
If you need to customize a profile, copy the profile directory into the [filename]<code>/etc/tuned/</code> directory, which is used for custom profiles, and then adjust it. If there is a system profile and a custom profile of the same name, the custom profile located in [filename]<code>/etc/tuned/</code> is used.
</p>
</dd>
</dl></div>
<div class="exampleblock">
<div class="title">Example 2. User-defined profile directories</div>
<div class="content">
<div class="paragraph"><p>If you want to make TuneD load profiles from a directory other than [filename]<code>/usr/lib/tuned/</code> and [filename]<code>/etc/tuned/</code>, you can list it in [filename]<code>/etc/tuned/tuned-main.conf</code> as follows:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>profile_dirs=/usr/lib/tuned,/etc/tuned,/my/custom/profiles</code></pre>
</div></div>
<div class="paragraph"><p>In this example, profiles are loaded also from [filename]<code>/my/custom/profiles/</code>. If two directories contain profiles with the same names, the one that is listed later takes precedence.</p></div>
</div></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="tuned-profiles-distributed-with-rhel_getting-started-with-tuned">TuneD profiles distributed with RHEL</h1>
<div class="paragraph _abstract"><p>The following is a list of profiles that are installed with <strong>TuneD</strong> on Red&#160;Hat Enterprise&#160;Linux.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">There might be more product-specific or third-party <strong>TuneD</strong> profiles available. Such profiles are usually provided by separate RPM packages.</td>
</tr></table>
</div>
<div class="dlist"><dl>
<dt class="hdlist1">
<code>balanced</code>
</dt>
<dd>
<p>
The default power-saving profile. It is intended to be a compromise between performance and power consumption. It uses auto-scaling and auto-tuning whenever possible. The only drawback is the increased latency. In the current <strong>TuneD</strong> release, it enables the CPU, disk, audio, and video plugins, and activates the <code>conservative</code> CPU governor. The <code>radeon_powersave</code> option uses the <code>dpm-balanced</code> value if it is supported, otherwise it is set to <code>auto</code>.
</p>
<div class="paragraph"><p>It changes the <code>energy_performance_preference</code> attribute to the <code>normal</code> energy setting. It also changes the <code>scaling_governor</code> policy attribute to either the <code>conservative</code> or <code>powersave</code> CPU governor.</p></div>
</dd>
<dt class="hdlist1">
<code>powersave</code>
</dt>
<dd>
<p>
A profile for maximum power saving performance. It can throttle the performance in order to minimize the actual power consumption. In the current <strong>TuneD</strong> release it enables USB autosuspend, WiFi power saving, and Aggressive Link Power Management (ALPM) power savings for SATA host adapters. It also schedules multi-core power savings for systems with a low wakeup rate and activates the <code>ondemand</code> governor. It enables AC97 audio power saving or, depending on your system, HDA-Intel power savings with a 10 seconds timeout. If your system contains a supported Radeon graphics card with enabled KMS, the profile configures it to automatic power saving. On ASUS Eee PCs, a dynamic Super Hybrid Engine is enabled.
</p>
<div class="paragraph"><p>It changes the <code>energy_performance_preference</code> attribute to the <code>powersave</code> or <code>power</code> energy setting. It also changes the <code>scaling_governor</code> policy attribute to either the <code>ondemand</code> or <code>powersave</code> CPU governor.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph"><p>In certain cases, the <code>balanced</code> profile is more efficient compared to the <code>powersave</code> profile.</p></div>
<div class="paragraph"><p>Consider there is a defined amount of work that needs to be done, for example a video file that needs to be transcoded. Your machine might consume less energy if the transcoding is done on the full power, because the task is finished quickly, the machine starts to idle, and it can automatically step-down to very efficient power save modes. On the other hand, if you transcode the file with a throttled machine, the machine consumes less power during the transcoding, but the process takes longer and the overall consumed energy can be higher.</p></div>
<div class="paragraph"><p>That is why the <code>balanced</code> profile can be generally a better option.</p></div>
</td>
</tr></table>
</div>
</dd>
<dt class="hdlist1">
<code>throughput-performance</code>
</dt>
<dd>
<p>
A server profile optimized for high throughput. It disables power savings mechanisms and enables <code>sysctl</code> settings that improve the throughput performance of the disk and network IO. CPU governor is set to <code>performance</code>.
</p>
<div class="paragraph"><p>It changes the <code>energy_performance_preference</code> and <code>scaling_governor</code> attribute to the <code>performance</code> profile.</p></div>
</dd>
<dt class="hdlist1">
<code>accelerator-performance</code>
</dt>
<dd>
<p>
The <code>accelerator-performance</code> profile contains the same tuning as the <code>throughput-performance</code> profile. Additionally, it locks the CPU to low C states so that the latency is less than 100us. This improves the performance of certain accelerators, such as GPUs.
</p>
</dd>
<dt class="hdlist1">
<code>latency-performance</code>
</dt>
<dd>
<p>
A server profile optimized for low latency. It disables power savings mechanisms and enables <code>sysctl</code> settings that improve latency. CPU governor is set to <code>performance</code> and the CPU is locked to the low C states (by PM QoS).
</p>
<div class="paragraph"><p>It changes the <code>energy_performance_preference</code> and <code>scaling_governor</code> attribute to the <code>performance</code> profile.</p></div>
</dd>
<dt class="hdlist1">
<code>network-latency</code>
</dt>
<dd>
<p>
A profile for low latency network tuning. It is based on the <code>latency-performance</code> profile. It additionally disables transparent huge pages and NUMA balancing, and tunes several other network-related <code>sysctl</code> parameters.
</p>
<div class="paragraph"><p>It inherits the <code>latency-performance</code> profile which changes the <code>energy_performance_preference</code> and <code>scaling_governor</code> attribute to the <code>performance</code> profile.</p></div>
</dd>
<dt class="hdlist1">
<code>hpc-compute</code>
</dt>
<dd>
<p>
A profile optimized for high-performance computing. It is based on the <code>latency-performance</code> profile.
</p>
</dd>
<dt class="hdlist1">
<code>network-throughput</code>
</dt>
<dd>
<p>
A profile for throughput network tuning. It is based on the <code>throughput-performance</code> profile. It additionally increases kernel network buffers.
</p>
<div class="paragraph"><p>It inherits either the <code>latency-performance</code> or <code>throughput-performance</code> profile, and changes the <code>energy_performance_preference</code> and <code>scaling_governor</code> attribute to the <code>performance</code> profile.</p></div>
</dd>
<dt class="hdlist1">
<code>virtual-guest</code>
</dt>
<dd>
<p>
A profile designed for virtual guests based on the <code>throughput-performance</code> profile that, among other tasks, decreases virtual memory swappiness and increases disk readahead values. It does not disable disk barriers.
</p>
<div class="paragraph"><p>It inherits the <code>throughput-performance</code> profile and changes the <code>energy_performance_preference</code> and <code>scaling_governor</code> attribute to the <code>performance</code> profile.</p></div>
</dd>
<dt class="hdlist1">
<code>virtual-host</code>
</dt>
<dd>
<p>
A profile designed for virtual hosts based on the <code>throughput-performance</code> profile that, among other tasks, decreases virtual memory swappiness, increases disk readahead values, and enables a more aggressive value of dirty pages writeback.
</p>
<div class="paragraph"><p>It inherits the <code>throughput-performance</code> profile and changes the <code>energy_performance_preference</code> and <code>scaling_governor</code> attribute to the <code>performance</code> profile.</p></div>
</dd>
<dt class="hdlist1">
<code>oracle</code>
</dt>
<dd>
<p>
A profile optimized for Oracle databases loads based on <code>throughput-performance</code> profile. It additionally disables transparent huge pages and modifies other performance-related kernel parameters. This profile is provided by the [package]<code>tuned-profiles-oracle</code> package.
</p>
</dd>
<dt class="hdlist1">
<code>desktop</code>
</dt>
<dd>
<p>
A profile optimized for desktops, based on the <code>balanced</code> profile. It additionally enables scheduler autogroups for better response of interactive applications.
</p>
</dd>
<dt class="hdlist1">
<code>cpu-partitioning</code>
</dt>
<dd>
<p>
The <code>cpu-partitioning</code> profile partitions the system CPUs into isolated and housekeeping CPUs. To reduce jitter and interruptions on an isolated CPU, the profile clears the isolated CPU from user-space processes, movable kernel threads, interrupt handlers, and kernel timers.
</p>
<div class="paragraph"><p>A housekeeping CPU can run all services, shell processes, and kernel threads.</p></div>
<div class="paragraph"><p>You can configure the <code>cpu-partitioning</code> profile in <code>/etc/tuned/cpu-partitioning-variables.conf</code> file. The configuration options are:</p></div>
<div class="openblock">
<div class="content">
<div class="dlist"><dl>
<dt class="hdlist1">
<code>isolated_cores=_cpu-list_</code>
</dt>
<dd>
<p>
Lists CPUs to isolate. The list of isolated CPUs is comma-separated or the user can specify the range. You can specify a range using a dash, such as <code>3-5</code>. This option is mandatory. Any CPU missing from this list is automatically considered a housekeeping CPU.
</p>
</dd>
<dt class="hdlist1">
<code>no_balance_cores=_cpu-list_</code>
</dt>
<dd>
<p>
Lists CPUs which are not considered by the kernel during system wide process load-balancing. This option is optional. This is usually the same list as <code>isolated_cores</code>.
</p>
</dd>
</dl></div>
</div></div>
<div class="paragraph"><p>For more information on <code>cpu-partitioning</code>, see the <code>tuned-profiles-cpu-partitioning(7)</code> man page.</p></div>
</dd>
<dt class="hdlist1">
<code>optimize-serial-console</code>
</dt>
<dd>
<p>
A profile that tunes down I/O activity to the serial console by reducing the
printk value. This should make the serial console more responsive.
This profile is intended to be used as an overlay on other
profiles. For example:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile throughput-performance optimize-serial-console</code></pre>
</div></div>
</dd>
<dt class="hdlist1">
<code>mssql</code>
</dt>
<dd>
<p>
A profile provided for Microsoft SQL Server. It is based on the <code>thoguhput-performance</code> profile.
</p>
</dd>
<dt class="hdlist1">
<code>postgresql</code>
</dt>
<dd>
<p>
A profile optimized for PostgreSQL databases loads based on <code>throughput-performance</code> profile. It additionally disables transparent huge pages and modifies other performance-related kernel parameters. This profile is provided by the [package]<code>tuned-profiles-postgresql</code> package.
</p>
</dd>
<dt class="hdlist1">
<code>intel-sst</code>
</dt>
<dd>
<p>
A profile optimized for systems with user-defined Intel Speed Select Technology configurations. This profile is intended to be used as an overlay on other profiles. For example:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile cpu-partitioning intel-sst</code></pre>
</div></div>
</dd>
</dl></div>
<h1 id="real-time-tuned-profiles-distributed-with-rhel_getting-started-with-tuned">Real-time TuneD profiles distributed with RHEL</h1>
<div class="paragraph _abstract"><p>Real-time profiles are intended for systems running the real-time kernel. Without a special kernel build, they do not configure the system to be real-time. On RHEL, the profiles are available from additional repositories.</p></div>
<div class="paragraph"><p>The following real-time profiles are available:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<code>realtime</code>
</dt>
<dd>
<p>
Use on bare-metal real-time systems.
</p>
<div class="paragraph"><p>Provided by the [package]<code>tuned-profiles-realtime</code> package, which is available from the RT or NFV repositories.</p></div>
</dd>
<dt class="hdlist1">
<code>realtime-virtual-host</code>
</dt>
<dd>
<p>
Use in a virtualization host configured for real-time.
</p>
<div class="paragraph"><p>Provided by the [package]<code>tuned-profiles-nfv-host</code> package, which is available from the NFV repository.</p></div>
</dd>
<dt class="hdlist1">
<code>realtime-virtual-guest</code>
</dt>
<dd>
<p>
Use in a virtualization guest configured for real-time.
</p>
<div class="paragraph"><p>Provided by the [package]<code>tuned-profiles-nfv-guest</code> package, which is available from the NFV repository.</p></div>
</dd>
</dl></div>
<h1 id="static-and-dynamic-tuning-in-tuned_getting-started-with-tuned">Static and dynamic tuning in TuneD</h1>
<div class="paragraph _abstract"><p>This section explains the difference between the two categories of system tuning that <strong>TuneD</strong> applies: <em>static</em> and <em>dynamic</em>.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
Static tuning
</dt>
<dd>
<p>
Mainly consists of the application of predefined <code>sysctl</code> and <code>sysfs</code> settings and one-shot activation of several configuration tools such as <code>ethtool</code>.
</p>
</dd>
<dt class="hdlist1">
Dynamic tuning
</dt>
<dd>
<p>
Watches how various system components are used throughout the uptime of your system. <strong>TuneD</strong> adjusts system settings dynamically based on that monitoring information.
</p>
<div class="paragraph"><p>For example, the hard drive is used heavily during startup and login, but is barely used later when the user might mainly work with applications such as web browsers or email clients. Similarly, the CPU and network devices are used differently at different times. <strong>TuneD</strong> monitors the activity of these components and reacts to the changes in their use.</p></div>
<div class="paragraph"><p>By default, dynamic tuning is disabled. To enable it, edit the [filename]<code>/etc/tuned/tuned-main.conf</code> file and change the [option]<code>dynamic_tuning</code> option to <code>1</code>. <strong>TuneD</strong> then periodically analyzes system statistics and uses them to update your system tuning settings. To configure the time interval in seconds between these updates, use the [option]<code>update_interval</code> option.</p></div>
<div class="paragraph"><p>Currently implemented dynamic tuning algorithms try to balance the performance and powersave, and are therefore disabled in the performance profiles. Dynamic tuning for individual plug-ins can be enabled or disabled in the <strong>TuneD</strong> profiles.</p></div>
</dd>
</dl></div>
<div class="exampleblock">
<div class="title">Example 3. Static and dynamic tuning on a workstation</div>
<div class="content">
<div class="paragraph"><p>On a typical office workstation, the Ethernet network interface is inactive most of the time. Only a few emails go in and out or some web pages might be loaded.</p></div>
<div class="paragraph"><p>For those kinds of loads, the network interface does not have to run at full speed all the time, as it does by default. <strong>TuneD</strong> has a monitoring and tuning plug-in for network devices that can detect this low activity and then automatically lower the speed of that interface, typically resulting in a lower power usage.</p></div>
<div class="paragraph"><p>If the activity on the interface increases for a longer period of time, for example because a DVD image is being downloaded or an email with a large attachment is opened, <strong>TuneD</strong> detects this and sets the interface speed to maximum to offer the best performance while the activity level is high.</p></div>
<div class="paragraph"><p>This principle is used for other plug-ins for CPU and disks as well.</p></div>
</div></div>
<h1 id="tuned-no-daemon-mode_getting-started-with-tuned">TuneD no-daemon mode</h1>
<div class="paragraph _abstract"><p>You can run <strong>TuneD</strong> in <code>no-daemon</code> mode, which does not require any resident memory. In this mode, <strong>TuneD</strong> applies the settings and exits.</p></div>
<div class="paragraph"><p>By default, <code>no-daemon</code> mode is disabled because a lot of <strong>TuneD</strong> functionality is missing in this mode, including:</p></div>
<div class="ulist"><ul>
<li>
<p>
D-Bus support
</p>
</li>
<li>
<p>
Hot-plug support
</p>
</li>
<li>
<p>
Rollback support for settings
</p>
</li>
</ul></div>
<div class="paragraph"><p>To enable <code>no-daemon</code> mode, include the following line in the [filename]<code>/etc/tuned/tuned-main.conf</code> file:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>daemon = 0</code></pre>
</div></div>
<h1 id="installing-and-enabling-tuned_getting-started-with-tuned">Installing and enabling TuneD</h1>
<div class="paragraph _abstract"><p>This procedure installs and enables the <strong>TuneD</strong> application, installs <strong>TuneD</strong> profiles, and presets a default <strong>TuneD</strong> profile for your system.</p></div>
<div class="olist arabic"><div class="title">Procedure</div><ol class="arabic">
<li>
<p>
Install the [package]<code>tuned</code> package:
</p>
<div class="listingblock">
<div class="content">
<pre><code># yum install tuned</code></pre>
</div></div>
</li>
<li>
<p>
Enable and start the <code>tuned</code> service:
</p>
<div class="listingblock">
<div class="content">
<pre><code># systemctl enable --now tuned</code></pre>
</div></div>
</li>
<li>
<p>
Optionally, install <strong>TuneD</strong> profiles for real-time systems:
</p>
<div class="listingblock">
<div class="content">
<pre><code># yum install tuned-profiles-realtime tuned-profiles-nfv</code></pre>
</div></div>
</li>
<li>
<p>
Verify that a <strong>TuneD</strong> profile is active and applied:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm active

Current active profile: <em><span class="replaceable">balanced</span></em></code></pre>
</div></div>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm verify

Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.</code></pre>
</div></div>
</li>
</ol></div>
<h1 id="listing-available-tuned-profiles_getting-started-with-tuned">Listing available TuneD profiles</h1>
<div class="paragraph _abstract"><p>This procedure lists all <strong>TuneD</strong> profiles that are currently available on your system.</p></div>
<div class="ulist"><div class="title">Procedure</div><ul>
<li>
<p>
To list all available <strong>TuneD</strong> profiles on your system, use:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ <strong>tuned-adm list</strong>

Available profiles:
- balanced               - General non-specialized tuned profile
- desktop                - Optimize for the desktop use-case
- latency-performance    - Optimize for deterministic performance at the cost of increased power consumption
- network-latency        - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput     - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- powersave              - Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest          - Optimize for running inside a virtual guest
- virtual-host           - Optimize for running KVM guests
Current active profile: <em><span class="replaceable">balanced</span></em></code></pre>
</div></div>
</li>
<li>
<p>
To display only the currently active profile, use:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ <strong>tuned-adm active</strong>

Current active profile: <em><span class="replaceable">balanced</span></em></code></pre>
</div></div>
</li>
</ul></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
The <code>tuned-adm(8)</code> man page.
</p>
</li>
</ul></div>
<h1 id="setting-a-tuned-profile_getting-started-with-tuned">Setting a TuneD profile</h1>
<div class="paragraph _abstract"><p>This procedure activates a selected <strong>TuneD</strong> profile on your system.</p></div>
<div class="ulist"><div class="title">Prerequisites</div><ul>
<li>
<p>
The <code>tuned</code> service is running. See <a href="#installing-and-enabling-tuned_getting-started-with-tuned">Installing and Enabling Tuned</a> for details.
</p>
</li>
</ul></div>
<div class="olist arabic"><div class="title">Procedure</div><ol class="arabic">
<li>
<p>
Optionally, you can let <strong>TuneD</strong> recommend the most suitable profile for your system:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm recommend

<em><span class="replaceable">balanced</span></em></code></pre>
</div></div>
</li>
<li>
<p>
Activate a profile:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile <em><span class="replaceable">selected-profile</span></em></code></pre>
</div></div>
<div class="paragraph"><p>Alternatively, you can activate a combination of multiple profiles:</p></div>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile <em><span class="replaceable">profile1</span></em> <em><span class="replaceable">profile2</span></em></code></pre>
</div></div>
<div class="exampleblock">
<div class="title">Example 4. A virtual machine optimized for low power consumption</div>
<div class="content">
<div class="paragraph"><p>The following example optimizes the system to run in a virtual machine with the best performance and concurrently tunes it for low power consumption, while the low power consumption is the priority:</p></div>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile virtual-guest powersave</code></pre>
</div></div>
</div></div>
</li>
<li>
<p>
View the current active <strong>TuneD</strong> profile on your system:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm active

Current active profile: <em><span class="replaceable">selected-profile</span></em></code></pre>
</div></div>
</li>
<li>
<p>
Reboot the system:
</p>
<div class="listingblock">
<div class="content">
<pre><code># reboot</code></pre>
</div></div>
</li>
</ol></div>
<div class="ulist"><div class="title">Verification steps</div><ul>
<li>
<p>
Verify that the <strong>TuneD</strong> profile is active and applied:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm verify

Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.</code></pre>
</div></div>
</li>
</ul></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned-adm(8)</code> man page
</p>
</li>
</ul></div>
<h1 id="disabling-tuned_getting-started-with-tuned">Disabling TuneD</h1>
<div class="paragraph _abstract"><p>This procedure disables <strong>TuneD</strong> and resets all affected system settings to their original state before <strong>TuneD</strong> modified them.</p></div>
<div class="ulist"><div class="title">Procedure</div><ul>
<li>
<p>
To disable all tunings temporarily:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm off</code></pre>
</div></div>
<div class="paragraph"><p>The tunings are applied again after the <code>tuned</code> service restarts.</p></div>
</li>
<li>
<p>
Alternatively, to stop and disable the <code>tuned</code> service permanently:
</p>
<div class="listingblock">
<div class="content">
<pre><code># systemctl disable --now tuned</code></pre>
</div></div>
</li>
</ul></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned-adm(8)</code> man page
</p>
</li>
</ul></div>
<div class="sect1">
<h2 id="related-information-getting-started-with-tuned">Related information</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
The <code>tuned(8)</code> man page
</p>
</li>
<li>
<p>
The <code>tuned-adm(8)</code> man page
</p>
</li>
<li>
<p>
The <strong>TuneD</strong> project website: <a href="https://tuned-project.org/">https://tuned-project.org/</a>
</p>
</li>
</ul></div>
</div>
</div>
<h1 id="customizing-tuned-profiles_tuned-documentation">Customizing TuneD profiles</h1>
<div class="paragraph _abstract"><p>You can create or modify <strong>TuneD</strong> profiles to optimize system performance for your intended use case.</p></div>
<div class="ulist"><div class="title">Prerequisites</div><ul>
<li>
<p>
Install and enable <strong>TuneD</strong> as described in <a href="#installing-and-enabling-tuned_getting-started-with-tuned">Installing and Enabling Tuned</a> for details.
</p>
</li>
</ul></div>
<h1 id="tuned-profiles_customizing-tuned-profiles">TuneD profiles</h1>
<div class="paragraph _abstract"><p>A detailed analysis of a system can be very time-consuming. <strong>TuneD</strong> provides a number of predefined profiles for typical use cases. You can also create, modify, and delete profiles.</p></div>
<div class="paragraph"><p>The profiles provided with <strong>TuneD</strong> are divided into the following categories:</p></div>
<div class="ulist"><ul>
<li>
<p>
Power-saving profiles
</p>
</li>
<li>
<p>
Performance-boosting profiles
</p>
</li>
</ul></div>
<div class="paragraph"><p>The performance-boosting profiles include profiles that focus on the following aspects:</p></div>
<div class="ulist"><ul>
<li>
<p>
Low latency for storage and network
</p>
</li>
<li>
<p>
High throughput for storage and network
</p>
</li>
<li>
<p>
Virtual machine performance
</p>
</li>
<li>
<p>
Virtualization host performance
</p>
</li>
</ul></div>
<div class="paragraph"><p>The <code>tuned.conf</code> file can contain one <code>[main]</code> section and other sections for configuring plug-in instances. However, all sections are optional.</p></div>
<div class="paragraph"><p>Lines starting with the hash sign (<code>#</code>) are comments.</p></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="the-default-tuned-profile_customizing-tuned-profiles">The default TuneD profile</h1>
<div class="paragraph _abstract"><p>During the installation, the best profile for your system is selected automatically. Currently, the default profile is selected according to the following customizable rules:</p></div>
<div class="tableblock">
<table rules="all"
width="100%"
frame="border"
cellspacing="0" cellpadding="4">
<col width="28%" />
<col width="28%" />
<col width="42%" />
<thead>
<tr>
<th align="left" valign="top"> Environment </th>
<th align="left" valign="top"> Default profile </th>
<th align="left" valign="top"> Goal</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p class="table">Compute nodes</p></td>
<td align="left" valign="top"><p class="table"><code>throughput-performance</code></p></td>
<td align="left" valign="top"><p class="table">The best throughput performance</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">Virtual machines</p></td>
<td align="left" valign="top"><p class="table"><code>virtual-guest</code></p></td>
<td align="left" valign="top"><p class="table">The best performance. If you are not interested in the best performance, you can change it to the <code>balanced</code> or <code>powersave</code> profile.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">Other cases</p></td>
<td align="left" valign="top"><p class="table"><code>balanced</code></p></td>
<td align="left" valign="top"><p class="table">Balanced performance and power consumption</p></td>
</tr>
</tbody>
</table>
</div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="merged-tuned-profiles_customizing-tuned-profiles">Merged TuneD profiles</h1>
<div class="paragraph _abstract"><p>As an experimental feature, it is possible to select more profiles at once. <strong>TuneD</strong> will try to merge them during the load.</p></div>
<div class="paragraph"><p>If there are conflicts, the settings from the last specified profile takes precedence.</p></div>
<div class="exampleblock">
<div class="title">Example 5. Low power consumption in a virtual guest</div>
<div class="content">
<div class="paragraph"><p>The following example optimizes the system to run in a virtual machine for the best performance and concurrently tunes it for low power consumption, while the low power consumption is the priority:</p></div>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile virtual-guest powersave</code></pre>
</div></div>
</div></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">Merging is done automatically without checking whether the resulting combination of parameters makes sense. Consequently, the feature might tune some parameters the opposite way, which might be counterproductive: for example, setting the disk for high throughput by using the <code>throughput-performance</code> profile and concurrently setting the disk spindown to the low value by the <code>spindown-disk</code> profile.</td>
</tr></table>
</div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="the-location-of-tuned-profiles_customizing-tuned-profiles">The location of TuneD profiles</h1>
<div class="paragraph _abstract"><p><strong>TuneD</strong> stores profiles in the following directories:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
[filename]<code>/usr/lib/tuned/</code>
</dt>
<dd>
<p>
Distribution-specific profiles are stored in the [filename]<code>/usr/lib/tuned/</code> directory. Each profile has its own directory. The profile consists of the main configuration file called <code>tuned.conf</code>, and optionally other files, for example helper scripts.
</p>
</dd>
<dt class="hdlist1">
[filename]<code>/etc/tuned/</code>
</dt>
<dd>
<p>
If you need to customize a profile, copy the profile directory into the [filename]<code>/etc/tuned/</code> directory, which is used for custom profiles, and then adjust it. If there is a system profile and a custom profile of the same name, the custom profile located in [filename]<code>/etc/tuned/</code> is used.
</p>
</dd>
</dl></div>
<div class="exampleblock">
<div class="title">Example 6. User-defined profile directories</div>
<div class="content">
<div class="paragraph"><p>If you want to make TuneD load profiles from a directory other than [filename]<code>/usr/lib/tuned/</code> and [filename]<code>/etc/tuned/</code>, you can list it in [filename]<code>/etc/tuned/tuned-main.conf</code> as follows:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>profile_dirs=/usr/lib/tuned,/etc/tuned,/my/custom/profiles</code></pre>
</div></div>
<div class="paragraph"><p>In this example, profiles are loaded also from [filename]<code>/my/custom/profiles/</code>. If two directories contain profiles with the same names, the one that is listed later takes precedence.</p></div>
</div></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page.
</p>
</li>
</ul></div>
<h1 id="inheritance-between-tuned-profiles_customizing-tuned-profiles">Inheritance between TuneD profiles</h1>
<div class="paragraph _abstract"><p><strong>TuneD</strong> profiles can be based on other profiles and modify only certain aspects of their parent profile.</p></div>
<div class="paragraph"><p>The <code>[main]</code> section of <strong>TuneD</strong> profiles recognizes the [option]<code>include</code> option:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=<em><span class="replaceable">parent</span></em></code></pre>
</div></div>
<div class="paragraph"><p>All settings from the <em><span class="replaceable">parent</span></em> profile are loaded in this <em>child</em> profile. In the following sections, the <em>child</em> profile can override certain settings inherited from the <em><span class="replaceable">parent</span></em> profile or add new settings not present in the <em><span class="replaceable">parent</span></em> profile.</p></div>
<div class="paragraph"><p>You can create your own <em>child</em> profile in the [filename]<code>/etc/tuned/</code> directory based on a pre-installed profile in [filename]<code>/usr/lib/tuned/</code> with only some parameters adjusted.</p></div>
<div class="paragraph"><p>If the <em><span class="replaceable">parent</span></em> profile is updated, such as after a <strong>TuneD</strong> upgrade, the changes are reflected in the <em>child</em> profile.</p></div>
<div class="exampleblock">
<div class="title">Example 7. A power-saving profile based on balanced</div>
<div class="content">
<div class="paragraph"><p>The following is an example of a custom profile that extends the <code>balanced</code> profile and disables the capability of the CPU to boost above nominal frequencies for brief periods.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=balanced

[cpu]
boost=0</code></pre>
</div></div>
</div></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page
</p>
</li>
</ul></div>
<h1 id="static-and-dynamic-tuning-in-tuned_customizing-tuned-profiles">Static and dynamic tuning in TuneD</h1>
<div class="paragraph _abstract"><p>This section explains the difference between the two categories of system tuning that <strong>TuneD</strong> applies: <em>static</em> and <em>dynamic</em>.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
Static tuning
</dt>
<dd>
<p>
Mainly consists of the application of predefined <code>sysctl</code> and <code>sysfs</code> settings and one-shot activation of several configuration tools such as <code>ethtool</code>.
</p>
</dd>
<dt class="hdlist1">
Dynamic tuning
</dt>
<dd>
<p>
Watches how various system components are used throughout the uptime of your system. <strong>TuneD</strong> adjusts system settings dynamically based on that monitoring information.
</p>
<div class="paragraph"><p>For example, the hard drive is used heavily during startup and login, but is barely used later when the user might mainly work with applications such as web browsers or email clients. Similarly, the CPU and network devices are used differently at different times. <strong>TuneD</strong> monitors the activity of these components and reacts to the changes in their use.</p></div>
<div class="paragraph"><p>By default, dynamic tuning is disabled. To enable it, edit the [filename]<code>/etc/tuned/tuned-main.conf</code> file and change the [option]<code>dynamic_tuning</code> option to <code>1</code>. <strong>TuneD</strong> then periodically analyzes system statistics and uses them to update your system tuning settings. To configure the time interval in seconds between these updates, use the [option]<code>update_interval</code> option.</p></div>
<div class="paragraph"><p>Currently implemented dynamic tuning algorithms try to balance the performance and powersave, and are therefore disabled in the performance profiles. Dynamic tuning for individual plug-ins can be enabled or disabled in the <strong>TuneD</strong> profiles.</p></div>
</dd>
</dl></div>
<div class="exampleblock">
<div class="title">Example 8. Static and dynamic tuning on a workstation</div>
<div class="content">
<div class="paragraph"><p>On a typical office workstation, the Ethernet network interface is inactive most of the time. Only a few emails go in and out or some web pages might be loaded.</p></div>
<div class="paragraph"><p>For those kinds of loads, the network interface does not have to run at full speed all the time, as it does by default. <strong>TuneD</strong> has a monitoring and tuning plug-in for network devices that can detect this low activity and then automatically lower the speed of that interface, typically resulting in a lower power usage.</p></div>
<div class="paragraph"><p>If the activity on the interface increases for a longer period of time, for example because a DVD image is being downloaded or an email with a large attachment is opened, <strong>TuneD</strong> detects this and sets the interface speed to maximum to offer the best performance while the activity level is high.</p></div>
<div class="paragraph"><p>This principle is used for other plug-ins for CPU and disks as well.</p></div>
</div></div>
<h1 id="tuned-plug-ins_customizing-tuned-profiles">TuneD plug-ins</h1>
<div class="paragraph _abstract"><p>Plug-ins are modules in <strong>TuneD</strong> profiles that <strong>TuneD</strong> uses to monitor or optimize different devices on the system.</p></div>
<div class="paragraph"><p><strong>TuneD</strong> uses two types of plug-ins:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
Monitoring plug-ins
</dt>
<dd>
<p>
Monitoring plug-ins are used to get information from a running system. The output of the monitoring plug-ins can be used by tuning plug-ins for dynamic tuning.
</p>
<div class="paragraph"><p>Monitoring plug-ins are automatically instantiated whenever their metrics are needed by any of the enabled tuning plug-ins. If two tuning plug-ins require the same data, only one instance of the monitoring plug-in is created and the data is shared.</p></div>
</dd>
<dt class="hdlist1">
Tuning plug-ins
</dt>
<dd>
<p>
Each tuning plug-in tunes an individual subsystem and takes several parameters that are populated from the TuneD profiles. Each subsystem can have multiple devices, such as multiple CPUs or network cards, that are handled by individual instances of the tuning plug-ins. Specific settings for individual devices are also supported.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>Sections describing plug-in instances are formatted in the following way:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[<em>NAME</em>]
type=<em>TYPE</em>
devices=<em>DEVICES</em></code></pre>
</div></div>
<div class="dlist"><dl>
<dt class="hdlist1">
NAME
</dt>
<dd>
<p>
is the name of the plug-in instance as it is used in the logs. It can be an arbitrary string.
</p>
</dd>
<dt class="hdlist1">
TYPE
</dt>
<dd>
<p>
is the type of the tuning plug-in.
</p>
</dd>
<dt class="hdlist1">
DEVICES
</dt>
<dd>
<p>
is the list of devices that this plug-in instance handles.
</p>
<div class="paragraph"><p>The <code>devices</code> line can contain a list, a wildcard (<code>\*</code>), and negation (<code>!</code>). If there is no <code>devices</code> line, all devices present or later attached on the system of the <em><span class="replaceable">TYPE</span></em> are handled by the plug-in instance. This is same as using the [option]<code>devices=*</code> option.</p></div>
<div class="exampleblock">
<div class="title">Example 9. Matching block devices with a plug-in</div>
<div class="content">
<div class="paragraph"><p>The following example matches all block devices starting with <code>sd</code>, such as <code>sda</code> or <code>sdb</code>, and does not disable barriers on them:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[data_disk]
type=disk
devices=sd*
disable_barriers=false</code></pre>
</div></div>
<div class="paragraph"><p>The following example matches all block devices except <code>sda1</code> and <code>sda2</code>:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[data_disk]
type=disk
devices=!sda1, !sda2
disable_barriers=false</code></pre>
</div></div>
</div></div>
</dd>
</dl></div>
<div class="paragraph"><p>If no instance of a plug-in is specified, the plug-in is not enabled.</p></div>
<div class="paragraph"><p>If the plug-in supports more options, they can be also specified in the plug-in section. If the option is not specified and it was not previously specified in the included plug-in, the default value is used.</p></div>
<div class="paragraph"><p>If you do not need custom names for the plug-in instance and there is only one definition of the instance in your configuration file, <strong>TuneD</strong> supports the following short syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[<em>TYPE</em>]
devices=<em>DEVICES</em></code></pre>
</div></div>
<div class="paragraph"><p>In this case, it is possible to omit the <code>type</code> line. The instance is then referred to with a name, same as the type. The previous example could be then rewritten into:</p></div>
<div class="exampleblock">
<div class="title">Example 10. Matching block devices using the short syntax</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[disk]
devices=sdb*
disable_barriers=false</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>If the same section is specified more than once using the <code>include</code> option, the settings are merged. If they cannot be merged due to a conflict, the last conflicting definition overrides the previous settings. If you do not know what was previously defined, you can use the [option]<code>replace</code> Boolean option and set it to <code>true</code>. This causes all the previous definitions with the same name to be overwritten and the merge does not happen.</p></div>
<div class="paragraph"><p>You can also disable the plug-in by specifying the [option]<code>enabled=false</code> option. This has the same effect as if the instance was never defined. Disabling the plug-in is useful if you are redefining the previous definition from the [option]<code>include</code> option and do not want the plug-in to be active in your custom profile.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
NOTE
</dt>
<dd>
<p>
<strong>TuneD</strong> includes the ability to run any shell command as part of enabling or disabling a tuning profile. This enables you to extend <strong>TuneD</strong> profiles with functionality that has not been integrated into TuneD yet.
</p>
<div class="paragraph"><p>You can specify arbitrary shell commands using the <code>script</code> plug-in.</p></div>
</dd>
</dl></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page
</p>
</li>
</ul></div>
<h1 id="available-tuned-plug-ins_customizing-tuned-profiles">Available TuneD plug-ins</h1>
<div class="paragraph _abstract"><p>This section lists all monitoring and tuning plug-ins currently available in <strong>TuneD</strong>.</p></div>
<div class="sect1">
<h2 id="_strong_acpi_strong"><strong>acpi</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Configures the ACPI driver.</p></div>
<div class="paragraph"><p>The only currently supported option is
[option]<code>platform_profile</code>, which sets the ACPI
platform profile sysfs attribute,
a generic power/performance preference API for other drivers.
Multiple profiles can be specified, separated by <code>|</code>.
The first available profile is selected.</p></div>
<div class="exampleblock">
<div class="title">Example 11. Selecting a platform profile</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[acpi]
platform_profile=balanced|low-power</code></pre>
</div></div>
<div class="paragraph"><p>Using this option, <strong>TuneD</strong> will try to set the platform profile
to <code>balanced</code>. If that fails, it will try to set it to <code>low-power</code>.</p></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_audio_strong"><strong>audio</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Sets audio cards power saving options. The plug-in sets the auto suspend
timeout for audio codecs to the value specified by the [option]<code>timeout</code>
option.</p></div>
<div class="paragraph"><p>Currently, the <code>snd_hda_intel</code> and <code>snd_ac97_codec</code> codecs are
supported and the [option]<code>timeout</code> value is in seconds. To disable
auto suspend for these codecs, set the [option]<code>timeout</code> value
to <code>0</code>. To enforce the controller reset, set the option
[option]<code>reset_controller</code> to <code>true</code>. Note that power management
is supported per module. Hence, the kernel module names are used as
device names.</p></div>
<div class="exampleblock">
<div class="title">Example 12. Set the timeout value to 10s and enforce the controller reset</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[audio]
timeout=10
reset_controller=true</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_bootloader_strong"><strong>bootloader</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Adds options to the kernel command line. This plug-in supports the
GRUB 2 boot loader and the Boot Loader Specification (BLS).</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content"><strong>TuneD</strong> will not remove or replace kernel command line
parameters added via other methods like <strong>grubby</strong>. <strong>TuneD</strong> will manage
the kernel command line parameters added via <strong>TuneD</strong>. Please refer
to your platform bootloader documentation about how to identify and
manage kernel command line parameters set outside of <strong>TuneD</strong>.</td>
</tr></table>
</div>
<div class="paragraph"><p>Customized non-standard location of the GRUB 2 configuration file
can be specified by the [option]<code>grub2_cfg_file</code> option.</p></div>
<div class="paragraph"><p>The kernel options are added to the current GRUB configuration and
its templates. Reboot the system for the kernel option to take effect.</p></div>
<div class="paragraph"><p>Switching to another profile or manually stopping the <code>tuned</code>
service removes the additional options. If you shut down or reboot
the system, the kernel options persist in the [filename]<code>grub.cfg</code>
file and grub environment files.</p></div>
<div class="paragraph"><p>The kernel options can be specified by the following syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>cmdline<em>suffix</em>=<em>arg1</em> <em>arg2</em> ... <em>argN</em></code></pre>
</div></div>
<div class="paragraph"><p>Or with an alternative, but equivalent syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>cmdline<em>suffix</em>=+<em>arg1</em> <em>arg2</em> ... <em>argN</em></code></pre>
</div></div>
<div class="paragraph"><p>Where <em>suffix</em> can be arbitrary (even empty) alphanumeric
string which should be unique across all loaded profiles. It is
recommended to use the profile name as the <em>suffix</em>
(for example, [option]<code>cmdline_my_profile</code>). If there are multiple
[option]<code>cmdline</code> options with the same suffix, during the profile
load/merge the value which was assigned previously will be used. This
is the same behavior as any other plug-in options. The final kernel
command line is constructed by concatenating all the resulting
[option]<code>cmdline</code> options.</p></div>
<div class="paragraph"><p>It is also possible to remove kernel options by the following syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>cmdline<em>suffix</em>=-<em>arg1</em> <em>arg2</em> ... <em>argN</em></code></pre>
</div></div>
<div class="paragraph"><p>Such kernel options will not be concatenated and thus removed during
the final kernel command line construction.</p></div>
<div class="exampleblock">
<div class="title">Example 13. Modifying the kernel command line</div>
<div class="content">
<div class="paragraph"><p>For example, to add the [option]<code>quiet</code> kernel option to a <strong>TuneD</strong>
profile, include the following lines in the [filename]<code>tuned.conf</code>
file:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[bootloader]
cmdline_my_profile=+quiet</code></pre>
</div></div>
<div class="paragraph"><p>An example of a custom profile <code>my_profile</code> that adds the
[option]<code>isolcpus=2</code> option to the kernel command line:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[bootloader]
cmdline_my_profile=isolcpus=2</code></pre>
</div></div>
<div class="paragraph"><p>An example of a custom profile <code>my_profile</code> that removes the
[option]<code>rhgb quiet</code> options from the kernel command line (if
previously added by <strong>TuneD</strong>):</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[bootloader]
cmdline_my_profile=-rhgb quiet</code></pre>
</div></div>
</div></div>
<div class="exampleblock">
<div class="title">Example 14. Modifying the kernel command line, example with inheritance</div>
<div class="content">
<div class="paragraph"><p>For example, to add the [option]<code>rhgb quiet</code> kernel options to a
<strong>TuneD</strong> profile <code>profile_1</code>:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[bootloader]
cmdline_profile_1=+rhgb quiet</code></pre>
</div></div>
<div class="paragraph"><p>In the child profile <code>profile_2</code> drop the [option]<code>quiet</code> option
from the kernel command line:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=profile_1

[bootloader]
cmdline_profile_2=-quiet</code></pre>
</div></div>
<div class="paragraph"><p>The final kernel command line will be [option]<code>rhgb</code>. In case the same
[option]<code>cmdline</code> suffix as in the <code>profile_1</code> is used:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=profile_1

[bootloader]
cmdline_profile_1=-quiet</code></pre>
</div></div>
<div class="paragraph"><p>It will result in the empty kernel command line because the merge
executes and the [option]<code>cmdline_profile_1</code> gets redefined to just
[option]<code>-quiet</code>. Thus there is nothing to remove in the final kernel
command line processing.</p></div>
</div></div>
<div class="paragraph"><p>The [option]<code>initrd_add_img=IMAGE</code> adds an initrd overlay file
<code>IMAGE</code>. If the <code>IMAGE</code> file name begins with <em>/</em>, the absolute path is
used. Otherwise, the current profile directory is used as the base
directory for the <code>IMAGE</code>.</p></div>
<div class="paragraph"><p>The [option]<code>initrd_add_dir=DIR</code> creates an initrd image from the
directory <code>DIR</code> and adds the resulting image as an overlay.
If the <code>DIR</code> directory name begins with <em>/</em>, the absolute path
is used. Otherwise, the current profile directory is used as the
base directory for the <code>DIR</code>.</p></div>
<div class="paragraph"><p>The [option]<code>initrd_dst_img=PATHNAME</code> sets the name and location of
the resulting initrd image. Typically, it is not necessary to use this
option. By default, the location of initrd images is <code>/boot</code> and the
name of the image is taken as the basename of <code>IMAGE</code> or <code>DIR</code>. This can
be overridden by setting [option]<code>initrd_dst_img</code>.</p></div>
<div class="paragraph"><p>The [option]<code>initrd_remove_dir=VALUE</code> removes the source directory
from which the initrd image was built if <code>VALUE</code> is true. Only <em>y</em>,
<em>yes</em>, <em>t</em>, <em>true</em> and <em>1</em> (case insensitive) are accepted as true
values for this option. Other values are interpreted as false.</p></div>
<div class="exampleblock">
<div class="title">Example 15. Adding an overlay initrd image</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[bootloader]
initrd_remove_dir=True
initrd_add_dir=/tmp/tuned-initrd.img</code></pre>
</div></div>
<div class="paragraph"><p>This creates an initrd image from the <code>/tmp/tuned-initrd.img</code> directory
and and then removes the <code>tuned-initrd.img</code> directory from <code>/tmp</code>.</p></div>
</div></div>
<div class="paragraph"><p>The [option]<code>skip_grub_config=VALUE</code> does not change grub
configuration if <code>VALUE</code> is true. However, [option]<code>cmdline</code>
options are still processed, and the result is used to verify the current
cmdline. Only <em>y</em>, <em>yes</em>, <em>t</em>, <em>true</em> and <em>1</em> (case insensitive) are accepted
as true values for this option. Other values are interpreted as false.</p></div>
<div class="exampleblock">
<div class="title">Example 16. Do not change grub configuration</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[bootloader]
skip_grub_config=True
cmdline=+systemd.cpu_affinity=1</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_disk_strong"><strong>disk</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Plug-in for tuning various block device options. This plug-in can also
dynamically change the advanced power management and spindown timeout
setting for a drive according to the current drive utilization. The
dynamic tuning is controlled by the [option]<code>dynamic</code> and the global
[option]<code>dynamic_tuning</code> option in <code>tuned-main.conf</code>.</p></div>
<div class="paragraph"><p>The disk plug-in operates on all supported block devices unless a
comma separated list of [option]<code>devices</code> is passed to it.</p></div>
<div class="exampleblock">
<div class="title">Example 17. Operate only on the <code>sda</code> block device</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[disk]
devices=sda</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>The [option]<code>elevator</code> option sets the Linux I/O scheduler.</p></div>
<div class="exampleblock">
<div class="title">Example 18. Use the bfq I/O scheduler on the <code>xvda</code> block device</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[disk]
device=xvda
elevator=bfq</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>The [option]<code>scheduler_quantum</code> option only applies to the CFQ I/O
scheduler. It defines the number of I/O requests that CFQ sends to
one device at one time, essentially limiting queue depth. The default
value is 8 requests. The device being used may support greater queue
depth, but increasing the value of quantum will also increase latency,
especially for large sequential write work loads.</p></div>
<div class="paragraph"><p>The [option]<code>apm</code> option sets the Advanced Power Management feature
on drives that support it. It corresponds to using the <code>-B</code> option of
the <code>hdparm</code> utility. The [option]<code>spindown</code> option puts the drive
into idle (low-power) mode, and also sets the standby (spindown)
timeout for the drive. It corresponds to using <code>-S</code> option of the
<code>hdparm</code> utility.</p></div>
<div class="exampleblock">
<div class="title">Example 19. Use a medium-agressive power management with spindown</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[disk]
apm=128
spindown=6</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>The [option]<code>readahead</code> option controls how much extra data the
operating system reads from disk when performing sequential
I/O operations. Increasing the <code>readahead</code> value might improve
performance in application environments where sequential reading of
large files takes place. The default unit for readahead is KiB. This
can be adjusted to sectors by specifying the suffix <em>s</em>. If the
suffix is specified, there must be at least one space between the
number and suffix (for example, <code>readahead=8192 s</code>).</p></div>
<div class="exampleblock">
<div class="title">Example 20. Set the <code>readahead</code> to 4MB unless already set to a higher value</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[disk]
readahead=&gt;4096</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>The disk readahead value can be multiplied by the constant
specified by the [option]<code>readahead_multiply</code> option.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_eeepc_she_strong"><strong>eeepc_she</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Dynamically sets the front-side bus (FSB) speed according to the
CPU load. This feature can be found on some netbooks and is also
known as the Asus Super Hybrid Engine. If the CPU load is lower or
equal to the value specified by the [option]<code>load_threshold_powersave</code>
option, the plug-in sets the FSB speed to the value specified by the
[option]<code>she_powersave</code> option. If the CPU load is higher or
equal to the value specified by the [option]<code>load_threshold_normal</code>
option, it sets the FSB speed to the value specified by the
[option]<code>she_normal</code> option. Static tuning is not supported and the
plug-in is transparently disabled if the hardware support for this
feature is not detected.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">For details about the FSB frequencies and corresponding values, see
<a href="https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-platform-eeepc-laptop">the kernel documentation</a>.
The provided defaults should work for most users.</td>
</tr></table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_irq_strong"><strong>irq</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Allows tuning of IRQ affinities, and thus re-implements functionality
already present in the <code>scheduler</code> plugin. However, this plugin offers
more flexibility, as it allows tuning of individual interrupts with
different affinities. When using the <code>irq</code> plugin, make sure to disable
IRQ processing in the <code>scheduler</code> plugin by setting its option
[option]<code>irq_process=false</code>.</p></div>
<div class="paragraph"><p>The plugin handles individual IRQs as devices and multiple plugin
instances can be defined, each addressing different devices/irqs.
The device names used by the plugin are <code>irq&lt;n&gt;</code>, where <code>&lt;n&gt;</code> is the
IRQ number. The special device <code>DEFAULT</code> controls values written to
<code>/proc/irq/default_smp_affinity</code>, which applies to all non-active IRQs.</p></div>
<div class="paragraph"><p>The option [option]<code>affinity</code> controls the IRQ affinity to be set. It is
a string in "cpulist" format (such as <code>1,3-4</code>). If the configured affinity
is empty, then the affinity of the respective IRQs is not touched.</p></div>
<div class="paragraph"><p>The option [option]<code>mode</code> is a string which can either be <code>set</code> (default)
or <code>intersect</code>. In <code>set</code> mode the [option]<code>affinity</code> is always written
as configured, whereas in <code>intersect</code> mode, the new affinity will be
calculated as the intersection of the current and the configured affinity.
If that intersection is empty, the configured affinity will be used.</p></div>
<div class="exampleblock">
<div class="title">Example 21. Moving all IRQs to CPU0, except irq16, which is directed to CPU2</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[irq_special]
type=irq
devices=irq16
affinity=2

[irq]
affinity=0</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_irqbalance_strong"><strong>irqbalance</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Plug-in for irqbalance settings management. The plug-in
configures CPUs which should be skipped when rebalancing IRQs in
<code>/etc/sysconfig/irqbalance</code>. It then restarts irqbalance if and
only if it was previously running.</p></div>
<div class="paragraph"><p>The banned/skipped CPUs are specified as a CPU list via the
[option]<code>banned_cpus</code> option.</p></div>
<div class="exampleblock">
<div class="title">Example 22. Skip CPUs 2,4 and 9-13 when rebalancing IRQs</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[irqbalance]
banned_cpus=2,4,9-13</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_modules_strong"><strong>modules</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Plug-in for applying custom kernel modules options.</p></div>
<div class="paragraph"><p>This plug-in can set parameters to kernel modules. It creates
<code>/etc/modprobe.d/tuned.conf</code> file. The syntax is
<code>_module_=_option1=value1 option2=value2..._</code> where <code>_module_</code> is
the module name and <code>_optionx=valuex_</code> are module options which may
or may not be present.</p></div>
<div class="exampleblock">
<div class="title">Example 23. Load module <code>netrom</code> with module parameter <code>nr_ndevs=2</code></div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[modules]
netrom=nr_ndevs=2</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>Modules can also be forced to load/reload by using an additional
<code>+r</code> option prefix.</p></div>
<div class="exampleblock">
<div class="title">Example 24. (Re)load module <code>netrom</code> with module parameter <code>nr_ndevs=2</code></div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[modules]
netrom=+r nr_ndevs=2</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>The <code>+r</code> switch will also cause <strong>TuneD</strong> to try and remove <code>netrom</code>
module (if loaded) and try and (re)insert it with the specified
parameters. The <code>+r</code> can be followed by an optional comma (<code>+r,</code>)
for better readability.</p></div>
<div class="paragraph"><p>When using <code>+r</code> the module will be loaded immediately by the <strong>TuneD</strong>
daemon itself rather than waiting for the OS to load it with the
specified parameters.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_mounts_strong"><strong>mounts</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Enables or disables barriers for mounts according to the value of the
boolean option [option]<code>disable_barriers</code>. The option additionally allows
the special value <code>force</code>, which disables barriers even on mountpoints with
write back caches.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">Only extended file systems (ext) are supported by this plug-in.</td>
</tr></table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_net_strong"><strong>net</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Configures network driver, hardware and Netfilter settings.
Dynamic change of the interface speed according to the interface
utilization is also supported. The dynamic tuning is controlled by
the [option]<code>dynamic</code> and the global [option]<code>dynamic_tuning</code>
option in <code>tuned-main.conf</code>.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<code>wake_on_lan</code>
</dt>
<dd>
<p>
The [option]<code>wake_on_lan</code> option sets wake-on-lan to the specified
value as when using the <code>ethtool</code> utility.
</p>
<div class="exampleblock">
<div class="title">Example 25. Set Wake-on-LAN for device eth0 on MagicPacket&#8482;</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
devices=eth0
wake_on_lan=g</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>coalesce</code>
</dt>
<dd>
<p>
The [option]<code>coalesce</code> option allows changing coalescing settings
for the specified network devices. The syntax is:
</p>
<div class="listingblock">
<div class="content">
<pre><code>coalesce=<em>param1</em> <em>value1</em> <em>param2</em> <em>value2</em> ... <em>paramN</em> <em>valueN</em></code></pre>
</div></div>
<div class="paragraph"><p>Note that not all the coalescing parameters are supported by all
network cards. For the list of coalescing parameters of your network
device, use <code>ethtool -c device</code>.</p></div>
<div class="exampleblock">
<div class="title">Example 26. Setting coalescing parameters rx/tx-usecs for all network devices</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
coalesce=rx-usecs 3 tx-usecs 16</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>features</code>
</dt>
<dd>
<p>
The [option]<code>features</code> option allows changing
the offload parameters and other features for the specified
network devices. To query the features of your network device,
use <code>ethtool -k device</code>. The syntax of the option is the same as
the [option]<code>coalesce</code> option.
</p>
<div class="exampleblock">
<div class="title">Example 27. Turn off TX checksumming, generic segmentation and receive offload</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
features=tx off gso off gro off</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>pause</code>
</dt>
<dd>
<p>
The [option]<code>pause</code> option allows changing the pause parameters for
the specified network devices. To query the pause parameters of your
network device, use <code>ethtool -a device</code>. The syntax of the option
is the same as the [option]<code>coalesce</code> option.
</p>
<div class="exampleblock">
<div class="title">Example 28. Disable autonegotiation</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
pause=autoneg off</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>ring</code>
</dt>
<dd>
<p>
The [option]<code>ring</code> option allows changing the rx/tx ring parameters
for the specified network devices. To query the ring parameters of your
network device, use <code>ethtool -g device</code>. The syntax of the option
is the same as the [option]<code>coalesce</code> option.
</p>
<div class="exampleblock">
<div class="title">Example 29. Change the number of ring entries for the Rx/Tx rings to 1024/512 respectively</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
ring=rx 1024 tx 512</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>channels</code>
</dt>
<dd>
<p>
The [option]<code>channels</code> option allows changing the numbers of channels
for the specified network device. A channel is an IRQ and the set
of queues that can trigger that IRQ. To query the channels parameters of your
network device, use <code>ethtool -l device</code>. The syntax of the option
is the same as the [option]<code>coalesce</code> option.
</p>
<div class="exampleblock">
<div class="title">Example 30. Set the number of multi-purpose channels to 16</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
channels=combined 16</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>A network device either supports rx/tx or combined queue
mode. The [option]<code>channels</code> option automatically adjusts the
parameters based on the mode supported by the device as long as a
valid configuration is requested.</p></div>
</dd>
<dt class="hdlist1">
<code>nf_conntrack_hashsize</code>
</dt>
<dd>
<p>
The [option]<code>nf_conntrack_hashsize</code> option sets the size of the hash
table which stores lists of conntrack entries by writing to
<code>/sys/module/nf_conntrack/parameters/hashsize</code>.
</p>
<div class="exampleblock">
<div class="title">Example 31. Adjust the size of the conntrack hash table</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
nf_conntrack_hashsize=131072</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>txqueuelen</code>
</dt>
<dd>
<p>
The [option]<code>txqueuelen</code> option allows changing txqueuelen (the length
of the transmit queue). It uses <code>ip</code> utility that is in package iproute
recommended for TuneD, so the package needs to be installed for its correct
functionality. To query the txqueuelen parameters of your network device
use <code>ip link show</code> and the current value is shown after the qlen column.
</p>
<div class="exampleblock">
<div class="title">Example 32. Adjust the length of the transmit queue</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
txqueuelen=5000</code></pre>
</div></div>
</div></div>
</dd>
<dt class="hdlist1">
<code>mtu</code>
</dt>
<dd>
<p>
The [option]<code>mtu</code> option allows changing MTU (Maximum Transmission Unit).
It uses <code>ip</code> utility that is in package iproute recommended for TuneD, so
the package needs to be installed for its correct functionality. To query
the MTU parameters of your network device use <code>ip link show</code> and the
current value is shown after the MTU column.
</p>
<div class="exampleblock">
<div class="title">Example 33. Adjust the size of the MTU</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[net]
mtu=9000</code></pre>
</div></div>
</div></div>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_rtentsk_strong"><strong>rtentsk</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>A plug-in for avoiding inter-processor interrupts caused by enabling
or disabling static keys.</p></div>
<div class="paragraph"><p>The plug-in has no options; when included, <strong>TuneD</strong> will keep an open
socket with timestamping enabled, thus keeping the static key enabled.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_script_strong"><strong>script</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Executes an external script or binary when the profile is loaded or
unloaded. You can choose an arbitrary executable.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">The <code>script</code> plug-in is provided mainly for compatibility
with earlier releases. Prefer other <strong>TuneD</strong> plug-ins if they cover
the required functionality.</td>
</tr></table>
</div>
<div class="paragraph"><p><strong>TuneD</strong> calls the executable with one of the following arguments:</p></div>
<div class="ulist"><ul>
<li>
<p>
<code>start</code> when loading the profile
</p>
</li>
<li>
<p>
<code>stop</code> when unloading the profile
</p>
</li>
</ul></div>
<div class="paragraph"><p>You need to correctly implement the <code>stop</code> action in your executable
and revert all settings that you changed during the <code>start</code>
action. Otherwise, the roll-back step after changing your <strong>TuneD</strong>
profile will not work.</p></div>
<div class="paragraph"><p>Bash scripts can import the [filename]<code>/usr/lib/tuned/functions</code>
Bash library and use the functions defined there. Use these
functions only for functionality that is not natively provided
by <strong>TuneD</strong>. If a function name starts with an underscore, such as
<code>_wifi_set_power_level</code>, consider the function private and do not
use it in your scripts, because it might change in the future.</p></div>
<div class="paragraph"><p>Specify the path to the executable using the <code>script</code> parameter in
the plug-in configuration.</p></div>
<div class="exampleblock">
<div class="title">Example 34. Running a Bash script from a profile</div>
<div class="content">
<div class="paragraph"><p>To run a Bash script named <code>script.sh</code> that is located in the profile
directory, use:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[script]
script=${i:PROFILE_DIR}/script.sh</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_scsi_host_strong"><strong>scsi_host</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Tunes options for SCSI hosts.</p></div>
<div class="paragraph"><p>The plug-in sets Aggressive Link Power Management (ALPM) to the value specified
by the [option]<code>alpm</code> option. The option takes one of four values:
<code>min_power</code>, <code>med_power_with_dipm</code>, <code>medium_power</code> and <code>max_performance</code>.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">ALPM is only available on SATA controllers that use the Advanced
Host Controller Interface (AHCI).</td>
</tr></table>
</div>
<div class="exampleblock">
<div class="title">Example 35. ALPM setting when extended periods of idle time are expected</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[scsi_host]
alpm=med_power_with_dipm</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_selinux_strong"><strong>selinux</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Plug-in for tuning SELinux options.</p></div>
<div class="paragraph"><p>SELinux decisions, such as allowing or denying access, are
cached. This cache is known as the Access Vector Cache (AVC). When
using these cached decisions, SELinux policy rules need to be checked
less, which increases performance. The [option]<code>avc_cache_threshold</code>
option allows adjusting the maximum number of AVC entries.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">Prior to changing the default value, evaluate the system
performance with care. Increasing the value could potentially
decrease the performance by making AVC slow.</td>
</tr></table>
</div>
<div class="exampleblock">
<div class="title">Example 36. Increase the AVC cache threshold for hosts with containers.</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[selinux]
avc_cache_threshold=8192</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_service_strong"><strong>service</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Plug-in for handling sysvinit, sysv-rc, openrc and systemd services.</p></div>
<div class="paragraph"><p>The syntax is as follows:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[service]
service.<em>service_name</em>=<em>commands</em>[,file:<em>file</em>]</code></pre>
</div></div>
<div class="paragraph"><p>Supported service-handling <code>_commands_</code> are <code>start</code>, <code>stop</code>, <code>enable</code>
and <code>disable</code>. The optional <code>file:__file__</code> directive installs an overlay
configuration file <code>__file__</code>. Multiple commands must be comma (<code>,</code>)
or semicolon (<code>;</code>) separated. If the directives conflict, the last
one is used.</p></div>
<div class="paragraph"><p>The service plugin supports configuration overlays only for systemd.
In other init systems, this directive is ignored. The configuration
overlay files are copied to <code>/etc/systemd/system/__service_name__.service.d/</code>
directories. Upon profile unloading, the directory is removed if it is empty.</p></div>
<div class="paragraph"><p>With systemd, the <code>start</code> command is implemented by <code>restart</code> in order
to allow loading of the service configuration file overlay.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">With non-systemd init systems, the plug-in operates on the
current runlevel only.</td>
</tr></table>
</div>
<div class="exampleblock">
<div class="title">Example 37. Start and enable the <code>sendmail</code> service with an overlay file</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[service]
service.sendmail=start,enable,file:${i:PROFILE_DIR}/tuned-sendmail.conf</code></pre>
</div></div>
<div class="paragraph"><p>The internal variable <code>${i:PROFILE_DIR}</code> points to the directory
from which the profile is loaded.</p></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_sysctl_strong"><strong>sysctl</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Sets various kernel parameters at runtime.</p></div>
<div class="paragraph"><p>This plug-in is used for applying custom <code>sysctl</code> settings and should
only be used to change system settings that are not covered by other
<strong>TuneD</strong> plug-ins. If the settings are covered by other <strong>TuneD</strong> plug-ins,
use those plug-ins instead.</p></div>
<div class="paragraph"><p>The syntax for this plug-in is
<code>_key_=_value_</code>, where
<code>_key_</code> is the same as the key name provided by the
<code>sysctl</code> utility.</p></div>
<div class="exampleblock">
<div class="title">Example 38. Adjusting the kernel runtime kernel.sched_min_granularity_ns value</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[sysctl]
kernel.sched_min_granularity_ns=3000000</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_sysfs_strong"><strong>sysfs</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Sets various <code>sysfs</code> settings specified by the plug-in options.</p></div>
<div class="paragraph"><p>The syntax is <code>_name_=_value_</code>, where
<code>_name_</code> is the <code>sysfs</code> path to use and <code>_value_</code> is
the value to write. The <code>sysfs</code> path supports the shell-style
wildcard characters (see <code>man 7 glob</code> for additional detail).</p></div>
<div class="paragraph"><p>Use this plugin in case you need to change some settings that are
not covered by other plug-ins. Prefer specific plug-ins if they
cover the required settings.</p></div>
<div class="exampleblock">
<div class="title">Example 39. Ignore corrected errors and associated scans that cause latency spikes</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[sysfs]
/sys/devices/system/machinecheck/machinecheck*/ignore_ce=1</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_systemd_strong"><strong>systemd</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Plug-in for tuning systemd options.</p></div>
<div class="paragraph"><p>The [option]<code>cpu_affinity</code> option allows setting CPUAffinity in
<code>/etc/systemd/system.conf</code>. This configures the CPU affinity for the
service manager as well as the default CPU affinity for all forked
off processes. The option takes a comma-separated list of CPUs with
optional CPU ranges specified by the minus sign (<code>-</code>).</p></div>
<div class="exampleblock">
<div class="title">Example 40. Set the CPUAffinity for <code>systemd</code> to <code>0 1 2 3</code></div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[systemd]
cpu_affinity=0-3</code></pre>
</div></div>
</div></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">These tunings are unloaded only on profile change followed by a reboot.</td>
</tr></table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_uncore_strong"><strong>uncore</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>An Intel-specific plug-in for limiting the maximum and minimum uncore frequency.</p></div>
<div class="paragraph"><p>The options [option]<code>max_freq_khz</code>, [option]<code>min_freq_khz</code> correspond to
<code>sysfs</code> files exposed by Intel uncore frequency driver. Their values can be
specified in kHz or as a percentage of their configurable range.</p></div>
<div class="exampleblock">
<div class="title">Example 41. Limiting maximum uncore frequency</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[uncore10]
type=uncore
devices=uncore10
max_freq_khz=4000000

[uncore_all]
type=uncore
max_freq_khz=90%</code></pre>
</div></div>
<div class="paragraph"><p>Using this options <strong>TuneD</strong> will limit maximum frequency of all uncore units
on the Intel system to 90% of the allowable range. Except uncore10 which
maximum frequency limit will be set to 4 GHz.</p></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_usb_strong"><strong>usb</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Sets autosuspend timeout of USB devices to the value specified by the
[option]<code>autosuspend</code> option in seconds. If the [option]<code>devices</code>
option is specified, the [option]<code>autosuspend</code> option applies to only
the USB devices specified, otherwise it applies to all USB devices.</p></div>
<div class="paragraph"><p>The value <code>0</code> means that autosuspend is disabled.</p></div>
<div class="exampleblock">
<div class="title">Example 42. Turn off USB autosuspend for USB devices <code>1-1</code> and <code>1-2</code></div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[usb]
devices=1-1,1-2
autosuspend=0</code></pre>
</div></div>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_video_strong"><strong>video</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Sets various power saving features on video cards.
Radeon cards are supported.
The powersave level can be specified
by using the [option]<code>radeon_powersave</code> option. Supported values are:</p></div>
<div class="ulist"><ul>
<li>
<p>
<code>default</code>
</p>
</li>
<li>
<p>
<code>auto</code>
</p>
</li>
<li>
<p>
<code>low</code>
</p>
</li>
<li>
<p>
<code>mid</code>
</p>
</li>
<li>
<p>
<code>high</code>
</p>
</li>
<li>
<p>
<code>dynpm</code>
</p>
</li>
<li>
<p>
<code>dpm-battery</code>
</p>
</li>
<li>
<p>
<code>dpm-balanced</code>
</p>
</li>
<li>
<p>
<code>dpm-perfomance</code>
</p>
</li>
</ul></div>
<div class="paragraph"><p>For additional detail, see
<a href="https://www.x.org/wiki/RadeonFeature/#kmspowermanagementoptions">KMS Power Management Options</a>.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">This plug-in is experimental and the option might change in future releases.</td>
</tr></table>
</div>
<div class="exampleblock">
<div class="title">Example 43. Setting powersave level for the Radeon video card to high</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[video]
radeon_powersave=high</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>Mobile hardware with amdgpu driven eDP panels can be configured
with the [option]<code>panel_power_savings</code> option.
This accepts a value range from 0 to 4, where 4 is the highest power savings
but will trade off color accuracy.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_strong_vm_strong"><strong>vm</strong></h2>
<div class="sectionbody">
<div class="paragraph"><p>Tunes selected sysctl options in <code>/proc/sys/vm</code>, currently
[option]<code>dirty_ratio</code>, [option]<code>dirty_background_ratio</code>,
[option]<code>dirty_bytes</code>, and [option]<code>dirty_background_bytes</code>.
See <a href="https://docs.kernel.org/admin-guide/sysctl/vm.html">https://docs.kernel.org/admin-guide/sysctl/vm.html</a> for detailed
documentation of these options.</p></div>
<div class="paragraph"><p>Additionaly enables or disables transparent huge pages depending on
the value of the [option]<code>transparent_hugepages</code> option. The option
can have one of three possible values: <code>always</code>, <code>madvise</code> and <code>never</code>.</p></div>
<div class="exampleblock">
<div class="title">Example 44. Disable transparent hugepages</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre><code>[vm]
transparent_hugepages=never</code></pre>
</div></div>
</div></div>
<div class="paragraph"><p>The [option]<code>transparent_hugepage.defrag</code> option specifies the
defragmentation policy. Possible values for this option are <code>always</code>,
<code>defer</code>, <code>defer+madvise</code>, <code>madvise</code> and <code>never</code>. For a detailed
explanation of these values refer to
<a href="https://www.kernel.org/doc/Documentation/vm/transhuge.txt">Transparent Hugepage Support</a>.</p></div>
</div>
</div>
<h1 id="variables-in-tuned-profiles_customizing-tuned-profiles">Variables in TuneD profiles</h1>
<div class="paragraph _abstract"><p>Variables expand at run time when a <strong>TuneD</strong> profile is activated.</p></div>
<div class="paragraph"><p>Using <strong>TuneD</strong> variables reduces the amount of necessary typing in <strong>TuneD</strong> profiles.</p></div>
<div class="paragraph"><p>There are no predefined variables in <strong>TuneD</strong> profiles. You can define your own variables by creating the <code>[variables]</code> section in a profile and using the following syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[variables]

<em><span class="replaceable">variable_name</span></em>=<em><span class="replaceable">value</span></em></code></pre>
</div></div>
<div class="paragraph"><p>To expand the value of a variable in a profile, use the following syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>${<em><span class="replaceable">variable_name</span></em>}</code></pre>
</div></div>
<div class="exampleblock">
<div class="title">Example 45. Isolating CPU cores using variables</div>
<div class="content">
<div class="paragraph"><p>In the following example, the <code>${isolated_cores}</code> variable expands to <code>1,2</code>; hence the kernel boots with the [option]<code>isolcpus=1,2</code> option:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[variables]
isolated_cores=1,2

[bootloader]
cmdline=isolcpus=${isolated_cores}</code></pre>
</div></div>
<div class="paragraph"><p>The variables can be specified in a separate file. For example, you can add the following lines to [filename]<code>tuned.conf</code>:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[variables]
include=/etc/tuned/<em><span class="replaceable">my-variables.conf</span></em>

[bootloader]
cmdline=isolcpus=${isolated_cores}</code></pre>
</div></div>
<div class="paragraph"><p>If you add the [option]<code>isolated_cores=1,2</code> option to the [filename]<code>/etc/tuned/my-variables.conf</code> file, the kernel boots with the [option]<code>isolcpus=1,2</code> option.</p></div>
</div></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page
</p>
</li>
</ul></div>
<h1 id="built-in-functions-in-tuned-profiles_customizing-tuned-profiles">Built-in functions in TuneD profiles</h1>
<div class="paragraph _abstract"><p>Built-in functions expand at run time when a <strong>TuneD</strong> profile is activated.</p></div>
<div class="paragraph"><p>You can:</p></div>
<div class="ulist"><ul>
<li>
<p>
Use various built-in functions together with <strong>TuneD</strong> variables
</p>
</li>
<li>
<p>
Create custom functions in Python and add them to <strong>TuneD</strong> in the form of plug-ins
</p>
</li>
</ul></div>
<div class="paragraph"><p>To call a function, use the following syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>${f:<em><span class="replaceable">function_name</span></em>:<em><span class="replaceable">argument_1</span></em>:<em><span class="replaceable">argument_2</span></em>}</code></pre>
</div></div>
<div class="paragraph"><p>To expand the directory path where the profile and the <code>tuned.conf</code> file are located, use the <code>PROFILE_DIR</code> function, which requires special syntax:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>${i:PROFILE_DIR}</code></pre>
</div></div>
<div class="exampleblock">
<div class="title">Example 46. Isolating CPU cores using variables and built-in functions</div>
<div class="content">
<div class="paragraph"><p>In the following example, the <code>${non_isolated_cores}</code> variable expands to <code>0,3-5</code>, and the <code>cpulist_invert</code> built-in function is called with the <code>0,3-5</code> argument:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[variables]
non_isolated_cores=0,3-5

[bootloader]
cmdline=isolcpus=${f:cpulist_invert:${non_isolated_cores}}</code></pre>
</div></div>
<div class="paragraph"><p>The <code>cpulist_invert</code> function inverts the list of CPUs. For a 6-CPU machine, the inversion is <code>1,2</code>, and the kernel boots with the [option]<code>isolcpus=1,2</code> command-line option.</p></div>
</div></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page
</p>
</li>
</ul></div>
<h1 id="built-in-functions-available-in-tuned-profiles_customizing-tuned-profiles">Built-in functions available in TuneD profiles</h1>
<div class="paragraph _abstract"><p>The following built-in functions are available in all <strong>TuneD</strong> profiles:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<code>PROFILE_DIR</code>
</dt>
<dd>
<p>
Returns the directory path where the profile and the <code>tuned.conf</code> file are located.
</p>
</dd>
<dt class="hdlist1">
<code>exec</code>
</dt>
<dd>
<p>
Executes a process and returns its output.
</p>
</dd>
<dt class="hdlist1">
<code>assertion</code>
</dt>
<dd>
<p>
Compares two arguments. If they <em>do not match</em>, the function logs text from the first argument and aborts profile loading.
</p>
</dd>
<dt class="hdlist1">
<code>assertion_non_equal</code>
</dt>
<dd>
<p>
Compares two arguments. If they <em>match</em>, the function logs text from the first argument and aborts profile loading.
</p>
</dd>
<dt class="hdlist1">
<code>kb2s</code>
</dt>
<dd>
<p>
Converts kilobytes to disk sectors.
</p>
</dd>
<dt class="hdlist1">
<code>s2kb</code>
</dt>
<dd>
<p>
Converts disk sectors to kilobytes.
</p>
</dd>
<dt class="hdlist1">
<code>strip</code>
</dt>
<dd>
<p>
Creates a string from all passed arguments and deletes both leading and trailing white space.
</p>
</dd>
<dt class="hdlist1">
<code>virt_check</code>
</dt>
<dd>
<p>
Checks whether <strong>TuneD</strong> is running inside a virtual machine (VM) or on bare metal:
</p>
<div class="ulist"><ul>
<li>
<p>
Inside a VM, the function returns the first argument.
</p>
</li>
<li>
<p>
On bare metal, the function returns the second argument, even in case of an error.
</p>
</li>
</ul></div>
</dd>
<dt class="hdlist1">
<code>cpulist_invert</code>
</dt>
<dd>
<p>
Inverts a list of CPUs to make its complement. For example, on a system with 4 CPUs, numbered from 0 to 3, the inversion of the list <code>0,2,3</code> is <code>1</code>.
</p>
</dd>
<dt class="hdlist1">
<code>cpulist2hex</code>
</dt>
<dd>
<p>
Converts a CPU list to a hexadecimal CPU mask.
</p>
</dd>
<dt class="hdlist1">
<code>cpulist2hex_invert</code>
</dt>
<dd>
<p>
Converts a CPU list to a hexadecimal CPU mask and inverts it.
</p>
</dd>
<dt class="hdlist1">
<code>hex2cpulist</code>
</dt>
<dd>
<p>
Converts a hexadecimal CPU mask to a CPU list.
</p>
</dd>
<dt class="hdlist1">
<code>cpulist_online</code>
</dt>
<dd>
<p>
Checks whether the CPUs from the list are online. Returns the list containing only online CPUs.
</p>
</dd>
<dt class="hdlist1">
<code>cpulist_present</code>
</dt>
<dd>
<p>
Checks whether the CPUs from the list are present. Returns the list containing only present CPUs.
</p>
</dd>
<dt class="hdlist1">
<code>cpulist_unpack</code>
</dt>
<dd>
<p>
Unpacks a CPU list in the form of <code>1-3,4</code> to <code>1,2,3,4</code>.
</p>
</dd>
<dt class="hdlist1">
<code>cpulist_pack</code>
</dt>
<dd>
<p>
Packs a CPU list in the form of <code>1,2,3,5</code> to <code>1-3,5</code>.
</p>
</dd>
<dt class="hdlist1">
<code>intel_recommended_pstate</code>
</dt>
<dd>
<p>
Returns recommended intel_pstate CPUFreq driver mode based on processor generation.
</p>
</dd>
</dl></div>
<h1 id="creating-new-tuned-profiles_customizing-tuned-profiles">Creating new TuneD profiles</h1>
<div class="paragraph _abstract"><p>This procedure creates a new <strong>TuneD</strong> profile with custom performance rules.</p></div>
<div class="ulist"><div class="title">Prerequisites</div><ul>
<li>
<p>
The <code>tuned</code> service is running. See <a href="#installing-and-enabling-tuned_getting-started-with-tuned">Installing and Enabling Tuned</a> for details.
</p>
</li>
</ul></div>
<div class="olist arabic"><div class="title">Procedure</div><ol class="arabic">
<li>
<p>
In the [filename]<code>/etc/tuned/</code> directory, create a new directory named the same as the profile that you want to create:
</p>
<div class="listingblock">
<div class="content">
<pre><code># mkdir /etc/tuned/<em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
</li>
<li>
<p>
In the new directory, create a file named [filename]<code>tuned.conf</code>. Add a <code>[main]</code> section and plug-in definitions in it, according to your requirements.
</p>
<div class="paragraph"><p>For example, see the configuration of the <code>balanced</code> profile:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[main]
summary=General non-specialized TuneD profile

[cpu]
governor=conservative
energy_perf_bias=normal

[audio]
timeout=10

[video]
radeon_powersave=dpm-balanced, auto

[scsi_host]
alpm=med_power_with_dipm</code></pre>
</div></div>
</li>
<li>
<p>
To activate the profile, use:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile <em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
</li>
<li>
<p>
Verify that the <strong>TuneD</strong> profile is active and the system settings are applied:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm active

Current active profile: <em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm verify

Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.</code></pre>
</div></div>
</li>
</ol></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page
</p>
</li>
</ul></div>
<h1 id="modifying-existing-tuned-profiles_customizing-tuned-profiles">Modifying existing TuneD profiles</h1>
<div class="paragraph _abstract"><p>This procedure creates a modified child profile based on an existing <strong>TuneD</strong> profile.</p></div>
<div class="ulist"><div class="title">Prerequisites</div><ul>
<li>
<p>
The <code>tuned</code> service is running. See <a href="#installing-and-enabling-tuned_getting-started-with-tuned">Installing and Enabling Tuned</a> for details.
</p>
</li>
</ul></div>
<div class="olist arabic"><div class="title">Procedure</div><ol class="arabic">
<li>
<p>
In the [filename]<code>/etc/tuned/</code> directory, create a new directory named the same as the profile that you want to create:
</p>
<div class="listingblock">
<div class="content">
<pre><code># mkdir /etc/tuned/<em><span class="replaceable">modified-profile</span></em></code></pre>
</div></div>
</li>
<li>
<p>
In the new directory, create a file named [filename]<code>tuned.conf</code>, and set the <code>[main]</code> section as follows:
</p>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=<em><span class="replaceable">parent-profile</span></em></code></pre>
</div></div>
<div class="paragraph"><p>Replace <em><span class="replaceable">parent-profile</span></em> with the name of the profile you are modifying.</p></div>
</li>
<li>
<p>
Include your profile modifications.
</p>
<div class="openblock">
<div class="content">
<div class="exampleblock">
<div class="title">Example 47. Lowering swappiness in the throughput-performance profile</div>
<div class="content">
<div class="paragraph"><p>To use the settings from the <code>throughput-performance</code> profile and change the value of <code>vm.swappiness</code> to 5, instead of the default 10, use:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=throughput-performance

[sysctl]
vm.swappiness=5</code></pre>
</div></div>
</div></div>
</div></div>
</li>
<li>
<p>
To activate the profile, use:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile <em><span class="replaceable">modified-profile</span></em></code></pre>
</div></div>
</li>
<li>
<p>
Verify that the <strong>TuneD</strong> profile is active and the system settings are applied:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm active

Current active profile: <em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm verify

Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.</code></pre>
</div></div>
</li>
</ol></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<code>tuned.conf(5)</code> man page
</p>
</li>
</ul></div>
<h1 id="setting-the-disk-scheduler-using-tuned_customizing-tuned-profiles">Setting the disk scheduler using TuneD</h1>
<div class="paragraph _abstract"><p>This procedure creates and enables a <strong>TuneD</strong> profile that sets a given disk scheduler for selected block devices. The setting persists across system reboots.</p></div>
<div class="paragraph"><p>In the following commands and configuration, replace:</p></div>
<div class="ulist"><ul>
<li>
<p>
<em><span class="replaceable">device</span></em> with the name of the block device, for example <code>sdf</code>
</p>
</li>
<li>
<p>
<em><span class="replaceable">selected-scheduler</span></em> with the disk scheduler that you want to set for the device, for example <code>bfq</code>
</p>
</li>
</ul></div>
<div class="ulist"><div class="title">Prerequisites</div><ul>
<li>
<p>
The <code>tuned</code> service is installed and enabled. For details, see <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/getting-started-with-tuned_monitoring-and-managing-system-status-and-performance#installing-and-enabling-tuned_getting-started-with-tuned">https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/getting-started-with-tuned_monitoring-and-managing-system-status-and-performance#installing-and-enabling-tuned_getting-started-with-tuned</a>.
</p>
</li>
</ul></div>
<div class="olist arabic"><div class="title">Procedure</div><ol class="arabic">
<li>
<p>
Optional: Select an existing <strong>TuneD</strong> profile on which your profile will be based. For a list of available profiles, see <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/getting-started-with-tuned_monitoring-and-managing-system-status-and-performance#tuned-profiles-distributed-with-rhel_getting-started-with-tuned">https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/getting-started-with-tuned_monitoring-and-managing-system-status-and-performance#tuned-profiles-distributed-with-rhel_getting-started-with-tuned</a>.
</p>
<div class="paragraph"><p>To see which profile is currently active, use:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm active</code></pre>
</div></div>
</li>
<li>
<p>
Create a new directory to hold your <strong>TuneD</strong> profile:
</p>
<div class="listingblock">
<div class="content">
<pre><code># mkdir /etc/tuned/<em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
</li>
<li>
<p>
Find the system unique identifier of the selected block device:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ udevadm info --query=property --name=/dev/<em>device</em> | grep -E <em>(WWN|SERIAL)</em>

ID_WWN=<em>0x5002538d00000000_</em>
ID_SERIAL=<em>Generic-_SD_MMC_20120501030900000-0:0</em>
ID_SERIAL_SHORT=<em>20120501030900000</em></code></pre>
</div></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph"><p>The command in the this example will return all values identified as a World Wide Name (WWN) or serial number associated with the specified block device. Although it is preferred to use a WWN, the WWN is not always available for a given device and any values returned by the example command are acceptable to use as the <em>device system unique ID</em>.</p></div>
</td>
</tr></table>
</div>
</li>
<li>
<p>
Create the <code>/etc/tuned/_my-profile_/tuned.conf</code> configuration file. In the file, set the following options:
</p>
<div class="olist loweralpha"><ol class="loweralpha">
<li>
<p>
Optional: Include an existing profile:
</p>
<div class="listingblock">
<div class="content">
<pre><code>[main]
include=<em>existing-profile</em></code></pre>
</div></div>
</li>
<li>
<p>
Set the selected disk scheduler for the device that matches the WWN identifier:
</p>
<div class="listingblock">
<div class="content">
<pre><code>[disk]
devices_udev_regex=<em>IDNAME</em>=<em>device system unique id</em>
elevator=<em>selected-scheduler</em></code></pre>
</div></div>
<div class="paragraph"><p>Here:</p></div>
<div class="ulist"><ul>
<li>
<p>
Replace <em>IDNAME</em> with the name of the identifier being used (for example, <code>ID_WWN</code>).
</p>
</li>
<li>
<p>
Replace <em>device system unique id</em> with the value of the chosen identifier (for example, <code>0x5002538d00000000</code>).
</p>
<div class="paragraph"><p>To match multiple devices in the <code>devices_udev_regex</code> option, enclose the identifiers in parentheses and separate them with vertical bars:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>devices_udev_regex=(ID_WWN=<em>0x5002538d00000000</em>)|(ID_WWN=<em>0x1234567800000000</em>)</code></pre>
</div></div>
</li>
</ul></div>
</li>
</ol></div>
</li>
<li>
<p>
Enable your profile:
</p>
<div class="listingblock">
<div class="content">
<pre><code># tuned-adm profile <em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
</li>
</ol></div>
<div class="olist arabic"><div class="title">Verification steps</div><ol class="arabic">
<li>
<p>
Verify that the TuneD profile is active and applied:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm active

Current active profile: <em><span class="replaceable">my-profile</span></em></code></pre>
</div></div>
<div class="listingblock">
<div class="content">
<pre><code>$ tuned-adm verify

Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.</code></pre>
</div></div>
</li>
</ol></div>
<div class="ulist _additional-resources"><div class="title">Additional resources</div><ul>
<li>
<p>
<a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/customizing-tuned-profiles_monitoring-and-managing-system-status-and-performance">https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/customizing-tuned-profiles_monitoring-and-managing-system-status-and-performance</a>.
</p>
</li>
</ul></div>
<div class="sect1">
<h2 id="related-information-customizing-tuned-profiles">Related information</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
The <code>tuned.conf(5)</code> man page
</p>
</li>
<li>
<p>
The <strong>TuneD</strong> project website: <a href="https://tuned-project.org/">https://tuned-project.org/</a>
</p>
</li>
</ul></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Version 2.24.1<br />
Last updated
 2025-08-24 21:48:04 UTC
</div>
</div>
</body>
</html>