<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:07:30 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-485] Remove CPT_TRANSIENT pages out of radix tree</title>
                <link>https://jira.whamcloud.com/browse/LU-485</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;In clio, we currently put both cache and transient pages into radix tree, this makes the code complex and ugly. We should remove transient pages out of radix tree.&lt;/p&gt;</description>
                <environment></environment>
        <key id="11276">LU-485</key>
            <summary>Remove CPT_TRANSIENT pages out of radix tree</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="3">Duplicate</resolution>
                                        <assignee username="jay">Jinshan Xiong</assignee>
                                    <reporter username="jay">Jinshan Xiong</reporter>
                        <labels>
                    </labels>
                <created>Tue, 5 Jul 2011 13:27:46 +0000</created>
                <updated>Fri, 8 Jul 2011 02:04:03 +0000</updated>
                            <resolved>Fri, 8 Jul 2011 02:04:03 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                            <comments>
                            <comment id="17263" author="jay" created="Tue, 5 Jul 2011 17:43:54 +0000"  >&lt;p&gt;patch is at &lt;a href=&quot;http://review.whamcloud.com/1055&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/1055&lt;/a&gt;.&lt;/p&gt;</comment>
                            <comment id="17282" author="johann" created="Wed, 6 Jul 2011 05:53:50 +0000"  >&lt;p&gt;hm, it might conflict with the new grant approach in Sequoia. We consume grant for direct I/O so we might need to keep those pages in the radix tree ... need to think further&lt;/p&gt;</comment>
                            <comment id="17288" author="niu" created="Wed, 6 Jul 2011 09:19:43 +0000"  >&lt;p&gt;Hi, Johann&lt;/p&gt;

&lt;p&gt;I don&apos;t quite understand why dio need to consume grant?&lt;/p&gt;

