<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:04:20 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-13801] Enable io_uring interface for Lustre client</title>
                <link>https://jira.whamcloud.com/browse/LU-13801</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Kernels since 5.1 have implemented the io_uring interface (&lt;a href=&quot;https://kernel.dk/io_uring.pdf&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://kernel.dk/io_uring.pdf&lt;/a&gt;) for efficient asynchronous IO submission to storage. According to &lt;a href=&quot;https://lore.kernel.org/linux-block/20190116175003.17880-1-axboe@kernel.dk/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;posted results&lt;/a&gt;, io_uring is on-par with SPDK doing all of the IO in userspace.  The io_uring interface is intended to replace the older libaio interface. &lt;/p&gt;

&lt;p&gt;With the recent performance improvements for libaio AIO/DIO, it should be possible to use the io_uring interfaces in a similar manner.&lt;/p&gt;

&lt;p&gt;I don&apos;t think many applications are using this interface yet, but since it provides a significant improvement over libaio it will likely become used in performance-oriented applications.&lt;/p&gt;</description>
                <environment></environment>
        <key id="60016">LU-13801</key>
            <summary>Enable io_uring interface for Lustre client</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="10000">Done</resolution>
                                        <assignee username="wc-triage">WC Triage</assignee>
                                    <reporter username="adilger">Andreas Dilger</reporter>
                        <labels>
                    </labels>
                <created>Sat, 18 Jul 2020 19:39:50 +0000</created>
                <updated>Fri, 28 Aug 2020 04:28:31 +0000</updated>
                            <resolved>Thu, 27 Aug 2020 02:05:21 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>10</watches>
                                                                            <comments>
                            <comment id="275729" author="wshilong" created="Sun, 19 Jul 2020 12:13:41 +0000"  >&lt;p&gt;Anything special needed for Lustre, I think there is no special thing needed for filesystem to use io_uring?&lt;/p&gt;</comment>
                            <comment id="275751" author="adilger" created="Mon, 20 Jul 2020 09:45:10 +0000"  >&lt;p&gt;It would be great to verify this when time is available (eg. if &lt;tt&gt;fio&lt;/tt&gt; has an &lt;tt&gt;io_uring&lt;/tt&gt; backend).  I&apos;m not sure if there is a need for specific file_operations, or if llite/CLIO handles them efficiently today.  Just like libaio would &lt;em&gt;work&lt;/em&gt; with Lustre, but it wasn&apos;t until &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4189&quot; title=&quot;Strange code in mdc_changelog_send_thread&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4189&quot;&gt;&lt;del&gt;LU-4189&lt;/del&gt;&lt;/a&gt; landed that it started working well (i.e. not just sync IO submission). &lt;/p&gt;</comment>
                            <comment id="275752" author="wshilong" created="Mon, 20 Jul 2020 10:44:49 +0000"  >&lt;p&gt;FIO has supported ioengine=io_uring since 2019, i think we could did a quickly verify this with newer kernel etc 5.1 if Lustre client could compile well.&lt;/p&gt;</comment>
                            <comment id="275804" author="adilger" created="Mon, 20 Jul 2020 19:44:23 +0000"  >&lt;p&gt;According to patch &lt;a href=&quot;https://review.whamcloud.com/39231&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/39231&lt;/a&gt; &quot;&lt;tt&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13740&quot; title=&quot;Ubuntu 20.04 LTS release&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13740&quot;&gt;&lt;del&gt;LU-13740&lt;/del&gt;&lt;/a&gt; build: update changelog for ubuntu kernel&lt;/tt&gt;&quot; the master client is able to compile against kernels up to 5.4 at least, so it should be possible to start testing this.&lt;/p&gt;</comment>
                            <comment id="275805" author="simmonsja" created="Mon, 20 Jul 2020 20:13:49 +0000"  >&lt;p&gt;As Andreas pointed out you can fire up a Ubuntu 20.04 LTS with Lustre clients to easily use this functionality.&lt;/p&gt;</comment>
                            <comment id="275810" author="paf0186" created="Mon, 20 Jul 2020 20:37:38 +0000"  >&lt;p&gt;Does it work, James? &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&#160; And does it perform?&lt;/p&gt;</comment>
                            <comment id="275820" author="simmonsja" created="Mon, 20 Jul 2020 22:21:35 +0000"  >&lt;p&gt;It mounts &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&#160;Last LWG call I talked to Peter about getting a Ubuntu 20 LTS client VM up and running. I hope to see this soon. Especially now we are seeing work like this coming down the pipeline.&lt;/p&gt;</comment>
                            <comment id="275946" author="sihara" created="Wed, 22 Jul 2020 02:58:14 +0000"  >&lt;p&gt;I got first test resutls and comparison of libaio and ut_ring with fio.&lt;br/&gt;
 Tested Configuration&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;AI400 (20 x Samsung NVMe) for OST/MDT&lt;/li&gt;
	&lt;li&gt;1 x Client(2 x Platinum 8160, 192GB RAM, 2 x IB-EDR)
	&lt;ul&gt;
		&lt;li&gt;Ubuntu 20.04 (5.4.0-42-generic)&lt;/li&gt;
		&lt;li&gt;Lustre master branch (commit f384a8733c)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Test workload (1 thread, QD=1 to 256, 4K random read)&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;#!/bin/sh

