<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 02:05:52 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-7085] Toward smaller memory allocations on wide-stripe file systems</title>
                <link>https://jira.whamcloud.com/browse/LU-7085</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;I&apos;m testing on a fairly recent master build that includes the patch from &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-6587&quot; title=&quot;refactor OBD_ALLOC_LARGE to always do kmalloc first&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-6587&quot;&gt;&lt;del&gt;LU-6587&lt;/del&gt;&lt;/a&gt; (refactor OBD_ALLOC_LARGE to always do kmalloc first).  That band-aid has been great a improving performance on our wide-stripe file systems, but in the face of memory pressure/fragmentation, it will still rely on vmalloc to satisfy memory requests.  Since users tend to use RAM, I&apos;d like to see if there are any opportunities to reduce allocation sizes.&lt;/p&gt;

&lt;p&gt;Anywhere we need to allocate sizeof(something) * num_stripes, we should check to see if there&apos;s any way to avoid per-stripe information or at least reduce sizeof(something).&lt;/p&gt;</description>
                <environment>Test nodes with 2.7.57-gea38322</environment>
        <key id="31850">LU-7085</key>
            <summary>Toward smaller memory allocations on wide-stripe file systems</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="1">Fixed</resolution>
                                        <assignee username="ys">Yang Sheng</assignee>
                                    <reporter username="ezell">Matt Ezell</reporter>
                        <labels>
                    </labels>
                <created>Tue, 1 Sep 2015 21:20:23 +0000</created>
                <updated>Fri, 1 Jul 2016 18:46:38 +0000</updated>
                            <resolved>Thu, 7 Jan 2016 17:56:54 +0000</resolved>
                                    <version>Lustre 2.8.0</version>
                                    <fixVersion>Lustre 2.8.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>12</watches>
                                                                            <comments>
                            <comment id="125947" author="ezell" created="Tue, 1 Sep 2015 21:25:56 +0000"  >&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;# grep build /proc/fs/lustre/version 
build:  2.7.57-gea38322-CHANGED-2.6.32-431.17.1.el6.wc.x86_64
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Removing a wide stripe file system causes several large (64K) allocations&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;widerm.sh&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;#!/bin/bash
lfs setstripe -c 1008 widefile
echo +malloc &amp;gt; /proc/sys/lnet/debug
lctl dk &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
rm widefile
lctl dk | awk &lt;span class=&quot;code-quote&quot;&gt;&apos;/malloc/  &amp;amp;&amp;amp; $4 &amp;gt; 16384 {print}&apos;&lt;/span&gt;
echo -malloc &amp;gt; /proc/sys/lnet/debug
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;# ./widerm.sh 
02000000:00000010:5.0:1441136659.771448:0:44491:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff8802fcea8000.
02000000:00000010:5.0:1441136659.773314:0:44491:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff8802fcea8000.
00020000:00000010:5.0:1441136659.775340:0:44491:0:(lov_io.c:306:lov_io_subio_init()) kmalloced &apos;lio-&amp;gt;lis_subs&apos;: 64512 at ffff8807a3b80000.
00020000:00000010:5.0:1441136659.775381:0:44491:0:(lov_lock.c:159:lov_lock_sub_init()) kmalloced &apos;lovlck&apos;: 64560 at ffff8807a35a0000.
02000000:00000010:5.0:1441136659.811536:0:44491:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff8802fcea8000.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here lov_io_subio_init is allocating 64 bytes per stripe for a struct lov_io_sub.  Ideally we could find a way to skip these allocations all together, but I&apos;m not sure if sub_refcheck2 is even used (I&apos;m not seeing it anywhere) and sub_io_initialized and sub_borrowed appear to be boolean values that could possibly be packed into a bitfield, although that adds a lot of complexity.  Every int we can remove from the structure saves us 2 pages of allocation for a 1008-stripe file.&lt;/p&gt;

&lt;p&gt;Changing the rm to unlink still results in the 64K allocation:&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;# ./wideunlink.sh 
02000000:00000010:5.0:1441139513.846527:0:47037:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff88047f408000.
00020000:00000010:5.0:1441139513.862811:0:47037:0:(lov_io.c:306:lov_io_subio_init()) kmalloced &apos;lio-&amp;gt;lis_subs&apos;: 64512 at ffff880830f40000.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since the MDS is handling the OST object removal, what is the client using all of that space for?&lt;/p&gt;

