<!-- 
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-13802] New i/o path: Buffered i/o as DIO</title>
                <link>https://jira.whamcloud.com/browse/LU-13802</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;As Andreas noted in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13798&quot; title=&quot;Improve direct i/o performance with multiple stripes: Submit all stripes of a DIO and then wait&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13798&quot;&gt;&lt;del&gt;LU-13798&lt;/del&gt;&lt;/a&gt;, the faster DIO path makes it interesting to switch from buffered i/o to direct i/o at larger sizes.&lt;/p&gt;

&lt;p&gt;This is actually pretty easy:&lt;br/&gt;
 If the buffered i/o meets the alignment requirements for DIO (buffers is page aligned and i/o size is a multiple of page size), you can simply set the DIO flag internally in Lustre, and the kernel will direct the i/o to the direct i/o code.&#160; (In newer kernels, this does not require manipulating the O_DIRECT flag on the file, which is good because that&apos;s likely unsafe.)&lt;/p&gt;

&lt;p&gt;If the buffered i/o is not valid as direct i/o, the usual &quot;fall back to buffered i/o&quot; mechanism (implemented as part of &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4198&quot; title=&quot;Improve IO performance when using DIRECT IO using libaio&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4198&quot;&gt;&lt;del&gt;LU-4198&lt;/del&gt;&lt;/a&gt;) happens automatically (just return 0 instead of -EINVAL).&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;The question, then, is how to decide when to switch from buffered i/o to DIO.&#160; I have a proposed solution that I haven&apos;t implemented yet*, which I&apos;ll describe here.&lt;br/&gt;
*(I have done BIO (buffered i/o) as DIO, but I used a simple &quot;Try all BIO as DIO&quot; patch, not intelligent switching.)&lt;/p&gt;



&lt;p&gt;Essentially, direct i/o performance is a function of how much parallelism we can get by splitting the i/o, and the sync time of the back end storage.&lt;/p&gt;



&lt;p&gt;For example, on my flash back end, I see a benefit from switching 1 MiB BIO to 4x256 KiB DIO (1.9 GiB/s instead of 1.3 GiB/s).&#160; But a spinning disk back end would require a much larger size for this change to make sense.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;So the basic question to answer is, what size of i/o do we submit?&#160; How small &amp;amp; in to how many chunks do we split up the i/o?&lt;/p&gt;



&lt;p&gt;Note if our submitted i/o size at the higher levels is larger than stripe size or RPC size, it&apos;s automatically split to those boundaries, so if we start submitting at very large sizes, we split on those boundaries instead.&lt;/p&gt;

&lt;p&gt;Here&apos;s my thinking.&lt;/p&gt;

&lt;p&gt;We have two basic tunables, one of which has a version for rotational and non-rotational backends.&lt;/p&gt;

&lt;p&gt;The tunables are &quot;preferred minimum i/o size&quot; and &quot;desired submission concurrency&quot; (I&apos;m not proud of the name of the second one, open to suggestions...).&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;So, consider a situation where we have a preferred minimum size of 256 KiB and a desired submission concurrency of 8.&lt;/p&gt;

&lt;p&gt;If we do a 256 KiB BIO, that is done as buffered i/o.&#160; If we do a 400 KiB BIO, still buffered.&#160; But if we do a 512 KiB BIO, we split it in two 256 KiB DIOs.&#160; A 700 KiB BIO is 2x256 KiB +188 KiB DIOs.&#160; (These thresholds may be too small.)&lt;/p&gt;

&lt;p&gt;Now, consider larger sizes.&#160; 1 MiB becomes 4x256 KiB.&#160; Then, 2 MiB 8x256 KiB submissions.&lt;/p&gt;

&lt;p&gt;But at larger sizes, the desired submission concurrency comes in to play.&#160; Consider 4 MiB.&#160; 4 MiB/8 = 512 KiB.&#160; So we split 4 MiB in to 8x512 KiB.&#160; This model prevents us from submitting many tiny i/os once the i/o size is large enough.&lt;/p&gt;

