<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:32:00 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-17026] fix issues with async readahead disrupting readahead state</title>
                <link>https://jira.whamcloud.com/browse/LU-17026</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Async readahead poses challenges for regular readahead, because the async nature of it can generate unexpected misses - normal synchronous readahead guarantees that the reading thread completes the readahead before asking for more pages.&#160; But it&apos;s possible for async readahead to have been issued and not have completed before the reading thread tries to do another read.&#160; This generates a miss, which causes the readahead code to reset.&lt;/p&gt;

&lt;p&gt;At runtime, this is mostly an annoyance with minor performance implications, but it makes testing difficult.&lt;/p&gt;

&lt;p&gt;It&apos;s not 100% clear to me this is worth the difficulty of solving it, so this ticket for now is to note the problem and sketch possible solutions.&lt;/p&gt;</description>
                <environment></environment>
        <key id="77422">LU-17026</key>
            <summary>fix issues with async readahead disrupting readahead state</summary>
                <type id="3" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11318&amp;avatarType=issuetype">Task</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="paf0186">Patrick Farrell</assignee>
                                    <reporter username="paf0186">Patrick Farrell</reporter>
                        <labels>
                            <label>readahead</label>
                    </labels>
                <created>Fri, 11 Aug 2023 15:58:05 +0000</created>
                <updated>Fri, 11 Aug 2023 16:12:55 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                            <comments>
                            <comment id="382163" author="paf0186" created="Fri, 11 Aug 2023 16:12:55 +0000"  >&lt;p&gt;This will be fixed by adjusting readahead so it can wait for async readahead, but this has to be done carefully.&lt;/p&gt;

&lt;p&gt;The easy way to do this would be to wait for async readahead to have issued the page reads so the page cache can catch the problem for us, but this would take away most of the benefit of async readahead.&lt;/p&gt;

&lt;p&gt;Instead, we&apos;ll need to do something like this - somehow annotate which reads have been issued to async readahead and wait for them to complete.&#160; My thoughts are around something like an extent tree documenting the read range(s) issued by readahead, so if we go to start a new read, we see that someone else is trying to do that.&lt;/p&gt;

&lt;p&gt;The problem is doing this wait safely, etc - what if the async readahead fails?&#160; And how do we know exactly what pages it&apos;s reading?&lt;/p&gt;

&lt;p&gt;The core of this problem in practice is that it makes readahead and async readahead very difficult to test.&#160; Current readahead tests basically have to turn off async readahead to do proper testing of readahead&apos;s behavior with specific IO patterns.&lt;/p&gt;

&lt;p&gt;So it may be that we do this, plus have a few dedicated tests of async readahead written with care, and just allow this problem to stay a problem, because the effort-reward isn&apos;t ideal.&lt;/p&gt;

&lt;p&gt;It&apos;s also worth noting that async readahead doesn&apos;t work with strided readahead because strided readahead requires perfect tracking of read and readahead state, and async readahead (as currently done) makes that impossible.&#160; It&apos;s only the extremely forgiving nature of readahead for straightline or fuzzy reads that allows async readahead to work reliably.&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|i03sun:</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>
                                                                                            <customfield id="customfield_10060" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Severity</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10022"><![CDATA[3]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>