<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:03:16 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-55] Finish SMP scalability work (public tracking ticket)</title>
                <link>https://jira.whamcloud.com/browse/LU-55</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Because &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-56&quot; title=&quot;Finish SMP scalability work&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-56&quot;&gt;&lt;del&gt;IT-2&lt;/del&gt;&lt;/a&gt; is internal task which is only visible to Whamcloud engineers, so I create this public ticket to tracking efforts and record discussions.&lt;/p&gt;

&lt;p&gt;all patches:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://git.whamcloud.com/gitweb/?p=fs/lustre-dev.git;a=shortlog;h=refs/heads/liang/b_smp&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://git.whamcloud.com/gitweb/?p=fs/lustre-dev.git;a=shortlog;h=refs/heads/liang/b_smp&lt;/a&gt;&lt;/p&gt;
</description>
                <environment></environment>
        <key id="10294">LU-55</key>
            <summary>Finish SMP scalability work (public tracking ticket)</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.whamcloud.com/images/icons/priorities/major.svg">Major</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="liang">Liang Zhen</assignee>
                                    <reporter username="liang">Liang Zhen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 25 Jan 2011 00:28:25 +0000</created>
                <updated>Tue, 25 Jan 2011 09:59:27 +0000</updated>
                            <resolved>Tue, 25 Jan 2011 09:59:27 +0000</resolved>
                                    <version>Lustre 2.0.0</version>
                                    <fixVersion>Lustre 2.0.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                            <comments>
                            <comment id="10484" author="liang" created="Tue, 25 Jan 2011 01:24:39 +0000"  >&lt;p&gt;On large scale SMP system, SMP scalability of diskfs will be bottleneck of these operations under shared directory, there is no easy solution of this, I&apos;m trying to workout a pdirops patch to improve SMP performance of shared directory, at the same time I&apos;m thinking about adding a metadata changing operations driver to improvement performance:&lt;/p&gt;

&lt;p&gt;following descriptions are just copied form &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-56&quot; title=&quot;Finish SMP scalability work&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-56&quot;&gt;&lt;del&gt;IT-2&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;this driver includes two parts:
	&lt;ul&gt;
		&lt;li&gt;MDD dir fid cache&lt;/li&gt;
		&lt;li&gt;Metadata transaction schedulers&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;each CPU has a local fid cache (it&apos;s a 8 buckets hash-table, each bucket is a 8 items LRU, so we can cache 64 fids by default, of course we can increase number of buckets)&lt;/li&gt;
	&lt;li&gt;transaction schedulers are percpu threads pool in MDD layer&lt;/li&gt;
	&lt;li&gt;each time we create/remove file from a directory, we push the fid into the local CPU fid cache(LRU)&lt;/li&gt;
	&lt;li&gt;if the fid is already in the cache, then just increase a refcount(# of hits) on the fid and move the fid to top of LRU&lt;/li&gt;
	&lt;li&gt;when we push a new fid into local cache, the fid at bottom of LRU will be popped out&lt;/li&gt;
	&lt;li&gt;if refcount(# of hits) of fid in local CPU cache &amp;gt;= N (default is 32), we try to lookup the fid in global fid cache, which is a hash-table as well (do nothing if it already has reference to fid in global cache).
	&lt;ul&gt;
		&lt;li&gt;if the fid is not in the global cache, we just add it to global cache and set refcount to 1 (1 CPU is using it)&lt;/li&gt;
		&lt;li&gt;if the fid is already in global cache, we increase refcount of fid in global cache&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;if refcount of fid in global cache &amp;lt; M, we just return -1 and continue to run transaction in context of current thread (mdt service thread)&lt;/li&gt;
	&lt;li&gt;if refcount of fid in global cache is &amp;gt;= M (M is number of CPUs, which can be 2, 4... as many as we can get good performance of shared directory with ldiskfs/ext4, it&apos;s tunable), we specify M CPUs for the fid and return one CPU id within those M CPUs, if caller get a CPU id different with current CPU id, it will launch a MDD level &quot;transaction request&quot;, and wakeup one MDD transaction thread to handle the &quot;transaction request&quot;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;By this way, we only have very low overhead for common code (almost no contention), almost nothing changed for uniq directory operations. At the same time, we decreased contention on pdirops because changes on shared directory are localized on a few CPUs.&lt;/p&gt;

&lt;p&gt;Also, we probably can sort unlink requests inside MDD schedulers to decrease disk seek somehow, but I&apos;m not sure how much it can help &lt;/p&gt;</comment>
                            <comment id="10489" author="rread" created="Tue, 25 Jan 2011 09:59:27 +0000"  >&lt;p&gt;I moved &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-56&quot; title=&quot;Finish SMP scalability work&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-56&quot;&gt;&lt;del&gt;IT-2&lt;/del&gt;&lt;/a&gt; to the Lustre project, so now it is visible to all. &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|hzw3lr:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>10671</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>