&lt;p&gt;Note that I have not tested this much yet - I think 8 might be low for submission concurrency and 16 might be more desirable.&#160; Basically, this is &quot;try to cut the i/o in to this many RPCs&quot;, so perhaps &lt;b&gt;concurrency&lt;/b&gt; is the wrong word...?&lt;/p&gt;

&lt;p&gt;Also, as I noted earlier, the preferred i/o size will be very different for spinning disk vs non-rotational media.&#160; So we will need two values for this (I am thinking we default spinning disk to some multiple of rotational and let people override), and we will also need to make this info available on the client.&lt;/p&gt;

&lt;p&gt;I&apos;ll ask about that in a comment.&#160; I&apos;ve also got some benchmark info I can share later - But, basically, buffered i/o through this path performs exactly like DIO through this path.&lt;/p&gt;</description>
                <environment></environment>
        <key id="60017">LU-13802</key>
            <summary>New i/o path: Buffered i/o as DIO</summary>
                <type id="1" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.whamcloud.com/images/icons/priorities/major.svg">Major</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>
                    </labels>
                <created>Sat, 18 Jul 2020 20:11:24 +0000</created>
                <updated>Tue, 16 Jan 2024 21:59:01 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>13</watches>
                                                                            <comments>
                            <comment id="275721" author="paf0186" created="Sat, 18 Jul 2020 20:14:37 +0000"  >&lt;p&gt;The question I had for Andreas - wish I could @ tag - is about how to make the OST storage type information &apos;ambiently available&apos; on the client, so the client can tell during an i/o if it&apos;s headed for flash or HDD and slice it up accordingly.&lt;/p&gt;

&lt;p&gt;We can get it via statfs, but we can&apos;t put a statfs request in the client i/o path.&#160; So, I was thinking we would perhaps stick it in the import somehow?&#160; Or perhaps we should look at copying the mechanism used for communicating max ea_size instead?&#160; That second seems more appropriate.&lt;/p&gt;</comment>
                            <comment id="275731" author="wshilong" created="Sun, 19 Jul 2020 12:26:55 +0000"  >&lt;p&gt;I did some try on unaligned DIO some days before, i thought similar things of this.&lt;/p&gt;

&lt;p&gt;This is good idea, but this might not make big help in real application or even benchmarking. IO size and offset aligned with page size might not that hard, but&lt;br/&gt;
user space always aligned with page size is not easy.(considering application or fio, ior, iozone might use malloc() for memory allocation?) i don&apos;t know how much possibility it will be&lt;br/&gt;
to allocate 1MiB memory will be page aligned memory(Unless we modify at least IOR to make benchmark happy).&lt;/p&gt;

&lt;p&gt;The point to support unaligned page memory DIO might be complex a bit(we need do memory mapping well, and unfortunately across pages could make problems even complexer)..&lt;br/&gt;
Or another way that i could think of is we do lockless io(but we need extra pages allocation for unaligned DIO IO).&lt;/p&gt;



