<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 02:57:36 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-13011] WBC2: Integrate PCC with Metadata Writeback Caching</title>
                <link>https://jira.whamcloud.com/browse/LU-13011</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;The memory size on a client is limit compared with the local persistent storage such as SSDs/NVMe. For a WBC subtree, its metadata can be reasonably whole cached in MemFS. But data for regular files maybe grows up too large to cache on client-side MemFS.&lt;/p&gt;
&lt;h2&gt;&lt;a name=&quot;DataonPCC&quot;&gt;&lt;/a&gt;Data on PCC&lt;/h2&gt;

&lt;p&gt;PCC can be used as the client-side persistent caching for the data of regular files under protection of EX WBC lock.&lt;/p&gt;

&lt;p&gt;The PCC copy stub can be created according to FID when create the regular file on MemFS and then all data I/O are directed into PCC.&lt;/p&gt;

&lt;p&gt;Or when the regular file growing too large for the client memory, create the corresponding PCC copy stub and attach the file into PCC.&lt;/p&gt;

&lt;p&gt;Or at the time of assimilate data from MemFS into Lustre clio, create the PCC copy stub, write the data into PCC.&lt;/p&gt;

&lt;p&gt;All these operations do not require interaction with MDS until flush is needed.During flushing for a regular file, it just needs to set the file with HSM exists, archived and released on MDT. The file data cached on PCC can defer resync to Lustre OSTs or evict from PCC when it is nearly full.&lt;/p&gt;
&lt;h2&gt;&lt;a name=&quot;MetadataandDataallonPCC&quot;&gt;&lt;/a&gt;Metadata and Data all on PCC&lt;/h2&gt;

&lt;p&gt;It is desirable if metadata and data can both be cached on PCC, not only for larger capacity compared with the memory size of the client, but also for persistence and recoverability.&lt;/p&gt;

&lt;p&gt;The proposal design are as follows:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;There is a PCCPATH/WBCROOT directory under the PCC device;&lt;/li&gt;
	&lt;li&gt;Once create a newly directory &apos;dir&apos; with WBC EX lock returned from MDT, create a corresponding metadata stub (also a directory) on PCC &quot;PCCPATH/WBCROOT/FID(dir)&quot; where &quot;FID(dir)&quot; is the FID of the directory &quot;dir&quot;.&lt;/li&gt;
	&lt;li&gt;All IO operations under this directory can be directly performed equally in the directory &quot;PCCPATH/WBCROOT/FID(dir)&quot; on PCC.
	&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
		&lt;li&gt;Create a directory &quot;dir1&quot; under the directory &quot;dir&quot;, Lustre: &quot;dir/dir1&quot; -&amp;gt; PCC: &quot;PCCPATH/WBCROOT/FID(dir)/dir1&quot;;&lt;/li&gt;
		&lt;li&gt;Create a directory &quot;dir2&quot; under the directory &quot;dir1&quot;, Lustre: &quot;dir/dir1/dir2&quot; -&amp;gt; PCC: &quot;PCCPATH/WBCROOT/FID(dir)/dir1/dir2&quot;;&lt;/li&gt;
		&lt;li&gt;Create a regular file &quot;file1&quot; under the directory &quot;dir&quot;, Lustre:: &quot;dir/file1&quot; -&amp;gt; PCC: &quot;PCCPATH/WBCROOT/FID(dir)/file1&quot;;&lt;/li&gt;
		&lt;li&gt;Writing data into &quot;dir/file1&quot; is directing into &quot;PCCPATH/WBCROOT/FID(dir)/file1&quot; on PCC;&lt;/li&gt;
		&lt;li&gt;Other operations are similar: read(), setattr(), stat(), truncate(), readdir()...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;When WBC EX lock is revoking:
	&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
		&lt;li&gt;For a child dir &quot;dir1&quot; under this directory, after it has created on MDT and the client has acquired the returned corresponding WBC EX lock to protect this child dir, move and rename it to PCCPATH/WBCROOT/FID(dir1) -&lt;br/&gt;
 mv PCCPATH/WBCROOT/dir/dir1 PCCPATH/WBCROOT/FID(dir1)&lt;/li&gt;
		&lt;li&gt;For a child regular file &quot;file1&quot; under this directory, the client first moves and renames it according HSM naming structure as follows:&lt;br/&gt;
 &quot;%04x/%04x/%04x/%04x/%04x/%04x/&quot; DFID_NOBRACE FID(file1)&lt;br/&gt;
 And then create a metadata object setting with HSM exists, archived and released on MDT;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;After finished to flush all children directories and files, the directory &quot;PCCPATH/WBCROOT/FID(dir)&quot; should be an empty directory, and it could be deleted directly.&lt;/li&gt;
	&lt;li&gt;After that, it can release the WBC EX lock for &quot;dir&quot; safely.&lt;/li&gt;
&lt;/ol&gt;


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

&lt;p&gt;FID maintain:&lt;/p&gt;

&lt;p&gt;Once the metadata is also cached on PCC, directories and files under the root WBC directory may be evicted from VFS memory cache (dcache, page chace, inode cache), so when create metadata stub on PCC or the inode is evicted from cache (FID has already allocated for this file on the client), the client needs to store FID into a extent attribute EA of the metadata stub on PCC.&lt;/p&gt;

