<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:02:20 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-13563] WBC: Reclaim mechanism for cached inodes and pages under limits in MemFS</title>
                <link>https://jira.whamcloud.com/browse/LU-13563</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;It would better to design a reclaim mechanism to free up some reserved inodes for newly creation or cache pages for latter I/O in case of cache saturation.&lt;br/&gt;
We could use a kernel shrinker daemon that runs periodically:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Unreserve inodes cached in MemFS.&lt;/li&gt;
	&lt;li&gt;Commit the cache pages from MemFS into Lustre (assimilation phase) and unaccount all cached pages from the MemFS limits.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The cache shrinker starts to work if the cache allocation has become larger than the upper watermark and it evicts files until the allocation is below a lower watermark.&lt;/p&gt;</description>
                <environment></environment>
        <key id="59199">LU-13563</key>
            <summary>WBC: Reclaim mechanism for cached inodes and pages under limits in MemFS</summary>
                <type id="7" iconUrl="https://jira.whamcloud.com/images/icons/issuetypes/task_agile.png">Technical task</type>
                            <parent id="51932">LU-10938</parent>
                                    <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_wc">Qian Yingjin</reporter>
                        <labels>
                    </labels>
                <created>Fri, 15 May 2020 14:25:31 +0000</created>
                <updated>Mon, 13 Feb 2023 08:37:09 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                            <comments>
                            <comment id="270358" author="adilger" created="Fri, 15 May 2020 18:43:29 +0000"  >&lt;p&gt;Could we just hook into the existing kernel inode/slab/page shrinkers to manage this?  One thing that is important to remember is that these shrinkers are essentially a &quot;notification method&quot; from the kernel about memory pressure, but we should still be free to add/modify the inodes/pages that are being flushed at one time to be more IO/RPC friendly (e.g. selecting contiguous pages to write to the OST, though I&apos;m not sure what would be best for MDT aggregation).&lt;/p&gt;

&lt;p&gt;One thing that we have to worry about is delaying writeback to the MDT/OST for too long, as that can cause memory pressure to increase significantly, and we will have wasted tens of seconds not sending RPCs, which could have written GBs of dirty data during that time.  I think as much as possible it makes sense to have a &quot;write early, free late&quot; kind of policy that we have for dirty file data so that we don&apos;t waste the bandwidth/IOPS just waiting until we are short of memory.&lt;/p&gt;</comment>
                            <comment id="270892" author="gerrit" created="Fri, 22 May 2020 03:40:54 +0000"  >&lt;p&gt;Yingjin Qian (qian@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/38697&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/38697&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13563&quot; title=&quot;WBC: Reclaim mechanism for cached inodes and pages under limits in MemFS&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13563&quot;&gt;LU-13563&lt;/a&gt; wbc: lfs wbc unreserve command to reclaim inodes&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: be6a95ca03a262d9e7ec3330a94be7b4d086b921&lt;/p&gt;</comment>
                            <comment id="270916" author="qian_wc" created="Fri, 22 May 2020 09:56:48 +0000"  >&lt;p&gt;&quot;&lt;/p&gt;

&lt;p&gt;One thing that we have to worry about is delaying writeback to the MDT/OST for too long, as that can cause memory pressure to increase significantly, and we will have wasted tens of seconds not sending RPCs, which could have written GBs of dirty data during that time. I think as much as possible it makes sense to have a &quot;write early, free late&quot; kind of policy that we have for dirty file data so that we don&apos;t waste the bandwidth/IOPS just waiting until we are short of memory.&lt;/p&gt;

&lt;p&gt;&quot;&lt;/p&gt;

&lt;p&gt;Can we tune the kernel writeback parameters to achieve this goal?&lt;/p&gt;

&lt;p&gt;Linux Writeback Settings&lt;/p&gt;
&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Variable&lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;dirty_background_ratio&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;As a percentage of total memory, the number of pages at which the flusher threads begin writeback of dirty data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;dirty_expire_centisecs&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&#160;In milliseconds, how old data must be to be written out the next time a flusher thread wakes to perform periodic writeback.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;dirty_ratio &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;As a percentage of total memory, the number of pages a process generates before it begins writeback of dirty data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;dirty_writeback_centisecs&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;In milliseconds, how often a flusher thread should wake up to write data back out to disk.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;Moreover, for data IO pages, we can control the limit of cache pages in MemFS per file to allow data caching in MemFS. If exceed this threshold (i.e. max_pages_per_rpc: 16M? or only 1M to allow to cache much more small files), the client will assimilate the cache pages from MemFS into Lustre. After that, all data IO on this file is directed to Lustre OSTs via Lustre normal IO path.&lt;/p&gt;</comment>
                            <comment id="271376" author="gerrit" created="Thu, 28 May 2020 02:54:19 +0000"  >&lt;p&gt;Yingjin Qian (qian@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/38739&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/38739&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13563&quot; title=&quot;WBC: Reclaim mechanism for cached inodes and pages under limits in MemFS&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13563&quot;&gt;LU-13563&lt;/a&gt; wbc: reclaim mechanism for inodes cached in MemFS&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 6bc9b4310c573426e62166168e55c6cce972bbbb&lt;/p&gt;</comment>
                            <comment id="271424" author="gerrit" created="Thu, 28 May 2020 15:12:29 +0000"  >&lt;p&gt;Yingjin Qian (qian@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/38749&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/38749&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13563&quot; title=&quot;WBC: Reclaim mechanism for cached inodes and pages under limits in MemFS&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13563&quot;&gt;LU-13563&lt;/a&gt; wbc: reclaim mechanism for pages cached in MemFS&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 66944d44e32abbb8a8332746cfa2fa5961267515&lt;/p&gt;</comment>
                            <comment id="272366" author="gerrit" created="Tue, 9 Jun 2020 10:08:51 +0000"  >&lt;p&gt;Hongchao Zhang (hongchao@whamcloud.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/38875&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/38875&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13563&quot; title=&quot;WBC: Reclaim mechanism for cached inodes and pages under limits in MemFS&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13563&quot;&gt;LU-13563&lt;/a&gt; mdt: ignore quota when creating slave stripe&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: d497a600c487fd62401d776cea7d18644a74d4e2&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                                        </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_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i010gf:</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>