</comment>
                            <comment id="275732" author="gerrit" created="Sun, 19 Jul 2020 15:32:43 +0000"  >&lt;p&gt;Patrick Farrell (farr0186@gmail.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/39450&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/39450&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: All i/o as DIO&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 0b81fb97371a8a3b5b3bc5906844b244572ac81a&lt;/p&gt;</comment>
                            <comment id="275733" author="paf0186" created="Sun, 19 Jul 2020 15:35:35 +0000"  >&lt;p&gt;&quot;I did some try on unaligned DIO some days before, i thought similar things of this.&quot;&lt;br/&gt;
Yes, I saw it.&#160; I have some comments on that later - I have a way to do unaligned DIO, but it&apos;s basically via a bounce buffer.&#160; I think that&apos;s what you&apos;re suggesting when say &quot;extra pages allocation for unaligned DIO&quot;.&#160; I&apos;m actually going to open a separate ticket about that, but I&apos;m trying to get the conversation started on this stuff first.&#160; I promise - I have thoughts and a prototype patch.&#160; I just can&apos;t juggle too many things.&lt;/p&gt;</comment>
                            <comment id="275734" author="paf0186" created="Sun, 19 Jul 2020 15:40:32 +0000"  >&lt;p&gt;&quot;user space always aligned with page size is not easy.(considering application or fio, ior, iozone might use malloc() for memory allocation?) i don&apos;t know how much possibility it will be&lt;br/&gt;
to allocate 1MiB memory will be page aligned memory(Unless we modify at least IOR to make benchmark happy).&quot;&lt;/p&gt;

&lt;p&gt;This is actually incorrect, in practice, at least for IOR. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/biggrin.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;

&lt;p&gt;I submitted a quick patch to show that - You can try IOR, and see that it passes the alignment requirements for DIO.&#160; IOR buffers are almost always aligned.&#160; In fact, when you use malloc() to ask for a large buffer, it should generally be page aligned - this is for performance and fragmentation related reasons.&#160; If large buffers were not page aligned by the memory allocator, you would eventually end up in situations where different processes/threads have buffers which are on the same page of memory.&#160; This would be very bad for performance, so the allocator avoids it.&#160; (This is my thinking, any way - It seems to be true, and I have run this by some other engineers here.)&lt;/p&gt;

&lt;p&gt;So, my intention is that this ticket will just be for switching buffered (BIO) to DIO where it makes sense, and initially that will mean &lt;b&gt;not&lt;/b&gt; doing unaligned BIO via DIO.&lt;/p&gt;</comment>
                            <comment id="275738" author="wshilong" created="Mon, 20 Jul 2020 00:50:17 +0000"  >&lt;p&gt;OK&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; it is good to see IOR could be aligned with page size.&lt;/p&gt;</comment>
                            <comment id="275784" author="green" created="Mon, 20 Jul 2020 17:17:11 +0000"  >&lt;p&gt;in fact aligned IO is not a requirement, we implementd it in the past for 1.8.x for llnl and basically lockless IO path allows you to do direct IO from client no matter the alignment&lt;/p&gt;</comment>
                            <comment id="275794" author="paf0186" created="Mon, 20 Jul 2020 18:11:02 +0000"  >&lt;p&gt;Yeah, I know it&apos;s not a fundamental requirement, but looking at the code, it seems very difficult to remove that requirement from Lustre today.&#160; A lot of work to make a new i/o path.&lt;/p&gt;

&lt;p&gt;I will open a ticket on this later today so we have a dedicated place to discuss that, because I think we should implement the path switching for aligned stuff (which is easy/fast/simple), and consider implementing unaligned DIO separately.&lt;/p&gt;</comment>
                            <comment id="275796" author="paf0186" created="Mon, 20 Jul 2020 18:27:47 +0000"  >&lt;p&gt;Opened &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13805&quot; title=&quot;i/o path: Unaligned direct i/o&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13805&quot;&gt;LU-13805&lt;/a&gt; to discuss unaligned direct i/o.&lt;/p&gt;</comment>
                            <comment id="275813" author="adilger" created="Mon, 20 Jul 2020 21:00:04 +0000"  >&lt;p&gt;I agree there is a lot of upside for automatically switching large PAGE_SIZE-aligned read/write to avoid the data copy.  If the application is doing such IOs for the whole file (whether one client or many), not only does it reduce data copy overhead on the client, it would also avoid unnecessary DLM lock traffic for the many-client workload, and avoids polluting the client page cache as well (which is the other half of the overhead besides the data copy). I wrote a simple test for memory allocation alignment, to see if large allocations &lt;em&gt;should&lt;/em&gt; all be aligned on &lt;tt&gt;PAGE_SIZE&lt;/tt&gt; boundaries.  However &lt;tt&gt;posix_memalign()&lt;/tt&gt; unfortunately exists for a reason, and it looks like default memory alignment is not the common case from what my test program shows.  It is likely that IOR itself makes an effort to align the buffer allocation for this reason.&lt;/p&gt;

&lt;p&gt;A sample list of random-sized allocations in a loop shows that even for large allocations the alignment is at best on a 64-bit boundary, at least with the normal &lt;tt&gt;malloc()&lt;/tt&gt; call (output of &lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/attachment/35455/35455_test_malloc_align.c&quot; title=&quot;test_malloc_align.c attached to LU-13802&quot;&gt;test_malloc_align.c&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://jira.whamcloud.com/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt; shown):&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;153713: 62/62=  100%: alloc   0x4000 addr 0x7fe6a5f2bfe0
154715: 63/63=  100%: alloc 0x800000 addr 0x392452ac90
155852: 64/64=  100%: alloc 0x63f000 addr 0x32c4a64c30
157539: 65/65=  100%: alloc 0x800000 addr 0x7f393640d010
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Interestingly, on MacOS, this program only has a 15% positive rate, as it seems to at least allocate on 256-byte boundaries:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The allocated memory is aligned such that it can be used for any data type, including AltiVec- and SSE-related types.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;On Linux it is only doing the minimum 16-byte alignment, which is definitely problematic for this change to be successful:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For calloc() and malloc(), return a pointer to the allocated memory, which is suitably aligned for any kind of variable.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I don&apos;t see any kind of options in &lt;tt&gt;mallopt()&lt;/tt&gt; that might affect the behavior of &lt;tt&gt;malloc()&lt;/tt&gt;.  I don&apos;t think it would be &lt;em&gt;unreasonable&lt;/em&gt; to have an option that could be set to tune this behavior (at the cost of some more memory usage, but I think the request to align PAGE_SIZE-multiple allocations on PAGE_SIZE address boundaries is &lt;b&gt;reasonable&lt;/b&gt;.  Maybe a trial patch for glibc would be in order?  Unfortunately, without that I think this approach will be mostly ineffective, excepting the installation of a custom glibc/malloc or LD_PRELOAD to force e.g. 4KB alignment for &amp;gt;= 1MB allocations (which might be easily written, and ould consume at most only 4KB of additional RAM).&lt;/p&gt;</comment>
                            <comment id="275814" author="paf0186" created="Mon, 20 Jul 2020 21:02:07 +0000"  >&lt;p&gt;Andreas, thanks for that test...&#160; Yuck.&lt;/p&gt;

&lt;p&gt;Well, the output of that test isn&apos;t much fun - It looks like IOR must be making special provision to get its buffers aligned, as is dd and the other test program I tried.&lt;/p&gt;

&lt;p&gt;I suppose because the heap is (usually) per-process, it doesn&apos;t have any particular alignment requirements - It&apos;s the kernel memory allocator that probably wants to pay attention to page alignment more aggressively, because it&apos;s just one big address space.&#160; But that&apos;s irrelevant to userspace.&lt;/p&gt;

&lt;p&gt;OK, so we&apos;re looking at real applications mostly needing unaligned direct i/o.&#160; So, this (&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt;) won&apos;t be too much use without &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13805&quot; title=&quot;i/o path: Unaligned direct i/o&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13805&quot;&gt;LU-13805&lt;/a&gt;.&#160; That&apos;s not necessarily fatal - The fast buffering suggested in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13805&quot; title=&quot;i/o path: Unaligned direct i/o&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13805&quot;&gt;LU-13805&lt;/a&gt; should still be &lt;b&gt;much&lt;/b&gt;&#160;faster than normal buffered i/o.&#160; (Or we could follow Oleg&apos;s route and implement a new i/o path for unaligned DIO.)&lt;/p&gt;</comment>
                            <comment id="275815" author="paf0186" created="Mon, 20 Jul 2020 21:05:03 +0000"  >&lt;p&gt;&quot;but I think the request to align PAGE_SIZE-multiple allocations on PAGE_SIZE address boundaries is unreasonable&quot; - Unreasonable as a default, right?&#160; And we don&apos;t need 1 MiB alignment or anything - we just need page size alignment for the start of the buffer.&lt;/p&gt;

&lt;p&gt;But, of course, that assumes it&apos;s also aligned to a size boundary in the file.&#160; So, I think we&apos;ll be looking at &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13805&quot; title=&quot;i/o path: Unaligned direct i/o&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13805&quot;&gt;LU-13805&lt;/a&gt; for a lot of this.&lt;/p&gt;</comment>
                            <comment id="275831" author="wshilong" created="Tue, 21 Jul 2020 00:21:56 +0000"  >&lt;p&gt;&quot;but I think the request to align PAGE_SIZE-multiple allocations on PAGE_SIZE address boundaries is unreasonable&quot; - Unreasonable as a default, right?  And we don&apos;t need 1 MiB alignment or anything - we just need page size alignment for the start of the buffer.&quot;&lt;/p&gt;

&lt;p&gt;Unfortunately, we need every use space page be aligned with page-size, no really start of the buffer, i mean currently for DIO. still this will be easy for kernel do IO mapping.&lt;/p&gt;

&lt;p&gt;That is why i think whyt extra page allocations will make Unaligned DIO easier.&lt;/p&gt;</comment>
                            <comment id="275842" author="paf0186" created="Tue, 21 Jul 2020 02:03:45 +0000"  >&lt;p&gt;Shilong,&lt;/p&gt;

&lt;p&gt;Because the buffer has to be at least virtually contiguous for i/o (this is a requirement or it&apos;s not one buffer, basically), I would think if the first page is aligned, the other pages in the buffer would usually be as well...&#160; But I have been very wrong about memory alignment already today, soooo perhaps we should modify Andreas&apos; test to check.&lt;/p&gt;</comment>
                            <comment id="275844" author="adilger" created="Tue, 21 Jul 2020 02:22:54 +0000"  >&lt;p&gt;Sorry, I had a critical typo in my previous comment.  I think it is OK to try the allocation alignment &lt;tt&gt;malloc()&lt;/tt&gt; hack to see if that helps, since at least an &lt;tt&gt;LD_PRELOAD&lt;/tt&gt; could easily enforce this for all allocations.  While it would be &lt;em&gt;way&lt;/em&gt; better to handle this in the glibc allocator itself, I think the below is OK for a POC:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL &amp;lt;&amp;lt; PAGE_SHIFT)
#define PAGE_MASK (PAGE_SIZE - 1)
#define MIN_ALIGN 1048576UL

/* save bottom bits &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; offset &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; free.
 * hugepages should already be aligned, so we don&apos;t need a huge offset */
#define SHIFT_MAGIC (0x50bad5050badUL &amp;lt;&amp;lt; PAGE_SHIFT)
void *malloc(size_t size)
{
        void *ret, *tmp;

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (size &amp;lt; MIN_ALIGN)
                &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; malloc(size);

        tmp = malloc(size + PAGE_MASK);
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ((&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)tmp &amp;amp; PAGE_MASK) {
                unsigned &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; offset;
                unsigned &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; *magic;

                ptr = (void *)(((&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)tmp + PAGE_MASK) &amp;amp; ~PAGE_MASK);
                offset = (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)ptr - (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)tmp;

                magic = (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; *)tmp - 1;
                *magic = SHIFT_MAGIC + offset;
        }
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; ptr;
}

void free(void *ptr)
{
        unsigned &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; *magic = (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; *)ptr - 1;

        &lt;span class=&quot;code-comment&quot;&gt;/* it&apos;s bad to access outside allocated memory, but should be OK &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; testing */&lt;/span&gt;
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (ptr &amp;amp; PAGE_MASK == 0 &amp;amp;&amp;amp; (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)(*magic) &amp;amp; ~PAGE_MASK == SHIFT_MAGIC)
                ptr -= (*magic - SHIFT_MAGIC);

        free(ptr);
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="276604" author="nrutman" created="Mon, 3 Aug 2020 16:28:50 +0000"  >&lt;p&gt;Let&apos;s please move continued alignment discussion to &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13805&quot; title=&quot;i/o path: Unaligned direct i/o&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13805&quot;&gt;LU-13805&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Getting back to the ticket description about how to split the IO into the right size DIO chunks - I dislike the idea of adding yet more tunables to Lustre, and also don&apos;t think a simple flash/disk division is sufficient. It seems to me like the OSTs should actually measure the performance of the backend and report the number back to clients to be tracked in the OSC import. &lt;br/&gt;
That&apos;s obviously a lot of work, especially in kernel, so maybe a compromise is to create the tunables on a per-OSC basis, and then run some client-side benchmark test (included with Lustre distro) that runs a survey and sets the tunable permanently. Customers would have to run this for each different type of OST, and set the params for all OSTs of each type. Maybe base this on pool definitions, assuming pools are set up along performance lines.&lt;br/&gt;
Thinking more broadly about this, maybe Lustre needs some idea of &quot;OST profile&quot; that includes a set of parameters associated with an OST type - rpcs_in_flight, grant_space, etc. A configurator run at initial install could try to test and optimize. This might bring help bring Lustre to the masses.&lt;br/&gt;
But I realize I&apos;m getting ahead of myself. Back to this ticket, is there a  more algorithmic approach to this? Does an OST &quot;know&quot; that it is flash or disk somehow? Indirectly, it seems that a smaller stripe size should be associated with flash, so maybe these parameters aren&apos;t associated with an OST at all, but rather a file&apos;s striping parameters? &lt;/p&gt;</comment>
                            <comment id="276649" author="adilger" created="Tue, 4 Aug 2020 09:35:38 +0000"  >&lt;p&gt;Yes, if properly configured by the kernel, the OSTs know their technology type from the &lt;tt&gt;/sys/block/sdX/queue/rotational&lt;/tt&gt; parameter, and report this to the clients/MDS via &lt;tt&gt;OS_STATE_NONROT&lt;/tt&gt; in statfs (&lt;tt&gt;lfs df -v&lt;/tt&gt; on a recent Lustre release), see &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11963&quot; title=&quot;Add nonrotational flag to obd_statfs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11963&quot;&gt;&lt;del&gt;LU-11963&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As for OSTs reporting performance to clients, this has been proposed in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-7880&quot; title=&quot;add performance statistics to obd_statfs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-7880&quot;&gt;LU-7880&lt;/a&gt; for some time already. The kernel already collects these performance metrics, and just needs to report them to clients via &lt;tt&gt;OST_STATFS&lt;/tt&gt;.  IMHO, that would be far superior to having users run some benchmark on the disks at setup time for many reasons:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;users are likely to get this wrong, or not do it at all&lt;/li&gt;
	&lt;li&gt;configuring parameters from userspace is fragile&lt;/li&gt;
	&lt;li&gt;performance of OSTs is likely to change over time as they fill, fragment, grow sector errors and are remapped, etc.&lt;/li&gt;
	&lt;li&gt;performance will change dynamically under load, so anything collected at setup time will be useless&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="277238" author="adilger" created="Tue, 11 Aug 2020 21:56:04 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=nrutman&quot; class=&quot;user-hover&quot; rel=&quot;nrutman&quot;&gt;nrutman&lt;/a&gt; I don&apos;t think we &lt;b&gt;can&lt;/b&gt; separate the alignment question from the &quot;buffered IO as DIO&quot;, since it is basically impossible to do this unless the buffered IO is submitted with page-aligned/sized pointers (in the &lt;tt&gt;malloc()&lt;/tt&gt; implementation so that every application doesn&apos;t need to implement this itself), or some magic is done in the underlying &lt;tt&gt;O_DIRECT&lt;/tt&gt; and/or RDMA code to transfer unaligned pointers from the client to the server.  Until that is done, all of the discussion on how to optimize this functionality is irrelevant since it will not work.&lt;/p&gt;</comment>
                            <comment id="312298" author="lixi_wc" created="Wed, 8 Sep 2021 13:12:58 +0000"  >&lt;p&gt;Simple implementation of malloc aligned memory:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
#define DEBUG
#define _GNU_SOURCE
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#ifdef DEBUG
#include &amp;lt;stdio.h&amp;gt;
#endif

#define PAGE_SHIFT 12ULL
#define PAGE_SIZE (1 &amp;lt;&amp;lt; PAGE_SHIFT)

void *malloc(size_t size)
{
	&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; ret;
	void *memptr = NULL;

	&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (size &amp;amp; (PAGE_SIZE - 1)) {
		memptr = malloc(size);
        } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
		ret = posix_memalign(&amp;amp;memptr, PAGE_SIZE, size);
		&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (ret) {
			errno = ret;
			memptr = NULL;
		}
	}
	
#ifdef DEBUG
	printf(&lt;span class=&quot;code-quote&quot;&gt;&quot;allocated %p\n&quot;&lt;/span&gt;, memptr);
#endif
	&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; memptr;
}

#&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; 0
&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; main()
{
	&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt; *ptr = malloc(100);
	free(ptr);
	&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; 0;
}
#endif
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="312343" author="adilger" created="Wed, 8 Sep 2021 20:43:04 +0000"  >&lt;blockquote&gt;
&lt;p&gt;Simple implementation of malloc aligned memory:&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I don&apos;t think it makes sense to do this for &lt;b&gt;every&lt;/b&gt; allocation, only those that are a multiple of &lt;tt&gt;PAGE_SIZE&lt;/tt&gt; themselves.  Otherwise, that probably adds a &lt;b&gt;lot&lt;/b&gt; of overhead to the application for allocations that are not going to be used for IO anyway.&lt;/p&gt;</comment>
                            <comment id="381282" author="qian_wc" created="Fri, 4 Aug 2023 01:26:53 +0000"  >&lt;p&gt;&quot;Qian Yingjin &amp;lt;qian@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/51679&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/51679&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-16964&quot; title=&quot;I/O Path: Auto switch from BIO to DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-16964&quot;&gt;&lt;del&gt;LU-16964&lt;/del&gt;&lt;/a&gt; llite: auto switch from BIO to DIO&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: e3e07e129ca55585af5831fd25cc07fa96d5394d&lt;/p&gt;</comment>
                            <comment id="388586" author="gerrit" created="Mon, 9 Oct 2023 23:29:33 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52609&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52609&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; tests: add basic tests of hybrid IO&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 97dc18521af24b096dc19c4e5543f5c74a7bb2c8&lt;/p&gt;</comment>
                            <comment id="388703" author="adilger" created="Tue, 10 Oct 2023 17:12:16 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52586&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52586&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt;&#160;llite: trivial bio_dio switch check&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 5690c653fd3ea3cab65ef8cb956faf79fdbe6bd2&lt;/p&gt;</comment>
                            <comment id="388704" author="adilger" created="Tue, 10 Oct 2023 17:14:27 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52587&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52587&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: refactor ll_file_io_generic decs&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: a191cf6a8170a169e78e31ff9fff4ea47d2cc093&lt;/p&gt;</comment>
                            <comment id="388705" author="adilger" created="Tue, 10 Oct 2023 17:15:50 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52592&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52592&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add hybrid IO SBI flag&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 8b2dfdba4c0d149f988c49b173dcc11bfef5c0f4&lt;/p&gt;</comment>
                            <comment id="388706" author="adilger" created="Tue, 10 Oct 2023 17:16:54 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52593&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52593&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add fail loc to force bio-dio switch&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 14432e462bc22f5bff1c06517b4f2230c04b1085&lt;/p&gt;</comment>
                            <comment id="388707" author="adilger" created="Tue, 10 Oct 2023 17:17:52 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52594&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52594&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add hybrid io switch threshold&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 9c4c9408629b00a15fda23c5ebed095b16036362&lt;/p&gt;</comment>
                            <comment id="388709" author="adilger" created="Tue, 10 Oct 2023 17:18:49 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52595&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52595&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add read &amp;amp; write switch thresholds&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 8808647ec827c7c000f414787093c4c168cc5d30&lt;/p&gt;</comment>
                            <comment id="388710" author="adilger" created="Tue, 10 Oct 2023 17:19:53 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52596&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52596&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add hybrid IO switch proc stats&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: b80e468a5f98b433554ebd67610639ed70be8cf7&lt;/p&gt;</comment>
                            <comment id="388718" author="paf0186" created="Tue, 10 Oct 2023 17:59:02 +0000"  >&lt;p&gt;Thanks, Andreas.&#160; (I had accidentally placed these on &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13804&quot; title=&quot;LustreError (osd_index.c:1201:osd_dir_delete()) lquake-MDT0000: failed to destroy agent object (0) for the entry data049: rc = -22&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13804&quot;&gt;&lt;del&gt;LU-13804&lt;/del&gt;&lt;/a&gt;.)&lt;/p&gt;</comment>
                            <comment id="389335" author="gerrit" created="Sun, 15 Oct 2023 16:57:09 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52703&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52703&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: tag switched hybrid IOs&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: bb640da69daa8a65bd1c8fa3a986465ac8d327e3&lt;/p&gt;</comment>
                            <comment id="390099" author="paf0186" created="Fri, 20 Oct 2023 21:03:00 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=gerrit&quot; class=&quot;user-hover&quot; rel=&quot;gerrit&quot;&gt;gerrit&lt;/a&gt;&#160;added a comment -&#160;7 minutes ago&lt;br/&gt;
&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch:&#160;&lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52777&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52777&lt;/a&gt;&lt;br/&gt;
Subject:&#160;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt;&#160;llite: hybrid IO HDD thresholds&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 83f416731d2d5455ce0255202b7aa3c1f872da13&lt;br/&gt;
&lt;a href=&quot;https://jira.whamcloud.com/secure/EditComment!default.jspa?id=60086&amp;amp;commentId=390095&quot; class=&quot;external-link&quot; rel=&quot;nofollow&quot;&gt;Edit&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=gerrit&quot; class=&quot;user-hover&quot; rel=&quot;gerrit&quot;&gt;gerrit&lt;/a&gt;&#160;added a comment -&#160;7 minutes ago&lt;br/&gt;
&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch:&#160;&lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52778&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52778&lt;/a&gt;&lt;br/&gt;
Subject:&#160;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt;&#160;tests: hybrid IO consistency test&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;/p&gt;</comment>
                            <comment id="390100" author="paf0186" created="Fri, 20 Oct 2023 21:03:54 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52776&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52776&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add file nonrotational check&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: b88060157ab67c90d2724f1de86203b2a4708953&lt;/p&gt;</comment>
                            <comment id="390101" author="paf0186" created="Fri, 20 Oct 2023 21:08:22 +0000"  >&lt;p&gt;Making some notes on what remains to do here.&lt;/p&gt;

&lt;p&gt;Add tests of tweaking the hybrid IO threshold for rotational and non-rotational&lt;/p&gt;

&lt;p&gt;Need to make the existing threshold test more intelligent, using an automatically adjusting IO size for the threshold which is in effect (rotational or non-rotational)&lt;/p&gt;

&lt;p&gt;Need to add two types of racing test: Multiple process on one client, multiple process on two clients (sanityn)&lt;/p&gt;

&lt;p&gt;Bring in the contention code.&#160; The contention detection and management on the client side needs to be split out in to a number of patches.&lt;/p&gt;</comment>
                            <comment id="390102" author="paf0186" created="Fri, 20 Oct 2023 21:11:04 +0000"  >&lt;p&gt;Add test using the fail loc to force a switch (It&apos;s a good fail loc but doesn&apos;t have an obvious use right now)&lt;/p&gt;</comment>
                            <comment id="390414" author="gerrit" created="Tue, 24 Oct 2023 20:29:44 +0000"  >&lt;p&gt;&quot;Patrick Farrell &amp;lt;pfarrell@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/52822&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/52822&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13802&quot; title=&quot;New i/o path: Buffered i/o as DIO&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13802&quot;&gt;LU-13802&lt;/a&gt; llite: add ZFS check for hybrid IO&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: c5ada8cbb710019c7fe5671db06bb514d173f3ca&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="76999">LU-16964</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="60032">LU-13805</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60086">LU-13814</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="60010">LU-13799</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="66606">LU-15092</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="65835">LU-14969</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="56411">LU-12550</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="79985">LU-17422</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80054">LU-17433</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60009">LU-13798</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="35455" name="test_malloc_align.c" size="1125" author="adilger" created="Mon, 20 Jul 2020 20:43:21 +0000"/>
                    </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|i015hj:</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>