&lt;p&gt;Running setstripe causes 32K allocations for reply buffers, which I would like to see lowered&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;# ./widesetstripe.sh 
02000000:00000010:5.0:1441138007.306360:0:46049:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff880466c70000.
02000000:00000010:5.0:1441138007.306700:0:46049:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff88047f408000.
02000000:00000010:5.0:1441138007.339016:0:46049:0:(sec_null.c:260:null_enlarge_reqbuf()) kmalloced &apos;newbuf&apos;: 32768 at ffff880409e00000.
02000000:00000010:5.0:1441138007.342874:0:46049:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff88045e410000.
00000002:00000010:5.0:1441138007.343228:0:46049:0:(mdc_locks.c:720:mdc_finish_enqueue()) kmalloced &apos;lmm&apos;: 24224 at ffff880409a10000.
00020000:00000010:5.0:1441138007.344499:0:46049:0:(lov_pack.c:365:lov_getstripe()) kmalloced &apos;lmmk&apos;: 24224 at ffff88045e410000.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And getstripe is just as setstripe&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;# ./widegetstripe.sh 
02000000:00000010:5.0:1441138826.018174:0:46625:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff880409ac0000.
02000000:00000010:5.0:1441138826.018588:0:46625:0:(sec_null.c:260:null_enlarge_reqbuf()) kmalloced &apos;newbuf&apos;: 32768 at ffff880483e78000.
00000002:00000010:5.0:1441138826.018596:0:46625:0:(mdc_locks.c:720:mdc_finish_enqueue()) kmalloced &apos;lmm&apos;: 24224 at ffff8804500a0000.
02000000:00000010:5.0:1441138826.021218:0:46625:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff880483e78000.
02000000:00000010:5.0:1441138826.021927:0:46625:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff880483e78000.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A touch allocates 32K and the same 64K as above&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;# ./widetouch.sh 
02000000:00000010:5.0:1441138290.229050:0:46266:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff88045e410000.
02000000:00000010:5.0:1441138290.229484:0:46266:0:(sec_null.c:260:null_enlarge_reqbuf()) kmalloced &apos;newbuf&apos;: 32768 at ffff88047f408000.
00000002:00000010:5.0:1441138290.229492:0:46266:0:(mdc_locks.c:720:mdc_finish_enqueue()) kmalloced &apos;lmm&apos;: 24224 at ffff8804864e0000.
00020000:00000010:5.0:1441138290.232015:0:46266:0:(lov_io.c:306:lov_io_subio_init()) kmalloced &apos;lio-&amp;gt;lis_subs&apos;: 64512 at ffff88042cf00000.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Clearing locks is particularly bad:&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;# /tmp/widelockcancel.sh | head -2
00020000:00000010:10.0F:1441141987.299475:0:13812:0:(lov_io.c:306:lov_io_subio_init()) kmalloced &apos;lio-&amp;gt;lis_subs&apos;: 64512 at ffff880cbf1c0000.
00020000:00000010:0.0:1441141987.299775:0:13973:0:(lov_io.c:306:lov_io_subio_init()) kmalloced &apos;lio-&amp;gt;lis_subs&apos;: 64512 at ffff8808268e0000.
[root@atlas-spare04 tmp]# /tmp/widelockcancel.sh | wc -l
1008
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We get a 64K allocation PER OST (this is for a single file)&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;widelockcancel.sh&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;#!/bin/bash
cd /tmp
echo 3 &amp;gt; /proc/sys/vm/drop_caches
lctl set_param ldlm.namespaces.*.lru_size=clear &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
lfs setstripe -c 1008 /lustre/atlas2/stf002/scratch/ezy/md_test/widefile
echo +malloc &amp;gt; /proc/sys/lnet/debug
lctl dk &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
lctl set_param ldlm.namespaces.*.lru_size=clear &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
lctl dk | awk &lt;span class=&quot;code-quote&quot;&gt;&apos;/malloc/  &amp;amp;&amp;amp; $4 &amp;gt; 16384 {print}&apos;&lt;/span&gt;
echo -malloc &amp;gt; /proc/sys/lnet/debug
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I suspect there&apos;s also some badness in mdc_intent_getxattr_pack() related to using the max_easize, but I haven&apos;t dug into it that closely yet.&lt;/p&gt;</comment>
                            <comment id="125948" author="yujian" created="Tue, 1 Sep 2015 21:33:02 +0000"  >&lt;p&gt;Hi Yang Sheng,&lt;/p&gt;

&lt;p&gt;Could you please look into this ticket and advise? Thank you.&lt;/p&gt;</comment>
                            <comment id="126083" author="green" created="Wed, 2 Sep 2015 18:22:27 +0000"  >&lt;p&gt;Wide striped file access would still need big allocations because we need all striping information&lt;/p&gt;</comment>
                            <comment id="126288" author="ezell" created="Thu, 3 Sep 2015 20:50:28 +0000"  >&lt;blockquote&gt;&lt;p&gt;Wide striped file access would still need big allocations because we need all striping information&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Sure, until we have a more compact wide-stripe layout, I understand that after about 670 OSTs the &lt;em&gt;layout&lt;/em&gt; will be over 4 pages (on x86).  On our 1008-OST systems, that&apos;s about 24K (6 pages) for the largest layout.  Any request over that is assuming more than just the layout.  I demonstrated requests at 32K and 64K.&lt;/p&gt;

