<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>STX on sysarcher/@ich_code</title><link>https://sysarcher.github.io/categories/stx/</link><description>Recent content in STX on sysarcher/@ich_code</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 09 Nov 2020 21:22:37 +0200</lastBuildDate><atom:link href="https://sysarcher.github.io/categories/stx/index.xml" rel="self" type="application/rss+xml"/><item><title>Core Isolation Feature in STX4.0</title><link>https://sysarcher.github.io/posts/stx-for-rt/</link><pubDate>Mon, 09 Nov 2020 21:22:37 +0200</pubDate><guid>https://sysarcher.github.io/posts/stx-for-rt/</guid><description>&lt;p&gt;&lt;em&gt;StarlingX is continuing to evolve and update it&amp;rsquo;s Real-time capabilities but documentation can be a bit sparse. This page is hopefully a placeholder for until we have a great documentation around the capabilities.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="isolating-cpu-cores"&gt;Isolating CPU Cores&lt;/h3&gt;
&lt;p&gt;In a StarlingX cluster CPU isolation and Kernel commandline parameters are (generally) managed from the active controller through &lt;code&gt;system host-cpu-XXX&lt;/code&gt; commands.&lt;/p&gt;
&lt;p&gt;For isolation, we have the &lt;code&gt;Application-isolated&lt;/code&gt; assigned_function.&lt;/p&gt;
&lt;p&gt;Get current functions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ system host-cpu-list controller-0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+--------------------------------------+----------+-----------+----------+--------+-----------------------------------------+-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| uuid | log_core | processor | phy_core | thread | processor_model | assigned_function |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+--------------------------------------+----------+-----------+----------+--------+-----------------------------------------+-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 65b8337e-08bf-4e32-b7e6-17505eaf0806 | 0 | 0 | 0 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| b7578ba2-cba0-46cd-b860-3ba5c03ba91d | 1 | 0 | 1 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| ff7447a2-00df-43db-8716-d1416faf89bc | 2 | 0 | 2 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 142796e5-b17d-48e9-b18a-b84c1ea5ae37 | 3 | 0 | 3 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| c68a8dc7-367f-4512-84ca-ec559fbb63f4 | 4 | 0 | 4 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 15f360e2-d27c-4d9a-b0ff-0b78387eeb8c | 5 | 0 | 5 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 89274cb5-4fb5-4f5b-a8c5-ec36394b5ce5 | 6 | 0 | 6 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 33fb1e8e-77cd-4334-b061-dd40e6b7f7ba | 7 | 0 | 7 | 0 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 8c804a31-c61e-408c-83c4-3c7192a861d8 | 8 | 0 | 0 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 560ad09d-48df-42ec-8588-7e739030d7e3 | 9 | 0 | 1 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| cbd83713-0118-4995-9810-486cfdbb912e | 10 | 0 | 2 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| cb45713a-fa51-4628-b536-e3d5d57c891e | 11 | 0 | 3 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 28dff3de-9913-4055-89d5-09dfc084c3c1 | 12 | 0 | 4 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 98cf6c9e-2717-4f88-b487-487dbdadd18e | 13 | 0 | 5 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 73dcec10-7a62-4d07-ba23-3482d0e0f2af | 14 | 0 | 6 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| 4a5a4477-f0db-4d77-9a6a-c77e5ca292e4 | 15 | 0 | 7 | 1 | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+--------------------------------------+----------+-----------+----------+--------+-----------------------------------------+-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;system host-cpu-modify&lt;/code&gt; command is used to modify the assigned function.&lt;/p&gt;</description><content:encoded><![CDATA[<p><em>StarlingX is continuing to evolve and update it&rsquo;s Real-time capabilities but documentation can be a bit sparse. This page is hopefully a placeholder for until we have a great documentation around the capabilities.</em></p>
<h3 id="isolating-cpu-cores">Isolating CPU Cores</h3>
<p>In a StarlingX cluster CPU isolation and Kernel commandline parameters are (generally) managed from the active controller through <code>system host-cpu-XXX</code> commands.</p>
<p>For isolation, we have the <code>Application-isolated</code> assigned_function.</p>
<p>Get current functions:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ system host-cpu-list controller-0
</span></span><span style="display:flex;"><span>+--------------------------------------+----------+-----------+----------+--------+-----------------------------------------+-------------------+
</span></span><span style="display:flex;"><span>| uuid                                 | log_core | processor | phy_core | thread | processor_model                         | assigned_function |
</span></span><span style="display:flex;"><span>+--------------------------------------+----------+-----------+----------+--------+-----------------------------------------+-------------------+
</span></span><span style="display:flex;"><span>| 65b8337e-08bf-4e32-b7e6-17505eaf0806 | 0        | 0         | 0        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform          |
</span></span><span style="display:flex;"><span>| b7578ba2-cba0-46cd-b860-3ba5c03ba91d | 1        | 0         | 1        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform          |
</span></span><span style="display:flex;"><span>| ff7447a2-00df-43db-8716-d1416faf89bc | 2        | 0         | 2        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 142796e5-b17d-48e9-b18a-b84c1ea5ae37 | 3        | 0         | 3        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| c68a8dc7-367f-4512-84ca-ec559fbb63f4 | 4        | 0         | 4        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 15f360e2-d27c-4d9a-b0ff-0b78387eeb8c | 5        | 0         | 5        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 89274cb5-4fb5-4f5b-a8c5-ec36394b5ce5 | 6        | 0         | 6        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 33fb1e8e-77cd-4334-b061-dd40e6b7f7ba | 7        | 0         | 7        | 0      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 8c804a31-c61e-408c-83c4-3c7192a861d8 | 8        | 0         | 0        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform          |
</span></span><span style="display:flex;"><span>| 560ad09d-48df-42ec-8588-7e739030d7e3 | 9        | 0         | 1        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Platform          |
</span></span><span style="display:flex;"><span>| cbd83713-0118-4995-9810-486cfdbb912e | 10       | 0         | 2        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| cb45713a-fa51-4628-b536-e3d5d57c891e | 11       | 0         | 3        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 28dff3de-9913-4055-89d5-09dfc084c3c1 | 12       | 0         | 4        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 98cf6c9e-2717-4f88-b487-487dbdadd18e | 13       | 0         | 5        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 73dcec10-7a62-4d07-ba23-3482d0e0f2af | 14       | 0         | 6        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>| 4a5a4477-f0db-4d77-9a6a-c77e5ca292e4 | 15       | 0         | 7        | 1      | Intel(R) Xeon(R) D-2146NT CPU @ 2.30GHz | Application       |
</span></span><span style="display:flex;"><span>+--------------------------------------+----------+-----------+----------+--------+-----------------------------------------+-------------------+
</span></span></code></pre></div><p>The <code>system host-cpu-modify</code> command is used to modify the assigned function.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ system host-cpu-modify
</span></span><span style="display:flex;"><span>usage: system host-cpu-modify [--nowrap] -f &lt;function&gt;
</span></span><span style="display:flex;"><span>                              [-p0 &lt;num_cores_on_processor0&gt;]
</span></span><span style="display:flex;"><span>                              [-p1 &lt;num_cores_on_processor1&gt;]
</span></span><span style="display:flex;"><span>                              [-p2 &lt;num_cores_on_processor2&gt;]
</span></span><span style="display:flex;"><span>                              [-p3 &lt;num_cores_on_processor3&gt;]
</span></span><span style="display:flex;"><span>                              &lt;hostnameorid&gt;
</span></span></code></pre></div><p>For example, to set the 15th logical core to <code>Application-isolated</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ system host-cpu-modify -f Application-isolated -p0 <span style="color:#ae81ff">15</span> controller-1
</span></span></code></pre></div><h3 id="stx-openstack"><code>stx-openstack</code></h3>
<p>One application that can make use of core isolation is <code>stx-openstack</code>. For example, if there are realtime VMs that require scheduling on isolated/dedicated cores, we need to set the <code>compute</code> key in the helm overrides (see OpenStack docs for: <a href="https://docs.openstack.org/nova/latest/configuration/config.html#compute.cpu_dedicated_set"><code>cpu_dedicated_set</code></a> and <a href="https://docs.openstack.org/nova/latest/configuration/config.html#compute.cpu_shared_set"><code>cpu_shared_set</code></a>).</p>
<p>Create a file for <code>nova</code> overrides that looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">conf</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">overrides</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">nova_compute</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">hosts</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">conf</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#75715e"># DELETED FOR CONCISENESS</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">name</span>: <span style="color:#ae81ff">controller-0</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">conf</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#75715e"># DELETED FOR CONCISENESS</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">name</span>: <span style="color:#ae81ff">controller-1</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">conf</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">nova</span>:
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">DEFAULT</span>:
</span></span><span style="display:flex;"><span>              <span style="color:#75715e"># NO CHANGE</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">compute</span>:
</span></span><span style="display:flex;"><span>              <span style="color:#f92672">cpu_dedicated_set</span>: <span style="color:#e6db74">&#39;&#34;1-2&#34;&#39;</span>
</span></span><span style="display:flex;"><span>              <span style="color:#f92672">cpu_shared_set</span>: <span style="color:#e6db74">&#39;&#34;3-5&#34;&#39;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">libvirt</span>:
</span></span><span style="display:flex;"><span>              <span style="color:#75715e"># NO CHANGE</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">pci</span>:
</span></span><span style="display:flex;"><span>              <span style="color:#f92672">passthrough_whitelist</span>:
</span></span><span style="display:flex;"><span>                <span style="color:#75715e"># NO CHANGE</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">vnc</span>:
</span></span><span style="display:flex;"><span>              <span style="color:#75715e"># NO CHANGE</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">name</span>: <span style="color:#ae81ff">worker</span>
</span></span></code></pre></div><p>Then, run the following command to apply these overrides:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ <span style="color:#75715e"># Update Helm overrides</span>
</span></span><span style="display:flex;"><span>$ system helm-override-update --values &lt;yaml-file-with-overrides&gt;.yaml stx-openstack nova openstack
</span></span><span style="display:flex;"><span>$
</span></span><span style="display:flex;"><span>$ <span style="color:#75715e"># Apply application!!</span>
</span></span><span style="display:flex;"><span>$ system application-apply stx-openstack
</span></span></code></pre></div><p>Now, Openstack is able to schedule VMs on isolated CPU cores.</p>
<h3 id="openstack-flavor">OpenStack Flavor</h3>
<p>The following properties should be added to the RT VM (hugepages not yet included)</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ openstack flavor show rt.medium
</span></span><span style="display:flex;"><span>+----------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
</span></span><span style="display:flex;"><span>| Field                      | Value                                                                                                                                                           |
</span></span><span style="display:flex;"><span>+----------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
</span></span><span style="display:flex;"><span>| OS-FLV-DISABLED:disabled   | False                                                                                                                                                           |
</span></span><span style="display:flex;"><span>| OS-FLV-EXT-DATA:ephemeral  | 0                                                                                                                                                               |
</span></span><span style="display:flex;"><span>| access_project_ids         | None                                                                                                                                                            |
</span></span><span style="display:flex;"><span>| disk                       | 10                                                                                                                                                              |
</span></span><span style="display:flex;"><span>| id                         | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx                                                                                                                            |
</span></span><span style="display:flex;"><span>| name                       | rt.medium                                                                                                                                                       |
</span></span><span style="display:flex;"><span>| os-flavor-access:is_public | True                                                                                                                                                            |
</span></span><span style="display:flex;"><span>| properties                 | hw:cpu_policy=&#39;dedicated&#39;, hw:cpu_realtime=&#39;yes&#39;, hw:cpu_realtime_mask=&#39;^0&#39;, hw:cpu_thread_policy=&#39;isolate&#39;, hw:emulator_threads_policy=&#39;share&#39;, hw:pmu=&#39;False&#39; |
</span></span><span style="display:flex;"><span>| ram                        | 2048                                                                                                                                                            |
</span></span><span style="display:flex;"><span>| rxtx_factor                | 1.0                                                                                                                                                             |
</span></span><span style="display:flex;"><span>| swap                       |                                                                                                                                                                 |
</span></span><span style="display:flex;"><span>| vcpus                      | 2                                                                                                                                                               |
</span></span><span style="display:flex;"><span>+----------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
</span></span></code></pre></div><p>Note on 2 vcpus: one will be used by linux and the other will be utilized by the RT program (<code>cyclictest</code> for instance)&hellip; You may use any number of vcpus &hellip; just make sure that one vcpu is dedicated for linux.</p>
]]></content:encoded></item></channel></rss>