&lt;p&gt;If not care about the consistence of FID for the file, maybe we could allocate a new FID for the file when flush the file to MDT?&lt;/p&gt;

&lt;p&gt;Also we could use the strategy in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13024&quot; title=&quot;Lustre HSM support for a directory&#160;&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13024&quot;&gt;LU-13024&lt;/a&gt;:&#160;Lustre HSM support for a subtree to organize and name the root WBC directory&#160; on PCC&lt;/p&gt;

&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Much larger capacity;&lt;/li&gt;
	&lt;li&gt;fsync() can become a client local operation;&lt;/li&gt;
	&lt;li&gt;Do not need any cache limits for WBC;&lt;/li&gt;
	&lt;li&gt;When the client crashes, it can still recovery data from PCC;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Disadvantage:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;May have impact on metadata performance, compared with MemFS, as it needs to create extra metadata stub on PCC.&lt;/li&gt;
	&lt;li&gt;As it does not need to pin the dentry in the memory, sub directories and files under the root WBC directory (directly protected by WBC EX lock) may be synced into PCC and evicted from VFS memory cache (dcache, page cache). Thus, when flushing a root WBC directory due to WBC EX lock revocation, the client may need to get all its children dentry via readdir() call on the directory stub on PCC, and then flush the children directories and files.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="57461">LU-13011</key>
            <summary>WBC2: Integrate PCC with Metadata Writeback Caching</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>Tue, 26 Nov 2019 09:39:15 +0000</created>
                <updated>Wed, 18 May 2022 09:45:50 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                            <comments>
                            <comment id="258873" author="adilger" created="Wed, 27 Nov 2019 00:54:40 +0000"  >&lt;p&gt;I think this is a WBC v2 target. Getting basic WBC functionality working is the goal for 2.14. &lt;/p&gt;</comment>
                            <comment id="258937" author="adilger" created="Thu, 28 Nov 2019 00:01:44 +0000"  >&lt;blockquote&gt;
&lt;p&gt;If not care about the consistence of FID for the file, maybe we could allocate a new FID for the file when flush the file to MDT?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The client can already allocate the FIDs itself, why would it need to allocate a new FID when flushing the file to the MDT?  The only time I this this might be needed is if the client selected a FID on one MDT, but that MDT is full when it comes time to flush the WBC files/directories.  However, as part of the WBC v1 implementation there needs to be a &quot;grant&quot; request for inodes/blocks on each MDT (as is done with OSTs today) to ensure that the client does not create more data/files than can fit into the filesystem.  Otherwise the client data would be lost/discarded with &lt;tt&gt;ENOSPC&lt;/tt&gt; long after it is written instead of returning an error to the application, which makes users unhappy.&lt;/p&gt;</comment>
                            <comment id="308192" author="gerrit" created="Fri, 23 Jul 2021 09:41:52 +0000"  >&lt;p&gt;Yingjin Qian (qian@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/44392&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/44392&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13011&quot; title=&quot;WBC2: Integrate PCC with Metadata Writeback Caching&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13011&quot;&gt;LU-13011&lt;/a&gt; wbc: data on PCC (DOP) for lock drop flush mode&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: fafaeda4ae56672b0ed140d8052031db8460b35d&lt;/p&gt;</comment>
                            <comment id="308870" author="gerrit" created="Fri, 30 Jul 2021 03:43:24 +0000"  >&lt;p&gt;Yingjin Qian (qian@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/44427&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/44427&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13011&quot; title=&quot;WBC2: Integrate PCC with Metadata Writeback Caching&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13011&quot;&gt;LU-13011&lt;/a&gt; wbc: create PCC copy when file grows too large&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 5f71b8950db9d690347a3006559d7dc04a133d56&lt;/p&gt;</comment>
                            <comment id="318933" author="gerrit" created="Tue, 23 Nov 2021 03:42:26 +0000"  >&lt;p&gt;&quot;Yingjin Qian &amp;lt;qian@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45639&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45639&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13011&quot; title=&quot;WBC2: Integrate PCC with Metadata Writeback Caching&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13011&quot;&gt;LU-13011&lt;/a&gt; wbc: data on PCC for lock keep flush mode&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 0e15e14373dba34de4888988cea95836e53bae04&lt;/p&gt;</comment>
                            <comment id="334091" author="gerrit" created="Sat, 7 May 2022 09:32:14 +0000"  >&lt;p&gt;&quot;Yingjin Qian &amp;lt;qian@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/47246&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/47246&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13011&quot; title=&quot;WBC2: Integrate PCC with Metadata Writeback Caching&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13011&quot;&gt;LU-13011&lt;/a&gt; wbc: print PCC file path for data on PCC&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: bc8e04b25855954cd28c56e5acd03af0f3f80805&lt;/p&gt;</comment>
                            <comment id="335172" author="gerrit" created="Wed, 18 May 2022 09:45:50 +0000"  >&lt;p&gt;&quot;Yingjin Qian &amp;lt;qian@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/47386&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/47386&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13011&quot; title=&quot;WBC2: Integrate PCC with Metadata Writeback Caching&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13011&quot;&gt;LU-13011&lt;/a&gt; wbc: obtain attr from PCC once data on PCC&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: e2cc46392cb2ca21cd5f1abe7ae8571747b4f5d7&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="51932">LU-10938</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_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i00pxj:</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>