<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.osnexus.com/index.php?action=history&amp;feed=atom&amp;title=Qs_systemtunables.conf</id>
	<title>Qs systemtunables.conf - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.osnexus.com/index.php?action=history&amp;feed=atom&amp;title=Qs_systemtunables.conf"/>
	<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;action=history"/>
	<updated>2026-10-03T14:08:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;diff=27717&amp;oldid=prev</id>
		<title>Qadmin: Remove the admin_guide category so the page no longer appears in the sidebar; it is reference material reached from QuantaStor Configuration Files (QSTOR-12429)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;diff=27717&amp;oldid=prev"/>
		<updated>2026-09-03T10:23:55Z</updated>

		<summary type="html">&lt;p&gt;Remove the admin_guide category so the page no longer appears in the sidebar; it is reference material reached from QuantaStor Configuration Files (QSTOR-12429)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:23, 3 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:admin_guide]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{DISPLAYTITLE:qs_systemtunables.conf}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{DISPLAYTITLE:qs_systemtunables.conf}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff:1.41:old-27670:rev-27717:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Qadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;diff=27670&amp;oldid=prev</id>
		<title>Qadmin: Link the touch-file and configuration-file pages that own those topics (QSTOR-12429)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;diff=27670&amp;oldid=prev"/>
		<updated>2026-09-03T07:23:50Z</updated>

		<summary type="html">&lt;p&gt;Link the touch-file and configuration-file pages that own those topics (QSTOR-12429)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:23, 3 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l335&quot;&gt;Line 335:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 335:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Changing {{Code|1=title}}, {{Code|1=desc}}, {{Code|1=tab}} or the units only affects presentation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Changing {{Code|1=title}}, {{Code|1=desc}}, {{Code|1=tab}} or the units only affects presentation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For troubleshooting, the step that writes the values out to the kernel can be suppressed &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entirely by creating &lt;/del&gt;the file {{Code|1=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/var/opt/osnexus/quantastor/touchfiles/&lt;/del&gt;tf_storage_system_tunables.disable}}&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. The &lt;/del&gt;tunables still load and still show their stored values, but no kernel parameter is written&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. We recommend contacting OSNEXUS support before using it&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;since it &lt;/del&gt;leaves the dialog reporting settings the system is not applying.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For troubleshooting, the step that writes the values out to the kernel can be suppressed &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;altogether with &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;touch &lt;/ins&gt;file {{Code|1=tf_storage_system_tunables.disable}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: the &lt;/ins&gt;tunables still load and still show their stored values, but no kernel parameter is written, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;which &lt;/ins&gt;leaves the dialog reporting settings the system is not applying&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Touch files are for use only with guidance from OSNEXUS support -- see [[QuantaStor Touch Files]]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Relationship to qs_systemprofiles.conf ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Relationship to qs_systemprofiles.conf ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l348&quot;&gt;Line 348:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 348:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Storage System Optimization]] -- the dialog these tunables appear in, the Optimization Profiles, and the CLI commands that set them&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Storage System Optimization]] -- the dialog these tunables appear in, the Optimization Profiles, and the CLI commands that set them&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[QuantaStor Configuration Files]] -- the other configuration files under the same directory&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Performance Tuning]] -- choosing what to tune, and measuring the result&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Storage System]] -- the rest of the Storage System level configuration&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Storage System]] -- the rest of the Storage System level configuration&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;small&amp;gt;&amp;#039;&amp;#039;Verified against QuantaStor 6.9.0.&amp;#039;&amp;#039;&amp;lt;/small&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;small&amp;gt;&amp;#039;&amp;#039;Verified against QuantaStor 6.9.0.&amp;#039;&amp;#039;&amp;lt;/small&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff:1.41:old-27668:rev-27670:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Qadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;diff=27668&amp;oldid=prev</id>
		<title>Qadmin: New page: qs_systemtunables.conf configuration file reference; tunables reference moved here from Storage System Optimization (QSTOR-12429)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Qs_systemtunables.conf&amp;diff=27668&amp;oldid=prev"/>
		<updated>2026-09-03T07:21:00Z</updated>

		<summary type="html">&lt;p&gt;New page: qs_systemtunables.conf configuration file reference; tunables reference moved here from Storage System Optimization (QSTOR-12429)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:admin_guide]]&lt;br /&gt;
{{DISPLAYTITLE:qs_systemtunables.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Code|1=qs_systemtunables.conf}} declares the Storage System tuning parameters -- the &amp;#039;&amp;#039;tunables&amp;#039;&amp;#039; -- that QuantaStor exposes in the [[Storage System Optimization]] dialog. Each section of the file defines one tunable: its identifier, the label and help text the dialog shows, the kernel parameter it writes, and its accepted range and shipped default. The file is read once, when the QuantaStor service starts, so it is both the reference for what a tunable does and the place to change which tunables a site exposes.&lt;br /&gt;
&lt;br /&gt;
* [[#Location and precedence|Location and precedence]] -- which copy of the file wins, and how to make a local change survive an upgrade&lt;br /&gt;
* [[#File format|File format]] -- sections, keys, comments and quoting&lt;br /&gt;
* [[#Tunable keys|Tunable keys]] -- every key a section accepts&lt;br /&gt;
* [[#Tunable reference|Tunable reference]] -- all 33 shipped tunables, by dialog tab, with ranges and defaults&lt;br /&gt;
* [[#Deprecated tunables|Deprecated tunables]] -- identifiers that have been retired&lt;br /&gt;
* [[#What the service rejects|What the service rejects]] -- how a malformed or out-of-range entry is handled&lt;br /&gt;
* [[#When a change takes effect|When a change takes effect]] -- and what a change to a default does not do&lt;br /&gt;
* [[#Relationship to qs_systemprofiles.conf|Relationship to qs_systemprofiles.conf]]&lt;br /&gt;
* [[#Reading and setting tunable values|Reading and setting tunable values]]&lt;br /&gt;
&lt;br /&gt;
== Location and precedence ==&lt;br /&gt;
&lt;br /&gt;
The file QuantaStor ships is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
/opt/osnexus/quantastor/conf/qs_systemtunables.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;That copy is replaced on every upgrade.&amp;#039;&amp;#039;&amp;#039; It belongs to the QuantaStor service package and is not registered as a Debian conffile, so the package manager overwrites it without prompting and without leaving the previous version behind. An edit made in place is lost silently the next time the package is upgraded.&lt;br /&gt;
&lt;br /&gt;
To change the file and keep the change, put your copy in an override location instead. QuantaStor checks these paths in order and reads the first one that exists:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Order !! Path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || {{Code|1=/var/opt/osnexus/quantastor/conf/qs_systemtunables.conf}} || The preferred override. It sits outside the package, so an upgrade never touches it.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || {{Code|1=/var/opt/osnexus/quantastor/conf/qs_systemtunables.conf.override}} || Equivalent to 1; use whichever name suits your configuration management.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || {{Code|1=/opt/osnexus/quantastor/conf/qs_systemtunables.conf.override}} || Honoured, but it lives in the package&amp;#039;s own directory. Prefer 1 or 2.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || {{Code|1=/opt/osnexus/quantastor/conf/qs_systemtunables.conf}} || The shipped file, used when no override is present.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Precedence is per file, not per tunable: &amp;#039;&amp;#039;&amp;#039;an override replaces the shipped file rather than merging with it.&amp;#039;&amp;#039;&amp;#039; Exactly one of those four paths is read, so an override has to be a complete copy of the tunable set. Start from the shipped file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp /opt/osnexus/quantastor/conf/qs_systemtunables.conf /var/opt/osnexus/quantastor/conf/qs_systemtunables.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two consequences follow from that:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A tunable missing from the file in force is removed from the Storage System&amp;#039;&amp;#039;&amp;#039;, along with any value stored for it. Dropping a section is how a tunable is retired, and an override behaves the same way -- a hand-written override listing only the settings you care about deletes all the others.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;An override does not pick up tunables added in a later release.&amp;#039;&amp;#039;&amp;#039; Re-base it on the newly shipped file after each upgrade, or the Storage System keeps only the tunables your copy lists.&lt;br /&gt;
&lt;br /&gt;
There is one safety net. If the file in force yields fewer than two valid tunables, the load is abandoned, the tunable set already stored for the Storage System is left untouched, and the service log records:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
Failed to properly load Storage System Tunables, no valid tunables found in config file &amp;#039;&amp;lt;path&amp;gt;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The service log is {{Code|1=/var/log/qs/qs_service.log}}, and it names the path that was actually selected on each start, which is the quickest way to confirm an override is being read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
Merging &amp;#039;33&amp;#039; Storage System Tunables from configuration &amp;#039;/opt/osnexus/quantastor/conf/qs_systemtunables.conf&amp;#039;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file is INI style: one section per tunable, and one {{Code|1=key=value}} pair per line within it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
[sst_cache_size]&lt;br /&gt;
tab=cache_settings&lt;br /&gt;
param=/sys/module/zfs/parameters/zfs_arc_max&lt;br /&gt;
title=&amp;quot;Cache Size (% of RAM)&amp;quot;&lt;br /&gt;
desc=&amp;quot;Sets the percentage of the system&amp;#039;s RAM available as in-memory read cache for use by all Storage Pools.&amp;quot;&lt;br /&gt;
type=percentage&lt;br /&gt;
min=30&lt;br /&gt;
max=90&lt;br /&gt;
default=70&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The section name is the tunable&amp;#039;s identifier and it &amp;#039;&amp;#039;&amp;#039;must&amp;#039;&amp;#039;&amp;#039; begin with {{Code|1=sst_}}. That prefix is how the CLI and the profile parser tell a QuantaStor tunable from a raw kernel parameter name, so a section without it cannot be addressed by name.&lt;br /&gt;
&lt;br /&gt;
Parsing rules worth knowing:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A line is a comment only when {{Code|1=#}} is the first character on the line.&amp;#039;&amp;#039;&amp;#039; An indented {{Code|1=#}} is not a comment, and there is no end-of-line comment syntax -- a {{Code|1=#}} after a value becomes part of the value.&lt;br /&gt;
* A section header is recognised the same way, so an indented {{Code|1=[section]}} is not a section.&lt;br /&gt;
* Everything up to the first {{Code|1==}} is the key and everything after it is the value. Both are trimmed, so surrounding spaces do not matter, and a value may itself contain {{Code|1==}}.&lt;br /&gt;
* Double quote characters are removed as the file is read. Quoting {{Code|1=title}} and {{Code|1=desc}} is the house convention rather than a requirement, and a quote cannot be part of a value.&lt;br /&gt;
* Blank lines are ignored. A line longer than 1024 characters is skipped, with a warning in the service log.&lt;br /&gt;
* Within a tab, settings appear in the dialog in the order their sections appear in the file.&lt;br /&gt;
* The {{Code|1=[globals]}} section at the top of the shipped file holds no keys and the loader skips it by name. It is a placeholder -- keys added there have no effect.&lt;br /&gt;
&lt;br /&gt;
== Tunable keys ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Required !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=tab}} || yes || Which tab of the dialog the setting appears on. The set is fixed by the web interface: {{Code|1=general_settings}}, {{Code|1=cache_settings}}, {{Code|1=pool_settings}}, {{Code|1=network_settings}}, {{Code|1=volume_settings}}, {{Code|1=driver_settings}}. A tunable carrying any other value loads and is reachable from the CLI, but no tab is rendered for it, so it never appears in the dialog.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=param}} || yes || The kernel parameter the setting writes, given as a full path such as {{Code|1=/sys/module/zfs/parameters/zfs_arc_max}}. Set {{Code|1=param=deprecated}} to retire a tunable -- see [[#Deprecated tunables|Deprecated tunables]].&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=title}} || yes || The label shown in the dialog and in {{Code|1=qs tunable-list}}.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=desc}} || yes || The help text shown for the setting. Naming the underlying kernel parameter in the text is the existing convention and worth following, because it is the only place a reader sees it.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=type}} || yes || {{Code|1=range}} for a numeric slider, {{Code|1=percentage}} for a slider expressed as a percentage, {{Code|1=boolean}} for a checkbox. The value is matched loosely: any value containing {{Code|1=bool}} gives a checkbox, one containing {{Code|1=percent}} or {{Code|1=%}} gives a percentage, and anything else gives a range.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=min}} / {{Code|1=max}} || yes || The permitted range, in display units. The dialog will not offer a value outside it, the CLI rejects one, and a profile value outside it is skipped.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=default}} || yes || The shipped default, and the value the &amp;#039;&amp;#039;&amp;#039;Default&amp;#039;&amp;#039;&amp;#039; profile restores. It must fall within {{Code|1=min}} and {{Code|1=max}}.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=param_units}} / {{Code|1=display_units}} || no || Used when the kernel parameter&amp;#039;s unit differs from the unit to present. {{Code|1=param_units=B}} with {{Code|1=display_units=MB}} lets an administrator work in megabytes while the parameter is written in bytes. Recognised units are {{Code|1=B}}, {{Code|1=KB}}, {{Code|1=MB}}, {{Code|1=GB}} and {{Code|1=PB}} (the {{Code|1=KiB}} style spellings are accepted too). An unrecognised token is treated as bytes.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=rounding}} || no || {{Code|1=rounding=base2_power}} rounds the value up to the next power of two before it is written. Used by &amp;#039;&amp;#039;&amp;#039;I/O Aggregation Limit (KB)&amp;#039;&amp;#039;&amp;#039;, where ZFS expects a power-of-two size.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=module_conf}} || no || Present when the setting is a driver module parameter that cannot be changed on a running system. QuantaStor writes an {{Code|1=options &amp;amp;lt;module&amp;amp;gt; &amp;amp;lt;parameter&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;}} line into the named file -- {{Code|1=/etc/modprobe.d/spl.conf}} for the three &amp;#039;&amp;#039;&amp;#039;Driver Settings&amp;#039;&amp;#039;&amp;#039; -- then rebuilds the initramfs and raises an alert saying a reboot is required. Without this key the parameter is written directly and takes effect immediately.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tunable reference ==&lt;br /&gt;
&lt;br /&gt;
The dialog groups the tunables into six tabs, one per {{Code|1=tab}} value. The tables below are generated from {{Code|1=/opt/osnexus/quantastor/conf/qs_systemtunables.conf}}, so each range and default is the shipped value; use {{Code|1=qs tunable-list}} to see what a particular Storage System is running.&lt;br /&gt;
&lt;br /&gt;
=== General Settings ===&lt;br /&gt;
&lt;br /&gt;
[[File:ssopt_general.png|thumb|right|650px|Storage System Optimization, General Settings tab.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tunable !! Setting !! Range !! Default !! What it does&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_resilver_min_time_ms}} || &amp;#039;&amp;#039;&amp;#039;Resilver Priority (msec/TXG)&amp;#039;&amp;#039;&amp;#039; || 500&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;8000 || 3000 || Higher settings indicates more time should be dedicated to resilvering between transaction groups (zfs_resilver_min_time_ms).&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_rep_prefetch}} || &amp;#039;&amp;#039;&amp;#039;Remote Replication Prefetch (MB)&amp;#039;&amp;#039;&amp;#039; || 4&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 MB || 50 MB || Improves performance of replication send operations by prefetching data from disk (units in MB). Reducing this may reduce latency for systems replicating during production hours. (zfs_pd_bytes_max)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_cleanup_priority}} || &amp;#039;&amp;#039;&amp;#039;Cleanup Priority (% of TXG)&amp;#039;&amp;#039;&amp;#039; || 5&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;90 || 30 || Controls the maximum amount of dirty blocks to be freed as a percentage of each transaction group.  Increase to give high priority to cleanup operations like file deletion.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_limit_active_async_writes}} || &amp;#039;&amp;#039;&amp;#039;Limit Active Async Writes&amp;#039;&amp;#039;&amp;#039; || 5&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;50 || 30 || Limit active asynchronous writes based on dirty percent. This can help with write latency and resilver performance when set to a value between 10 and 30.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_commit_timeout}} || &amp;#039;&amp;#039;&amp;#039;Transaction Group (TXG) Commit Timeout&amp;#039;&amp;#039;&amp;#039; || 5&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;90 || 10 || Percentage of dirty data at which the transaction group commit timeout is reduced to 1 second to speed up commits and reduce latency.  Default is 10% which means that once the dirty data reaches 10% of RAM the system will start aggressively committing transaction groups to keep latency low.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_max_ms_shift}} || &amp;#039;&amp;#039;&amp;#039;Pool Metaslab Shift&amp;#039;&amp;#039;&amp;#039; || 28&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;38 || 34 || Controls the size of metaslabs used for space allocation.  Larger metaslabs can improve performance on large pools but may lead to fragmentation and reduced performance over time if set too high.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_ms_count_limit}} || &amp;#039;&amp;#039;&amp;#039;Pool Metaslab Count Limit&amp;#039;&amp;#039;&amp;#039; || 1024&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;262144 || 131072 || Limits the number of metaslabs that can be allocated for a single IO operation.  Increasing this can improve performance for large IO operations on large pools.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_lba_weighting}} || &amp;#039;&amp;#039;&amp;#039;Pool Metaslab LBA Weighting&amp;#039;&amp;#039;&amp;#039; || on / off || on || Enabling LBA weighting allows the allocator to prefer lower LBAs for better performance.  This can be beneficial for some workloads but may lead to increased fragmentation over time.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_metaslab_aliquot}} || &amp;#039;&amp;#039;&amp;#039;Metaslab Aliquot&amp;#039;&amp;#039;&amp;#039; || 64&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;32768 KB || 1024 KB || Controls the size of metaslab aliquots used for space allocation.  Larger aliquots can improve performance on large pools but may lead to fragmentation and reduced performance over time if set too high.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_zfetch_max_distance}} || &amp;#039;&amp;#039;&amp;#039;Read-Ahead Distance Max (MB)&amp;#039;&amp;#039;&amp;#039; || 8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;512 MB || 64 MB || Maximum distance in bytes that the ZFS prefetcher will read ahead.  Increasing this can improve performance for sequential read workloads.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_zfetch_min_distance}} || &amp;#039;&amp;#039;&amp;#039;Read-Ahead Distance Min (MB)&amp;#039;&amp;#039;&amp;#039; || 0&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 MB || 4 MB || Minimum distance in bytes that the ZFS prefetcher will read ahead.  Reducing this can improve performance for workloads with smaller sequential read patterns.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel parameters set by this tab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
/sys/module/zfs/parameters/zfs_resilver_min_time_ms&lt;br /&gt;
/sys/module/zfs/parameters/zfs_pd_bytes_max&lt;br /&gt;
/sys/module/zfs/parameters/zfs_per_txg_dirty_frees_percent&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_async_write_active_min_dirty_percent&lt;br /&gt;
/sys/module/zfs/parameters/zfs_commit_timeout_pct&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_max_ms_shift&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_ms_count_limit&lt;br /&gt;
/sys/module/zfs/parameters/metaslab_lba_weighting_enabled&lt;br /&gt;
/sys/module/zfs/parameters/metaslab_aliquot&lt;br /&gt;
/sys/module/zfs/parameters/zfetch_max_distance&lt;br /&gt;
/sys/module/zfs/parameters/zfetch_min_distance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cache Settings ===&lt;br /&gt;
&lt;br /&gt;
[[File:ssopt_cache.png|thumb|right|650px|Storage System Optimization, Cache Settings tab.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tunable !! Setting !! Range !! Default !! What it does&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_cache_size}} || &amp;#039;&amp;#039;&amp;#039;Cache Size (% of RAM)&amp;#039;&amp;#039;&amp;#039; || 30&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;90 || 70 || Sets the percentage of the system&amp;#039;s RAM available as in-memory read cache for use by all Storage Pools.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_write_queue_data_max}} || &amp;#039;&amp;#039;&amp;#039;Write Throttle Limit (% of RAM)&amp;#039;&amp;#039;&amp;#039; || 3&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;20 || 10 || Percentage of system RAM allocated for dirty data which after exeeded halts further writes until enough has flushed to free up more space in RAM. (controls zfs_dirty_data_max).&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_write_flush_rate_percent}} || &amp;#039;&amp;#039;&amp;#039;Write Flush Threshold (% of Write Queue RAM)&amp;#039;&amp;#039;&amp;#039; || 5&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;80 || 20 || Percentage of write queue filled at which transaction group syncing is ensured. Reducing this can improve IOPS.(zfs_dirty_data_sync_percent)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_write_flush_rate_sec}} || &amp;#039;&amp;#039;&amp;#039;Write Flush Threshold (sec)&amp;#039;&amp;#039;&amp;#039; || 1&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;10 || 5 || Once the threshold has been reached a new transaction group will be started. Reducing this can improve IOPS.(zfs_txg_timeout)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_vdev_async_write_min_active}} || &amp;#039;&amp;#039;&amp;#039;Async Write - Min Active I/Os&amp;#039;&amp;#039;&amp;#039; || 1&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5 || 2 || Minimum asynchronous write I/Os active to each VDEV (zfs_vdev_async_write_min_active). Lower values generally improve latency on rotational media and hurt resilver performance.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_cache_compression}} || &amp;#039;&amp;#039;&amp;#039;Cache Compression&amp;#039;&amp;#039;&amp;#039; || on / off || on || Compresses ARC data to increase the effective size of the in-memory read cache for Storage Pools.(zfs_compressed_arc_enabled)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_prefetch_disable}} || &amp;#039;&amp;#039;&amp;#039;Prefetch Disable&amp;#039;&amp;#039;&amp;#039; || on / off || off || In cases where the IO patterns is predominantly random reads performance may be improved by disabling prefetch.(zfs_prefetch_disable)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel parameters set by this tab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
/sys/module/zfs/parameters/zfs_arc_max&lt;br /&gt;
/sys/module/zfs/parameters/zfs_dirty_data_max&lt;br /&gt;
/sys/module/zfs/parameters/zfs_dirty_data_sync_percent&lt;br /&gt;
/sys/module/zfs/parameters/zfs_txg_timeout&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_async_write_min_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_compressed_arc_enabled&lt;br /&gt;
/sys/module/zfs/parameters/zfs_prefetch_disable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pool Settings ===&lt;br /&gt;
&lt;br /&gt;
[[File:ssopt_pool.png|thumb|right|650px|Storage System Optimization, Pool Settings tab.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tunable !! Setting !! Range !! Default !! What it does&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_spdg_queue_depth}} || &amp;#039;&amp;#039;&amp;#039;Aggregate Per-Device Active I/O Limit&amp;#039;&amp;#039;&amp;#039; || 256&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;4096 || 2000 || Maximum number of IO operations active per VDEV. Acts as a global cap of the sum of all sync/async read/write IOs and scrub/resilver classes of IO.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_sync_read_queue}} || &amp;#039;&amp;#039;&amp;#039;Read Queue Depth (sync I/O)&amp;#039;&amp;#039;&amp;#039; || 4&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 || 32 || Maximum number of synchronous read IO operations active per VDEV. (zfs_vdev_sync_read_max_active)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_sync_write_queue}} || &amp;#039;&amp;#039;&amp;#039;Write Queue Depth (sync I/O)&amp;#039;&amp;#039;&amp;#039; || 4&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 || 32 || Maximum number of synchronous direct write IO operations active per VDEV. (zfs_vdev_sync_write_max_active)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_async_read_queue}} || &amp;#039;&amp;#039;&amp;#039;Read Queue Depth (async I/O)&amp;#039;&amp;#039;&amp;#039; || 4&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 || 32 || Maximum number of asynchronous read IO operations active per VDEV. (zfs_vdev_async_read_max_active)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_async_write_queue}} || &amp;#039;&amp;#039;&amp;#039;Write Queue Depth (async I/O)&amp;#039;&amp;#039;&amp;#039; || 2&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 || 32 || Maximum asynchronous write I/Os active to each VDEV (zfs_vdev_async_write_max_active). Reducing max-active can improve latency under contention, but it can also lower throughput.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_spdg_aggregation_limit}} || &amp;#039;&amp;#039;&amp;#039;I/O Aggregation Limit (KB)&amp;#039;&amp;#039;&amp;#039; || 128&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;32768 KB || 128 KB || Sets the VDEV upper bound on I/O coalescence/aggregation for a stripe of data.  Increasing this value to 1M or larger may increase throughput for sequential I/O workloads. (zfs_vdev_aggregation_limit)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_vdev_scrub_max_active}} || &amp;#039;&amp;#039;&amp;#039;Scrub Queue Depth - Max Active I/Os&amp;#039;&amp;#039;&amp;#039; || 1&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;32 || 3 || Maximum scrub or scan read I/Os active to each VDEV (zfs_vdev_scrub_max_active). Increasing this can speed up scrub and scan operations, but may increase impact on client workloads.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_vdev_scrub_min_active}} || &amp;#039;&amp;#039;&amp;#039;Scrub Queue Depth - Min Active I/Os&amp;#039;&amp;#039;&amp;#039; || 1&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;8 || 1 || Minimum scrub or scan read I/Os active to each VDEV (zfs_vdev_scrub_min_active). Lower values reduce impact on production I/O, while higher values can improve scrub progress when the pool is busy.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_spdg_default_queue_depth}} || &amp;#039;&amp;#039;&amp;#039;I/O Allocator Default Queue Depth&amp;#039;&amp;#039;&amp;#039; || 2&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;1024 || 32 || Default queue depth for each VDEV IO allocator. Higher values allow for better coalescing of sequential writes before sending them to the disk, but can increase transaction commit times. (zfs_vdev_def_queue_depth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel parameters set by this tab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_max_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_sync_read_max_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_sync_write_max_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_async_read_max_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_async_write_max_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_aggregation_limit&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_scrub_max_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_scrub_min_active&lt;br /&gt;
/sys/module/zfs/parameters/zfs_vdev_def_queue_depth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Network Settings ===&lt;br /&gt;
&lt;br /&gt;
[[File:ssopt_network.png|thumb|right|650px|Storage System Optimization, Network Settings tab.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tunable !! Setting !! Range !! Default !! What it does&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_net_queue_length}} || &amp;#039;&amp;#039;&amp;#039;Network TX/RX Queue Length&amp;#039;&amp;#039;&amp;#039; || 1000&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;20000 || 5000 || Sets the transmit and receive network queue length for high-speed network ports (10GbE and faster). Values like 5000 and higher are recommended for systems with 10GbE and faster networking. (txqueuelen)&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_netdev_max_backlog}} || &amp;#039;&amp;#039;&amp;#039;Network Device Max Backlog&amp;#039;&amp;#039;&amp;#039; || 128&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;1000000 || 1000 || Maximum number of packets allowed to queue on the input side when the interface receives data faster than the kernel can process it. (netdev_max_backlog)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel parameters set by this tab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
ip.link.txqueuelen&lt;br /&gt;
/proc/sys/net/core/netdev_max_backlog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Volume Settings ===&lt;br /&gt;
&lt;br /&gt;
[[File:ssopt_volume.png|thumb|right|650px|Storage System Optimization, Volume Settings tab.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tunable !! Setting !! Range !! Default !! What it does&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_zvol_request_sync}} || &amp;#039;&amp;#039;&amp;#039;Storage Volume sync IO mode&amp;#039;&amp;#039;&amp;#039; || on / off || on || Storage Volume (ZVOL) sync mode can be ON(1) or OFF(0), default is ON.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel parameters set by this tab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
/sys/module/zfs/parameters/zvol_request_sync&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Driver Settings ===&lt;br /&gt;
&lt;br /&gt;
[[File:ssopt_driver.png|thumb|right|650px|Storage System Optimization, Driver Settings tab.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tunable !! Setting !! Range !! Default !! What it does&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_kmem_cache_kmem_threads}} || &amp;#039;&amp;#039;&amp;#039;KMEM Cache Threads&amp;#039;&amp;#039;&amp;#039; || 1&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;16 || 4 || Number of threads used for KMEM cache operations.  Increasing this can improve performance for workloads with high levels of concurrent allocations and frees.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_kmem_cache_obj_per_slab}} || &amp;#039;&amp;#039;&amp;#039;KMEM Cache Objects Per Slab&amp;#039;&amp;#039;&amp;#039; || 8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;128 || 8 || Number of objects per slab in the KMEM cache.  Increasing this can improve performance for workloads with many small allocations.&lt;br /&gt;
|-&lt;br /&gt;
| {{Code|1=sst_kmem_cache_max_size}} || &amp;#039;&amp;#039;&amp;#039;KMEM Cache Max Size (MB)&amp;#039;&amp;#039;&amp;#039; || 32&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;2048 MB || 32 MB || Maximum size of the KMEM cache in megabytes.  Increasing this can improve performance for workloads with high memory usage.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel parameters set by this tab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
/sys/module/spl/parameters/spl_kmem_cache_kmem_threads&lt;br /&gt;
/sys/module/spl/parameters/spl_kmem_cache_obj_per_slab&lt;br /&gt;
/sys/module/spl/parameters/spl_kmem_cache_max_size&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Deprecated tunables ==&lt;br /&gt;
&lt;br /&gt;
A section whose {{Code|1=param}} is the literal value {{Code|1=deprecated}} is not loaded, and any row already stored for it is removed from the Storage System&amp;#039;s tunable list. Two identifiers have been retired this way:&lt;br /&gt;
&lt;br /&gt;
* {{Code|1=sst_resilver_prio}} -- superseded by &amp;#039;&amp;#039;&amp;#039;Resilver Priority (msec/TXG)&amp;#039;&amp;#039;&amp;#039; ({{Code|1=sst_resilver_min_time_ms}})&lt;br /&gt;
* {{Code|1=sst_write_flush_rate_mb}} -- superseded by &amp;#039;&amp;#039;&amp;#039;Write Flush Threshold (% of Write Queue RAM)&amp;#039;&amp;#039;&amp;#039; ({{Code|1=sst_write_flush_rate_percent}})&lt;br /&gt;
&lt;br /&gt;
The sections are kept in the file to record that those identifiers are spent. Do not reuse them, and do not reference them from a profile -- a profile entry naming a tunable that does not load is skipped.&lt;br /&gt;
&lt;br /&gt;
== What the service rejects ==&lt;br /&gt;
&lt;br /&gt;
The file is validated a section at a time, and a bad section is skipped rather than aborting the load, so one mistake does not cost you the rest of the file. A section is skipped, with an error naming it in {{Code|1=/var/log/qs/qs_service.log}}, when:&lt;br /&gt;
&lt;br /&gt;
* {{Code|1=title}}, {{Code|1=desc}} or {{Code|1=tab}} is missing;&lt;br /&gt;
* {{Code|1=default}} falls outside {{Code|1=min}} and {{Code|1=max}};&lt;br /&gt;
* {{Code|1=min}}, {{Code|1=max}} and {{Code|1=default}} are all zero or all absent;&lt;br /&gt;
* the section name duplicates one already read from the file.&lt;br /&gt;
&lt;br /&gt;
Two further behaviours are worth knowing because they look like something reverting on its own:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A stored value that falls outside a new {{Code|1=min}}/{{Code|1=max}} range is reset to the default&amp;#039;&amp;#039;&amp;#039; when the file is next read, and the service log names both the old and the new value. Narrowing a range therefore silently re-tunes any system whose value sat outside it.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A profile value outside the range is skipped, not clamped.&amp;#039;&amp;#039;&amp;#039; The rest of the profile still applies. This is covered on [[Storage System Optimization]] along with the log message to look for.&lt;br /&gt;
&lt;br /&gt;
== When a change takes effect ==&lt;br /&gt;
&lt;br /&gt;
The file is read once, while the QuantaStor service starts. There is no periodic re-read and no reload command, so an edit needs a service restart before it is seen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart quantastor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Immediately after loading the file, QuantaStor writes every tunable&amp;#039;s stored value out to its kernel parameter. That is what makes the settings survive a reboot, and it is why a tunable that is missing its {{Code|1=param}} path only produces a warning rather than an error.&lt;br /&gt;
&lt;br /&gt;
What a restart does and does not change:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Changing {{Code|1=default}} does not change the value a Storage System is running.&amp;#039;&amp;#039;&amp;#039; Values are stored per Storage System in the configuration database, and a stored value always wins over the file&amp;#039;s default. A new default reaches a system that has no stored value for that tunable yet, and it is what the &amp;#039;&amp;#039;&amp;#039;Default&amp;#039;&amp;#039;&amp;#039; profile restores -- so applying &amp;#039;&amp;#039;&amp;#039;Default&amp;#039;&amp;#039;&amp;#039; after the restart is how you pick up a changed default on an existing system.&lt;br /&gt;
* Changing {{Code|1=min}} or {{Code|1=max}} can change a running value, because a stored value outside the new range is reset to the default.&lt;br /&gt;
* Adding a section adds the tunable at its default. Removing one removes the tunable and its stored value.&lt;br /&gt;
* Changing {{Code|1=title}}, {{Code|1=desc}}, {{Code|1=tab}} or the units only affects presentation.&lt;br /&gt;
&lt;br /&gt;
For troubleshooting, the step that writes the values out to the kernel can be suppressed entirely by creating the file {{Code|1=/var/opt/osnexus/quantastor/touchfiles/tf_storage_system_tunables.disable}}. The tunables still load and still show their stored values, but no kernel parameter is written. We recommend contacting OSNEXUS support before using it, since it leaves the dialog reporting settings the system is not applying.&lt;br /&gt;
&lt;br /&gt;
== Relationship to qs_systemprofiles.conf ==&lt;br /&gt;
&lt;br /&gt;
{{Code|1=qs_systemprofiles.conf}}, in the same directory, holds the pre-canned &amp;#039;&amp;#039;&amp;#039;Optimization Profiles&amp;#039;&amp;#039;&amp;#039; -- named sets of tunable &amp;#039;&amp;#039;values&amp;#039;&amp;#039;. The two files divide the work cleanly: this file declares which tunables exist and what each one&amp;#039;s range and default are, and the profiles file only picks values for tunables declared here. A profile entry naming a tunable this file does not define is skipped, and so is one whose value falls outside the range this file sets. Profiles are covered on [[Storage System Optimization]].&lt;br /&gt;
&lt;br /&gt;
== Reading and setting tunable values ==&lt;br /&gt;
&lt;br /&gt;
Values are read and changed from the dialog or the CLI, not by editing this file -- editing it changes the tunable &amp;#039;&amp;#039;definitions&amp;#039;&amp;#039;, which is a different job. {{Code|1=[[QuantaStor CLI Command Reference#tunable-list|qs tunable-list]]}} lists every tunable on every Storage System in the grid with its current value, default and range, and {{Code|1=[[QuantaStor CLI Command Reference#tunable-get|qs tunable-get]] --tunable=&amp;amp;lt;sst_name&amp;amp;gt;}} shows one in full, including its {{Code|1=tab}} and parameter path. See [[Storage System Optimization]] for the dialog itself and the full set of tunable and profile commands.&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Storage System Optimization]] -- the dialog these tunables appear in, the Optimization Profiles, and the CLI commands that set them&lt;br /&gt;
* [[Storage System]] -- the rest of the Storage System level configuration&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;#039;&amp;#039;Verified against QuantaStor 6.9.0.&amp;#039;&amp;#039;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Qadmin</name></author>
	</entry>
</feed>