<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:40:43 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>[LUDOC-160] Add more info about metrics - offset (rpc_stats) and extents (extents_stats).</title>
                <link>https://jira.whamcloud.com/browse/LUDOC-160</link>
                <project id="10070" key="LUDOC">Lustre Documentation</project>
                    <description>&lt;p&gt;On 2013-06-19, at 9:21, &quot;Lee, Brett&quot; &amp;lt;brett.lee@intel.com&amp;gt; wrote:&lt;br/&gt;
&amp;gt; I understand the metric &quot;offset&quot; in the client rpc_stats file to indicate to the delta between where the client last read / wrote.  Per a recent thread in hpdd-discuss it seems this metric differs between 1.x and 2.x systems, and am wondering what could have changed?&lt;/p&gt;

&lt;p&gt;To be honest, I don&apos;t know much of the details here. It might be that &quot;offset&quot; is relative to the previous read/write as you propose, or it could be the offset within the 1MB RPC. I would suspect the latter, because this gives a bounded range of values, and is the only critical metric for the RPC stack. Doing 1MB sized and aligned write RPCs (i.e. &quot;offset = 0&quot; per my definition) but with random file offsets should give nearly the same performance vs. 1MB sequential writes. In contrast, doing smaller RPCs would cause read-modify-write cycles on the underlying RAID device and should be avoided. &lt;/p&gt;

&lt;p&gt;&amp;gt; Am familiar with the block pointers and levels of indirection within an inode, but have recently read/understood that Ext4 does not support block pointers but instead uses extents.  Can you confirm whether my understanding is correct,&lt;/p&gt;

&lt;p&gt;Yes it is correct. Ext4 and ldiskfs before it use extents instead of block pointers to reference the blocks allocated to a file. This can be up to 10000x more efficient on disk and in memory. &lt;/p&gt;

&lt;p&gt;&amp;gt; and if possible, do you have any &quot;pointers&quot; (&apos;scuse the pun) to where I might learn more about extents.  &lt;/p&gt;

&lt;p&gt;There is a paper presented at the Ottawa Linux Symposium authored by myself and Alex about ext4 features. I think it is referenced from the ext4 wiki page (sorry, don&apos;t have URL right now, Google is your friend). &lt;/p&gt;

&lt;p&gt;&amp;gt; My end goal is to better understand how, in the /proc/.../extents_stats file, small extents translate to small IO - on the surface it&apos;s obvious (small == small) but at a lower (inode) level I can&apos;t explain it.&lt;/p&gt;

&lt;p&gt;Smaller extents means that there are fewer contiguous blocks that can be read without a seek. Once the extent is 2MB or larger, the single seek per IO is not the dominant factor anymore (consider 2MB per seek * 150 seeks/second = 300MB/s, which is approaching the limit of the underlying storage bandwidth).  The ext4 code tries to allocate at least 8MB extents when possible, but this is not always possible if the free space is fragmented. If the allocated extents are too small (&amp;lt; 1MB, because a larger one could not be found at the time) then there will be significant seek overhead during IO. &lt;/p&gt;

&lt;p&gt;So, the small extents are really just a symptom of the fragmented free space, and not the root cause. The same performance problem would have happened with block allocation (assuming the same free blocks at allocation time), but it wouldn&apos;t have been as easy to find. &lt;/p&gt;

&lt;p&gt;A useful feature that we developed (and is now in widespread use) is the File Extent Map (FIEMAP) ioctl. It allows efficienly extracting the on-disk layout from a file in an fs-agnostic format and display the fragmentation/sparseness of the file using the &quot;filefrag&quot; utility. Lustre can do this across the network as well, though it needs the Lustre version of e2fsprogs installed on the client for multi-striped files.&lt;/p&gt;</description>
                <environment></environment>
        <key id="19475">LUDOC-160</key>
            <summary>Add more info about metrics - offset (rpc_stats) and extents (extents_stats).</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="6" iconUrl="https://jira.whamcloud.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="jlevi">Jodi Levi</assignee>
                                    <reporter username="brett">Brett Lee</reporter>
                        <labels>
                            <label>QContent</label>
                    </labels>
                <created>Wed, 19 Jun 2013 17:44:04 +0000</created>
                <updated>Thu, 10 Oct 2013 18:19:28 +0000</updated>
                            <resolved>Thu, 10 Oct 2013 18:19:28 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                            <comments>
                            <comment id="67602" author="linda" created="Wed, 25 Sep 2013 19:51:00 +0000"  >&lt;p&gt;Brett Lee has confirmed the content issues in this ticket were addressed in&lt;br/&gt;
&lt;a href=&quot;https://jira.whamcloud.com/browse/LUDOC-168&quot; title=&quot;Rework LustreProc chapter (Ch 31)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LUDOC-168&quot;&gt;&lt;del&gt;LUDOC-168&lt;/del&gt;&lt;/a&gt; (LustreProc rework). Changes made now include adding a note to clarify&lt;br/&gt;
how extents_stats and offsets_stats are enabled and minor rearrangements&lt;br/&gt;
to text for clarity.&lt;/p&gt;

&lt;p&gt;Changes pushed to gerrit and ready for review.&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/7763/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/7763/&lt;/a&gt;&lt;/p&gt;
</comment>
                            <comment id="68751" author="linda" created="Thu, 10 Oct 2013 18:19:28 +0000"  >&lt;p&gt;Change has been reviewed and merged.&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|hzvtmf:</customfieldvalue>

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