&lt;p&gt;And it&apos;s not just wide stripe file access causing large allocations.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;nonwideread.sh&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;#!/bin/bash
lfs setstripe -c 4 nonwidefile
echo 3 &amp;gt; /proc/sys/vm/drop_caches
lctl set_param ldlm.namespaces.*.lru_size=clear &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
echo +malloc &amp;gt; /proc/sys/lnet/debug
lctl dk &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
cat nonwidefile &amp;gt; /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
lctl dk | awk &lt;span class=&quot;code-quote&quot;&gt;&apos;/malloc/  &amp;amp;&amp;amp; $4 &amp;gt; 16384 {print}&apos;&lt;/span&gt;
echo -malloc &amp;gt; /proc/sys/lnet/debug
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;# ./nonwideread.sh 
02000000:00000010:1.0:1441312631.657483:0:85809:0:(sec_null.c:215:null_alloc_repbuf()) kmalloced &apos;req-&amp;gt;rq_repbuf&apos;: 32768 at ffff8806b3480000.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="126934" author="green" created="Thu, 10 Sep 2015 16:08:45 +0000"  >&lt;p&gt;The requests are rounded up to the next power of two in terms of size. Kernel does it anyway internally, so it was decided it&apos;s best if we do it ourselves and use all available buffer space rather than losing some of it.&lt;/p&gt;