for api in libaio io_uring; do
	for qd in 1 2 4 8 16 32 64 128 256; do
		./fio -name=randread -ioengine=${api} -rw=randread -blocksize=4096 -iodepth=$qd -direct=1 -runtime=10 -group_reporting=1 -create_serialize=0 -size=8g -numjobs=1 -directory=/ai400/testdir -filename_format=&apos;f.$jobnum.$filenum&apos;
	done
done
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Here is results.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;QD  libaio io_uring
 1    4.2     4.4
 2    8.5     8.4
 4   16.7    16.8
 8   31.5    31.4
16   43.8    43.5
32   60.1    60.1
64   90.7    93.3
128  96.1   103.0
256  95.1   100.0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The good news, at least io_uring didn&apos;t break Lustre &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;, but I didn&apos;t see huge performance benefit single thread standpoint (with many QDs case). I will play a bit and more collect more results.&lt;/p&gt;</comment>
                            <comment id="275949" author="wshilong" created="Wed, 22 Jul 2020 04:38:28 +0000"  >&lt;p&gt;I guess we could get better performances with Patrick&apos;s optimized DIO patches(notice even AIO they shared some code path)&lt;/p&gt;</comment>
                            <comment id="275951" author="paf0186" created="Wed, 22 Jul 2020 05:48:59 +0000"  >&lt;p&gt;I&#8217;d be curious to know if they help - 4K random read is a workload im&lt;/p&gt;

&lt;p&gt;&#160;not sure about. &#160;It probably will not help that too much...? &#160;But I&#8217;m not sure.&lt;/p&gt;</comment>
                            <comment id="276715" author="wshilong" created="Wed, 5 Aug 2020 13:08:46 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=sihara&quot; class=&quot;user-hover&quot; rel=&quot;sihara&quot;&gt;sihara&lt;/a&gt; One of important stuff we missed for io_uring test is: we might need -sqthread_poll=1  this might make big difference for io uring testing.&lt;/p&gt;</comment>
                            <comment id="277661" author="wshilong" created="Tue, 18 Aug 2020 09:16:33 +0000"  >&lt;p&gt;I did a quickly test of io_uring on local NVME device and ext4 filesystem:&lt;/p&gt;

&lt;p&gt;This is to NVME device directly:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;         LIBAIO          io_uring        io_uring + poll
IOPS:    342656          377382          580258
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;We could see iops burst very well with same fio command as Ihara&apos;s above fio.&lt;/p&gt;

&lt;p&gt;However, if we compared results on ext4:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;         LIBAIO          io_uring        io_uring + poll
IOPS:    312950          258104          260594
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;It looks io_uring did not help on filesystem, it makes me think io_uring might not help on Lustre too, it might be only helpful in&lt;br/&gt;
 some cases that target device is really low latency, however network filesystem might not be the case?&lt;/p&gt;</comment>
                            <comment id="277747" author="adilger" created="Wed, 19 Aug 2020 16:45:53 +0000"  >&lt;p&gt;I think the important thing to note is that libaio is only used by a small number of applications, and has actively been discouraged by the kernel developers. I think the goal for the future is that io_uring is supposed to be a widely supported as a non-POSIX IO interface for the kernel. &lt;/p&gt;

&lt;p&gt;Luckily, it appears that the libaio optimizations for Lustre also benefit io_uring, so it may be that we don&apos;t have a lot of work to do in this area. &lt;/p&gt;</comment>
                            <comment id="278167" author="adilger" created="Thu, 27 Aug 2020 02:05:21 +0000"  >&lt;p&gt;Closing this ticket as it looks like we don&apos;t need to do anything to enable io_uring for Lustre. &lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="21786">LU-4198</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="60010">LU-13799</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|i015hb:</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>