<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:48:03 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-5043] ptlrpcd threads only run on one CPU</title>
                <link>https://jira.whamcloud.com/browse/LU-5043</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;We are seeing a problem with our Lustre clients on our BG/Q I/O Nodes (ION).  It appears that all of the ptlrpcd are stuck running on &quot;CPU&quot; number zero.  This is especially problematic for this CPU because all of the hardware interrupts for the networking card are wired only to CPU 0.  This results in a client that is unresponsive under write loads (and maybe others) from the BG/Q compute nodes.&lt;/p&gt;

&lt;p&gt;Some current details:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;PPC64&lt;/li&gt;
	&lt;li&gt;17 cores with 4-way threading, so Linux sees 68 CPUs.&lt;/li&gt;
	&lt;li&gt;Hardware interrupts routed to CPU0 only&lt;/li&gt;
	&lt;li&gt;CONFIG_NUMA is not set&lt;/li&gt;
	&lt;li&gt;Lustre 2.4.0-28chaos, which contains the &quot;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4509&quot; title=&quot;clio can be stuck in osc_extent_wait&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4509&quot;&gt;&lt;del&gt;LU-4509&lt;/del&gt;&lt;/a&gt; ptlrpc: re-enqueue ptlrpcd worker&quot; patch (see github.com/chaos/lustre)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;When I watch CPU usage on a node using &lt;tt&gt;top&lt;/tt&gt;, I see 100% CPU usage on CPU 0, and very little happening on the rest of the CPUs.  Sometimes the flush-lustre thread uses a fair bit of CPU time CPU0 as well.&lt;/p&gt;

&lt;p&gt;100+ sysiod threads (the user-space process that handles forwarded IO from the compute nodes) are all running, but using very little CPU time in aggregate.  At least as far as I can tell.  I have a feeling that I&apos;m not seeing everything in &lt;tt&gt;top&lt;/tt&gt; for some reason.  Maybe I&apos;m wrong.&lt;/p&gt;

&lt;p&gt;I hacked the ptlrpcd() function to set the allowed CPUs according to my own mask, which is cpu_active_mask but with CPU 0 removed using cpumask_clear_cpu().  Sure enough, now CPU 1 is where 100% is spent insead of CPU 0.  I understand why CPU 0 is avoided, but not why CPU 1 is the only CPU used out of all that are available.&lt;/p&gt;

&lt;p&gt;The cpu mask handling code in Lustre is none too easy to follow...  Is there some setting that Lustre is using that would bind it to a single CPU?  I can&apos;t see it yet...&lt;/p&gt;</description>
                <environment></environment>
        <key id="24644">LU-5043</key>
            <summary>ptlrpcd threads only run on one CPU</summary>
                <type id="1" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="2" iconUrl="https://jira.whamcloud.com/images/icons/priorities/critical.svg">Critical</priority>
                        <status id="6" iconUrl="https://jira.whamcloud.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="wc-triage">WC Triage</assignee>
                                    <reporter username="morrone">Christopher Morrone</reporter>
                        <labels>
                    </labels>
                <created>Sat, 10 May 2014 00:38:00 +0000</created>
                <updated>Mon, 12 May 2014 12:56:30 +0000</updated>
                            <resolved>Mon, 12 May 2014 12:56:30 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                            <comments>
                            <comment id="83691" author="morrone" created="Sat, 10 May 2014 01:42:28 +0000"  >&lt;p&gt;I am not sure that I understand the logic here in ptlrpcd_select_pc():&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;        &lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; PDL_POLICY_SAME:
                idx = cfs_smp_processor_id() % ptlrpcds-&amp;gt;pd_nthreads;
                &lt;span class=&quot;code-keyword&quot;&gt;break&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What makes us think that this will result in a ptlrpcd thread that runs on the same CPU as the caller?&lt;/p&gt;</comment>
                            <comment id="83692" author="morrone" created="Sat, 10 May 2014 02:58:18 +0000"  >&lt;p&gt;OK, you guys (and Lustre in general) are off the hook for this issue, I think.  This was either self- or vendor-inflicted months ago.&lt;/p&gt;

&lt;p&gt;It looks like someone got the bright idea to set &quot;isolcpu=0,1,2,3&quot; on the kernel command line.  This &quot;feature&quot; isolates those cpus from normal scheduler activities.  It does not, apparently, stop new kernel threads from starting up on those isolated CPUs.  So many of the Lustre kernel threads got started on CPU 0 and because that CPU is isolated, they never get moved anywhere else.&lt;/p&gt;

&lt;p&gt;There is a possibility that Lustre supposed to do something to play nice with that option...but if I find that out I&apos;ll just start a new ticket.&lt;/p&gt;

&lt;p&gt;Closing ticket.&lt;/p&gt;</comment>
                            <comment id="83695" author="pjones" created="Sat, 10 May 2014 04:26:37 +0000"  >&lt;p&gt;thanks Chris.&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                            <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzwm9b:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>13936</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10060" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Severity</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10022"><![CDATA[3]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>