<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:02:48 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-6] Update the readahead logic in lustre 2.0</title>
                <link>https://jira.whamcloud.com/browse/LU-6</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Summary of the enhancement&lt;br/&gt;
=============================&lt;/p&gt;

&lt;p&gt;There are several problems in current implementation of readahead in HEAD:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;The read pattern is determined in readpage method, this causes ras_update to be confused if it&lt;br/&gt;
has already had some pages in system;&lt;/li&gt;
	&lt;li&gt;Can&apos;t determine the stripe boundary. Of course, we can hack the code to get it, but it violates&lt;br/&gt;
the principles in clio, where the stripe info is private to lov layer; Because of this, the read&lt;br/&gt;
ahead mechanism may issue read request crossing stripe boundary, this is not good and causes small&lt;br/&gt;
RPCs to be sent;&lt;/li&gt;
	&lt;li&gt;Ugly code to check if the read ahead pages are covered by lock.&lt;/li&gt;
	&lt;li&gt;Determine the read ahead window and issue the readahead RPC in read thread synchronously.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To address those issues, we are going to:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Different read ahead mechanisms for mmap and file read; For file read, we&apos;ll detect the read&lt;br/&gt;
pattern in ll_file_read, and for mmap, it will be detected in ll_nopage. We may maintain different&lt;br/&gt;
data structures for them; With this update, we can know the read pattern easier and preciser. We&lt;br/&gt;
even may provide an interface for loadable module so that the customers are able to customize the&lt;br/&gt;
mechanism by the characteristic of their applications;&lt;/li&gt;
	&lt;li&gt;Read ahead window is determined by the read pattern in llite layer, but how much data will be&lt;br/&gt;
read in current slide window is determined by all layers(llite, lov and osc) in clio, so definitely&lt;br/&gt;
we will provide a new callback interface in cl_io to do this. Basically speaking, in lov, we&apos;re&lt;br/&gt;
going to cut the read ahead size to be stripe-align boundary, and in osc, the size will be adjusted&lt;br/&gt;
by the coverage of ldlm lock;&lt;/li&gt;
	&lt;li&gt;Async(and per read process) read ahead thread. If the read pattern is good, we then spawn a read&lt;br/&gt;
ahead thread to fetch the data in current read ahead window. In this way, the read ahead is able to&lt;br/&gt;
be fully streamlined;&lt;/li&gt;
	&lt;li&gt;Lock ahead(controversial): If the read pattern is really good, I think it might make sense to&lt;br/&gt;
acquire the ldlm lock inside the read ahead window earlier;&lt;/li&gt;
	&lt;li&gt;WNC support. In windows, reads have to be synchronous, we may have to pass on the IRP to read&lt;br/&gt;
ahead thread.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment>lustre 2.0</environment>
        <key id="10071">LU-6</key>
            <summary>Update the readahead logic in lustre 2.0</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="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="1">Fixed</resolution>
                                        <assignee username="jay">Jinshan Xiong</assignee>
                                    <reporter username="jay">Jinshan Xiong</reporter>
                        <labels>
                    </labels>
                <created>Mon, 18 Oct 2010 12:00:06 +0000</created>
                <updated>Mon, 29 May 2017 04:16:56 +0000</updated>
                            <resolved>Mon, 29 May 2017 04:16:56 +0000</resolved>
                                    <version>Lustre 2.0.0</version>
                                                        <due>Wed, 20 Oct 2010 00:00:00 +0000</due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="40684">LU-8709</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                    <customfield id="customfield_10020" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Bugzilla ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>20294.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <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|hzw1wn:</customfieldvalue>

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