<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 02:17:29 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-8433] Maximizing Bandwidth utilization by TBF Rule with Dependency</title>
                <link>https://jira.whamcloud.com/browse/LU-8433</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;The TBF policy is not aimed to provide improved performance, it achieves rate limit through I/O throttle. When I/O is throttling, it could not make full use of system resources even there are some ideal I/O service threads and spare disk I/O bandwidth. But for some use cases, it needs to have the ability to allocate spare capacity to the workloads or background jobs. In order to ensure efficient utilization of I/O resource, we propose a dependency rule strategy. The command of a dependency rule is shown as following:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;start ruleB &amp;lt;matchCondition&amp;gt; deprule=ruleA lowerrate=$r1 upperrate=$r2
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Where deprule represents the rule name of the dependent rule, which means, &apos;ruleB&apos; depends on &apos;ruleA&apos; ; the key &apos;lowerrate&apos; indicates the lower bound of RPC rate limited value while the key &apos;upperrate&apos; indicates the upper bound of RPC rate limited value. The principle is that the real RPC rate limited value of a rule is dynamically adjusted between the lowerrate and upperrate to obtain more I/O bandwidth according to the spare I/O capacity that its dependent rule does not make full use of. &lt;/p&gt;</description>
                <environment></environment>
        <key id="38369">LU-8433</key>
            <summary>Maximizing Bandwidth utilization by TBF Rule with Dependency</summary>
                <type id="2" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11311&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="1" iconUrl="https://jira.whamcloud.com/images/icons/statuses/open.png" description="The issue is open and ready for the assignee to start work on it.">Open</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="qian_wc">Qian Yingjin</assignee>
                                    <reporter username="qian">Qian Yingjin</reporter>
                        <labels>
                    </labels>
                <created>Sun, 24 Jul 2016 06:57:23 +0000</created>
                <updated>Mon, 5 Feb 2024 02:20:04 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>11</watches>
                                                                            <comments>
                            <comment id="159674" author="pjones" created="Sun, 24 Jul 2016 12:34:45 +0000"  >&lt;p&gt;Is this something that you are working on yourself?&lt;/p&gt;</comment>
                            <comment id="159688" author="lixi" created="Mon, 25 Jul 2016 01:28:12 +0000"  >&lt;p&gt;Hi Peter,&lt;/p&gt;

&lt;p&gt;Yeah. Yingjin and me are working on this for a long time. And as far as we&apos;ve tested, the patches work well except&lt;br/&gt;
a few corner conditions. As soon as we finished fixing the defects, we will push the patches to community. And&lt;br/&gt;
code review would be much appreciated &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Regards,&lt;br/&gt;
Li Xi&lt;/p&gt;</comment>
                            <comment id="159767" author="cheneva1" created="Mon, 25 Jul 2016 17:28:09 +0000"  >&lt;p&gt;We think it is more of a new feature than improvement. Change to new feature. &lt;/p&gt;</comment>
                            <comment id="159773" author="adilger" created="Mon, 25 Jul 2016 17:41:04 +0000"  >&lt;p&gt;It isn&apos;t clear to me why the current TBF implementation will restrict performance if there are idle resources?  Is the current TBF priority a relative weighting (i.e. process RPCs matching ruleA N times more often than RPCs matching ruleB) or is it an actual limit on the number of RPCs (i.e. process only N RPCs matching ruleA per second)?  If it is a relative weighting then the threads should always be kept busy, either because RPCs matching ruleA are available, or because none are available and RPCs matching ruleB are available.&lt;/p&gt;