&lt;p&gt;Storing those disposable &apos;transient&apos; pages in the radix tree doesn&apos;t make sense to me, and it makes unaligned dio hard to be implemented (in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-247&quot; title=&quot;Lustre client slow performance on BG/P IONs: unaligned DIRECT_IO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-247&quot;&gt;&lt;del&gt;LU-247&lt;/del&gt;&lt;/a&gt;, I made a patch for unaligned dio, which doesn&apos;t associate cl_page with the dio user page, and doesn&apos;t maintain the radix tree for the user pages as well, seem it conflict with the new grant approach too. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/sad.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;</comment>
                            <comment id="17289" author="johann" created="Wed, 6 Jul 2011 09:37:50 +0000"  >
&lt;p&gt;&amp;gt; I don&apos;t quite understand why dio need to consume grant?&lt;/p&gt;

&lt;p&gt;To prevent DIOs from failing with ENOSPC while the client which sent the request still has available grants.&lt;/p&gt;

&lt;p&gt;&amp;gt; Storing those disposable &apos;transient&apos; pages in the radix tree doesn&apos;t make sense to me&lt;/p&gt;

&lt;p&gt;I tend to agree. The problem is that the new RPC engine is supposed to use the radix tree to select pages to put together in a BRW, instead of the LRU list.&lt;/p&gt;

&lt;p&gt;&amp;gt;  and it makes unaligned dio hard to be implemented (in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-247&quot; title=&quot;Lustre client slow performance on BG/P IONs: unaligned DIRECT_IO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-247&quot;&gt;&lt;del&gt;LU-247&lt;/del&gt;&lt;/a&gt;, I made a patch for unaligned dio, which doesn&apos;t associate cl_page with the dio user page, and doesn&apos;t maintain the radix tree for the user pages as well, seem it conflict with the new grant approach too. )&lt;/p&gt;

&lt;p&gt;I see, let me think about it ... &lt;/p&gt;</comment>
                            <comment id="17317" author="jay" created="Wed, 6 Jul 2011 14:24:28 +0000"  >&lt;p&gt;Actually, I tend to think DIO would be fine with radix tree grant. This is because:&lt;br/&gt;
1. for caching page, the grants are decreased when the pages are added, that is in osc_page_cache_add() function, where we should check if the grant has already held by block size. These pages must have OBD_BRW_FROM_GRANT set;&lt;br/&gt;
2. for DIO pages, they are submitted via cl_io_submit() function and should not have FROM_GRANT set. Do we really have to consume grant under this case? I mean application is able to see ENOSPC error in this case. Even we need to hold grant for DIO pages, this is easy to handle since DIO pages should be contiguous so that we can just deduct grant by block size directly, this may lose some grants but the maximum losing blocks are 2, so this is fine.&lt;/p&gt;</comment>
                            <comment id="17324" author="johann" created="Wed, 6 Jul 2011 16:51:01 +0000"  >&lt;p&gt;&amp;gt; Actually, I tend to think DIO would be fine with radix tree grant. This is because:&lt;br/&gt;
&amp;gt; 1. for caching page, the grants are decreased when the pages are added, that is in osc_page_cache_add() function, where we should check if the grant has already held by block size. These pages must have OBD_BRW_FROM_GRANT set;&lt;/p&gt;

&lt;p&gt;Right.&lt;/p&gt;

&lt;p&gt;&amp;gt; 2. for DIO pages, they are submitted via cl_io_submit() function and should not have FROM_GRANT set.&lt;/p&gt;

&lt;p&gt;For DIO, grant space is consumed in osc_io_submit_page() via a call to osc_enter_cache_try().&lt;/p&gt;

&lt;p&gt;&amp;gt; Do we really have to consume grant under this case?&lt;/p&gt;

&lt;p&gt;I don&apos;t think this is a strong requirement.&lt;/p&gt;

&lt;p&gt;&amp;gt; I mean application is able to see ENOSPC error in this case. Even we need to hold grant for DIO pages,&lt;br/&gt;
&amp;gt; this is easy to handle since DIO pages should be contiguous so that we can just deduct grant by block&lt;br/&gt;
&amp;gt; size directly, this may lose some grants but the maximum losing blocks are 2, so this is fine.&lt;/p&gt;

&lt;p&gt;Unlike b1_8, CLIO uses the same path to send RPCs for buffered &amp;amp; DIO writes (through osc_oap_to_pending()). The result is that a bulk write can have a mix of pages for direct I/O and pages from buffered writes. &lt;/p&gt;</comment>
                            <comment id="17335" author="jay" created="Wed, 6 Jul 2011 23:39:34 +0000"  >&lt;p&gt;&amp;gt;&amp;gt; Unlike b1_8, CLIO uses the same path to send RPCs for buffered &amp;amp; DIO writes (through osc_oap_to_pending()). The result is that a &lt;br/&gt;
&amp;gt;&amp;gt; write can have a mix of pages for direct I/O and pages from buffered writes.&lt;/p&gt;

&lt;p&gt;Niu is working on a patch where DIO pages are written independently.&lt;/p&gt;</comment>
                            <comment id="17355" author="niu" created="Thu, 7 Jul 2011 01:56:49 +0000"  >&lt;p&gt;I think it&apos;s possible that there are both &apos;transient&apos; page and cached page at the same time for a given file offset (imagine there are cocurrent dio and buffered read), but we store the &apos;transient&apos; page and the cached page in the same radix tree with same key(page offset), then I don&apos;t see how can we handle the cocurrent dio and buffered read?&lt;/p&gt;

&lt;p&gt;I think it has caused trouble for us (see &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-481&quot; title=&quot;sanity test_119d fails (ASSERTION((struct cl_page *)vmpage-&amp;gt;private != slice-&amp;gt;cpl_page) failed)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-481&quot;&gt;&lt;del&gt;LU-481&lt;/del&gt;&lt;/a&gt;), to make it worse, there are two level radix trees (for object and sub-object), race can happen in each level of cl_page_find0().&lt;/p&gt;</comment>
                            <comment id="17358" author="johann" created="Thu, 7 Jul 2011 05:41:43 +0000"  >&lt;p&gt;&amp;gt; Niu is working on a patch where DIO pages are written independently.&lt;/p&gt;

&lt;p&gt;That&apos;s good news actually. As long as those pages are not submitted through osc_oap_to_pending(), it is fine with me. We can handle grants for DIO separately.&lt;/p&gt;

&lt;p&gt;&amp;gt; I think it&apos;s possible that there are both &apos;transient&apos; page and cached page at the same time&lt;br/&gt;
&amp;gt; for a given file offset (imagine there are cocurrent dio and buffered read), but we store&lt;br/&gt;
&amp;gt; the &apos;transient&apos; page and the cached page in the same radix tree with same key(page offset),&lt;/p&gt;

&lt;p&gt;We cannot have a transient &amp;amp; a cached page at the same offset in the radix tree (at least, not with the current CLIO code) because ll_direct_rw_pages() looks up the index in the radix tree and uses the cache page for the transfer if there is one. But what you can have is two contiguous pages, one being transient and the other one cached, both bundled in the same bulk write.&lt;/p&gt;</comment>
                            <comment id="17387" author="jay" created="Thu, 7 Jul 2011 15:48:26 +0000"  >&lt;p&gt;to Niu: actually we cannot have transient and caching pages for the same offset at the same time, with current clio implementation or you&apos;re working on(where dio pages should be submitted separately). If a node is doing dio and cache write at the same time, the result is undefined, because it may make cache inconsistent, or stale data to be read.&lt;/p&gt;</comment>
                            <comment id="17443" author="niu" created="Fri, 8 Jul 2011 02:04:03 +0000"  >&lt;p&gt;Will fix it in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-481&quot; title=&quot;sanity test_119d fails (ASSERTION((struct cl_page *)vmpage-&amp;gt;private != slice-&amp;gt;cpl_page) failed)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-481&quot;&gt;&lt;del&gt;LU-481&lt;/del&gt;&lt;/a&gt;.&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|hzvy6n:</customfieldvalue>

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