&lt;p&gt;The code is&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;&lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt;
&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; null_alloc_repbuf(struct ptlrpc_sec *sec,
                      struct ptlrpc_request *req,
                      &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; msgsize)
{
        &lt;span class=&quot;code-comment&quot;&gt;/* add space &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; early replied */&lt;/span&gt;
        msgsize += lustre_msg_early_size();

        msgsize = size_roundup_power2(msgsize);

        OBD_ALLOC_LARGE(req-&amp;gt;rq_repbuf, msgsize);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now, it changed a little bit once ALLOC_LARGE started to do vmalloc for all requests beyond 16K, because vmalloc can round up to the next page boundary, but that was considered unimportant.&lt;/p&gt;

&lt;p&gt;Now that we always are doing kmalloc first again (before falling back to vmalloc on error) - this code is again correct in the sense that if you try to alloc 16k+1 bytes, 17k bytes or 31k bytes - internally kernel would still do a 32k allocation. 32k+1 would result in 64k allocation and so on.&lt;/p&gt;

&lt;p&gt;If your desire is to reduce vmalloc allocation once kmalloc has failed - that&apos;s a bit tricky since right now it is all hidden in OBD_ALLOC_LARGE that has no idea of a possible reduced allocation size if kmalloc fails.&lt;br/&gt;
We probably can unwind it just in reply buffer allocation and do a smaller one if we use vmalloc, but it sounds like a lot of trouble for very little gain in a heavily fragmented system corner case. If you are in that corder case, your allocations are already slow due to vmalloc.&lt;/p&gt;</comment>
                            <comment id="126937" author="green" created="Thu, 10 Sep 2015 16:24:09 +0000"  >&lt;p&gt;Also, to address your other concern of non-wide file reads doing large allocations - did you do an access to a wide-striped file from this client recently? Because the client caches a &quot;largest striping I saw from the server lately&quot; value and allocates bigger buffers for some time to avoid performance hit on resends if you do access wide striped file and allocated too small of a buffer. This was fixed by &lt;a href=&quot;http://review.whamcloud.com/11614&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/11614&lt;/a&gt; and was broken before causing allocations to always be too small.&lt;br/&gt;
This pessimistic allocation only happens on opens (see in mdc_intent_open_pack how obddev-&amp;gt;u.cli.cl_max_mds_easize is used).&lt;/p&gt;

&lt;p&gt;I guess the usage there is incorrect, though and should have been cl_default_mds_easize instead like everywhere else and consistent with other users of this, but need to be careful of &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4847&quot; title=&quot;cl_default_mds_easize might be 0 in mdc_intent_getattr_pack&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4847&quot;&gt;&lt;del&gt;LU-4847&lt;/del&gt;&lt;/a&gt;, I guess.&lt;/p&gt;</comment>
                            <comment id="128378" author="ezell" created="Thu, 24 Sep 2015 16:00:20 +0000"  >&lt;p&gt;Oleg, thanks for the explanations.  I had forgotten that kmalloc was order-based, and I agree that once you have to vmalloc it doesn&apos;t make much difference if you have rounded up or not.&lt;/p&gt;

&lt;p&gt;The node I tested on had previously done wide-striping, but I don&apos;t know how recently.  I don&apos;t see any time-based decay, so I guess &quot;recently&quot; just means &quot;ever&quot;.  So once anyone uses a wide-striped file, all replies to opens will be large?&lt;/p&gt;

&lt;p&gt;Do you think the changes to mdc_intent_getxattr_pack() are worthwhile, assuming we add a safety net like &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4847&quot; title=&quot;cl_default_mds_easize might be 0 in mdc_intent_getattr_pack&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4847&quot;&gt;&lt;del&gt;LU-4847&lt;/del&gt;&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;I&apos;m still curious about why unlink needs to allocate a large reply buffer since object deletion is handled by the MDT now.  What is returned in an unlink reply?&lt;/p&gt;</comment>
                            <comment id="128449" author="adilger" created="Fri, 25 Sep 2015 06:26:16 +0000"  >&lt;p&gt;There should not be a large buffer allocation for unlinks, that would be a bug I think. &lt;/p&gt;

&lt;p&gt;As for the max reply size decay, that was something I proposed during patch review but was never implemented. I agree that if access to wide striped files is rare that it may make sense to reduce the allocations again, but the hard part is to figure out what &quot;rarely&quot; means do that there are not continual resends. &lt;/p&gt;</comment>
                            <comment id="129057" author="yujian" created="Thu, 1 Oct 2015 21:21:46 +0000"  >&lt;blockquote&gt;&lt;p&gt;There should not be a large buffer allocation for unlinks, that would be a bug I think. &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Hi Yang Sheng,&lt;/p&gt;

&lt;p&gt;Could you please look into the above issue? Thank you.&lt;/p&gt;</comment>
                            <comment id="130367" author="ys" created="Wed, 14 Oct 2015 14:16:43 +0000"  >&lt;p&gt;The &apos;lio-&amp;gt;lis_subs&apos;big buffer allocated  from cl_io_init invoked by cl_sync_file_range. The code path as below:&lt;br/&gt;
iput=&amp;gt; iput_final =&amp;gt; drop_inode =&amp;gt; ll_delete_inode =&amp;gt; cl_sync_file_range &lt;/p&gt;

&lt;p&gt;I think we can skip invoke cl_sync_file_range while unlink file.&lt;/p&gt;</comment>
                            <comment id="131078" author="yujian" created="Thu, 22 Oct 2015 00:57:00 +0000"  >&lt;blockquote&gt;&lt;p&gt;I think we can skip invoke cl_sync_file_range while unlink file.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Hi Yang Sheng, are you going to create a patch for this?&lt;/p&gt;</comment>
                            <comment id="132317" author="ys" created="Mon, 2 Nov 2015 10:43:41 +0000"  >&lt;p&gt;After a few test and discuss with clio expert. Looks like lis_subs buffer allocation is not avoid entirely. One way is allocate every osc separately. So we can skip some osc needn&apos;t sync data. But it really bring some complexity. Other way just trying to reduce the struct size. &lt;/p&gt;

&lt;p&gt;Thanks,&lt;br/&gt;
YangSheng&lt;/p&gt;</comment>
                            <comment id="132805" author="yujian" created="Fri, 6 Nov 2015 00:57:24 +0000"  >&lt;p&gt;Thank you, Yang Sheng. Which way would you prefer to implement?&lt;/p&gt;</comment>
                            <comment id="133007" author="ys" created="Mon, 9 Nov 2015 16:55:52 +0000"  >&lt;p&gt;I&apos;ll trying second way and then would doing it in first way if we still not satisfy the effect. &lt;/p&gt;

&lt;p&gt;Thanks,&lt;br/&gt;
YangSheng&lt;/p&gt;</comment>
                            <comment id="135191" author="gerrit" created="Fri, 4 Dec 2015 06:35:08 +0000"  >&lt;p&gt;Yang Sheng (yang.sheng@intel.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/17476&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/17476&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-7085&quot; title=&quot;Toward smaller memory allocations on wide-stripe file systems&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-7085&quot;&gt;&lt;del&gt;LU-7085&lt;/del&gt;&lt;/a&gt; lov: trying smaller memory allocations&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 8c7f009755ef03080c599347cf0452a9bd7cf5f9&lt;/p&gt;</comment>
                            <comment id="138161" author="gerrit" created="Thu, 7 Jan 2016 01:48:21 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/17476/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/17476/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-7085&quot; title=&quot;Toward smaller memory allocations on wide-stripe file systems&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-7085&quot;&gt;&lt;del&gt;LU-7085&lt;/del&gt;&lt;/a&gt; lov: trying smaller memory allocations&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: e1e56300cac30fe8d9db296107905f5936648c3c&lt;/p&gt;</comment>
                            <comment id="138220" author="jgmitter" created="Thu, 7 Jan 2016 17:56:54 +0000"  >&lt;p&gt;Landed for 2.8.0&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                                        </outwardlinks>
                                                        </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|hzxm27:</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>