&lt;p&gt;What would also be useful is if TBF included the functionality from ORR to do request ordering within a given class to optimize IO submission to disk.  That could allow TBF to improve performance instead of just reducing it.  The alternative is to allow stacking NRS policies so that ORR is the secondary ordering for TBF, but I don&apos;t know if that will provide as good performance as having a single combined policy.&lt;/p&gt;</comment>
                            <comment id="159834" author="lixi" created="Tue, 26 Jul 2016 01:17:35 +0000"  >&lt;p&gt;Hmm, I think the tittle of &quot;Maximizing Bandwidth&quot; is a little bit inaccurate. It is not necessarily true that the dependency rules will maximize the bandwidth comparing to the original TBF policy. At least the puporse of implementing of dependency rules is not maximizing the bandwidth. Instead, dependency rules enable different priority levels for different NIDs/JobIDs. Assume that we have a job 0 with high priority and another job 1 with low priority. We could set a rule A to match the job 0, and rule B which matches job 1 and depends on rule A. Ideally, the modified TBF policy would always provide as much RPC rate as possible to job 0. If job 0 is not using up the whole bandwidth on the OSS, job 1 could increase its rate limitation. And if job 0 is not getting the expected RPC rate of rule A, the RPC rate of job 1 should be decreased. So, as you can see, this is advanced QoS, not maximizing bandwidth. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Yeah, I would expect that combing ORR with TBF might be able to improve the throughput in total.&lt;/p&gt;</comment>
                            <comment id="159836" author="qian" created="Tue, 26 Jul 2016 03:28:37 +0000"  >&lt;p&gt;Our current TBF policy is an actual limit on the number of RPCs.&lt;br/&gt;
There is a paper named &quot;mClock: Handling Throughput Variability for Hypervisor IO Scheduling&quot; (&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.182.4720&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.182.4720&lt;/a&gt;) , I think it can solve the question you concerned above. According to the paper, it has following features: Proportional allocation, Latency support, Reservation support, Limit support and Handle capacity fluctuation, etc.&lt;br/&gt;
mClock  assigns tags spaced by increments of 1/rate to succes-sive requests of a VM. If all requests are scheduled in order of their tag values, the VM will receive service in proportion to rate. And mClock extend the notion to use multiple tags to support proportional-share fairness subject to minimum reservations and maximum limits on the IO allocations for VMs. Our algorithm also uses the notion similar with tag-based scheduling to achieve rate control, but we set the deadline (tags) based on the class not based on each request, the sort set according to the deadline is much less, and all classes are selected in order of their deadline and then schedule the requests in the class queue in FCFS order. As the general intuitive ideas are similar, we think it is possible to integrated mClock algorithm into our algorithm, but we still need to investigate. &lt;/p&gt;</comment>
                            <comment id="179005" author="gerrit" created="Sat, 24 Dec 2016 08:47:21 +0000"  >&lt;p&gt;Yingjin Qian (qian@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/24515&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/24515&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-8433&quot; title=&quot;Maximizing Bandwidth utilization by TBF Rule with Dependency&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-8433&quot;&gt;LU-8433&lt;/a&gt; nrs: Maximizing throughput via rules with dependency&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 2de06fce6b484239a9dc9491557bd76177386bab&lt;/p&gt;</comment>
                            <comment id="181289" author="adilger" created="Thu, 19 Jan 2017 00:51:39 +0000"  >&lt;p&gt;To my reading, the specification of dependent rules will be complex and not easily handled by users.  Instead, it seems like TBF could have &quot;soft&quot; scheduling of RPCs using the existing rules, and just not enforce RPC limits on classes if there are no RPCs of some higher priority in the queue.  In essence (I think) a class with outstanding RPCs would continue to gain tokens (in proportion with the rate of lower-priority rules) while it has queued RPCs and higher priorities do not.  Such rules could add a new keyword to specify &lt;tt&gt;rate_soft=&lt;/tt&gt; or similar (since the current &lt;tt&gt;rate=&lt;/tt&gt; is considered a hard limit today).&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="80635">LU-17503</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="78995">LU-17296</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="34888">LUDOC-328</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <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_10030" key="com.atlassian.jira.plugin.system.customfieldtypes:labels">
                        <customfieldname>Epic/Theme</customfieldname>
                        <customfieldvalues>
                                        <label>patch</label>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzyidj:</customfieldvalue>

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