<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:47:05 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-4931] New feature of giving server/storage side advice of accessing file</title>
                <link>https://jira.whamcloud.com/browse/LU-4931</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;We implement a new feature which provides new APIs and utils for senior users and smart applications to give advices about the access pattern of Lustre file so as to improve the data/metadata access peformance. It has a similar idea with fadvise64_64(2) or posix_fadvise(2), yet can pass specical advices directly through Lustre client to server/storage side.&lt;/p&gt;

&lt;p&gt;Some tests show that this feature might help us to get performance improvement for some application by giving proper advices in advance.&lt;/p&gt;</description>
                <environment></environment>
        <key id="24298">LU-4931</key>
            <summary>New feature of giving server/storage side advice of accessing file</summary>
                <type id="2" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11311&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="3" iconUrl="https://jira.whamcloud.com/images/icons/priorities/major.svg">Major</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="lixi">Li Xi</assignee>
                                    <reporter username="lixi">Li Xi</reporter>
                        <labels>
                            <label>p4j</label>
                            <label>patch</label>
                    </labels>
                <created>Sat, 19 Apr 2014 15:23:34 +0000</created>
                <updated>Fri, 1 Dec 2017 19:23:52 +0000</updated>
                            <resolved>Wed, 5 Oct 2016 11:44:57 +0000</resolved>
                                                    <fixVersion>Lustre 2.9.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>19</watches>
                                                                            <comments>
                            <comment id="82024" author="lixi" created="Sat, 19 Apr 2014 15:31:48 +0000"  >&lt;p&gt;The patch is tracked here.&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/10029/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/10029/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="82038" author="pjones" created="Mon, 21 Apr 2014 12:31:56 +0000"  >&lt;p&gt;Bobijam&lt;/p&gt;

&lt;p&gt;Could you please review this suggested feature and provide feedback?&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;

&lt;p&gt;Peter&lt;/p&gt;</comment>
                            <comment id="92849" author="adilger" created="Fri, 29 Aug 2014 18:50:35 +0000"  >&lt;p&gt;I also noticed while looking at &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-137&quot; title=&quot;ioctl passthrough mechanism for Lustre OST/MDT mountpoints&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-137&quot;&gt;&lt;del&gt;LU-137&lt;/del&gt;&lt;/a&gt; that there is an ioctl in newer versions of ext4 &lt;tt&gt;EXT4_IOC_PRECACHE_EXTENTS&lt;/tt&gt; which fetches only the file metadata from disk.  This might be useful in conjunction with this patch to avoid the random seeking for the data, but avoid polluting cache with the data if the reads are going to be large.  This would imply that we need several different levels of &quot;advice&quot; for the OSTs, like ADVICE_CACHE_METADATA, ADVICE_CACHE_DATA (or FADV_WILLNEED from fadvise()), ADVICE_UNCACHE (or FADV_DONTNEED from fadvise()). &lt;/p&gt;

&lt;p&gt;For ADVICE_RANDOM, if the file size is small enough that the file can fit entirely into the client RAM or the objects can fit entirely into the OST(s) RAM then it could be mapped to ADVICE_CACHE_DATA.  Otherwise it should disable readahead on the file/object. This would also be useful if there was a burst buffer device that could copy the file from the OSTs into SSD/NVRAM storage, but that doesn&apos;t exist yet.&lt;/p&gt;

&lt;p&gt;For ADVICE_SEQUENTIAL it would make sense to increase the readahead window for the file on both the client and the backing OST(s).&lt;/p&gt;</comment>
                            <comment id="92871" author="lixi" created="Sat, 30 Aug 2014 02:20:47 +0000"  >&lt;p&gt;Hi Andreas,&lt;/p&gt;

&lt;p&gt;Thank you very much for the guidance. That is really interesting. I will add these hints when I get the chance to refresh the patch.&lt;/p&gt;</comment>
                            <comment id="97704" author="lixi" created="Tue, 28 Oct 2014 15:50:39 +0000"  >&lt;p&gt;There could be different implemetations for each kind of advice/hint. So, in order to make it easier to review, I seperate the change into several patches. The first patch adds a framework and other patches add advices/hints support based on the framework.&lt;/p&gt;

&lt;p&gt;Framework patch:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/12458&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/12458&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Willneed patch:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/10029/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/10029/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="102970" author="jay" created="Fri, 9 Jan 2015 06:03:57 +0000"  >&lt;p&gt;The purpose of this patch wasn&apos;t clear to me. This patch may work under a few assumptions:&lt;br/&gt;
1. disk delay consumes most of time in the read sys call handling;&lt;br/&gt;
2. the readcache on the OFD size can hold readahead pages long enough so that they are still in cache when they are actually used.&lt;/p&gt;

&lt;p&gt;I&apos;m not sure if we can make these assumptions.&lt;/p&gt;

&lt;p&gt;The problem to block us from implementing fadivse(2) is that there is no file system callback for this interface. If we can take the ioctl() solution as this patch suggested, we can alternatively implement an ioctl based fadvise(2)(which can be easily migrated once the file system callback of fadvise(2) is added into kernel). Therefore, WILLNEED will actually read ahead pages from OFD side.&lt;/p&gt;

&lt;p&gt;How do you think?&lt;/p&gt;</comment>
                            <comment id="103467" author="lixi" created="Wed, 14 Jan 2015 14:12:51 +0000"  >&lt;p&gt;Hi Jinshan,&lt;/p&gt;

&lt;p&gt;We did a little bit benchmark with this patch for concept validation. If we prefetch data from disk to memory, we will be able to get a huge improvement for read performance, especially for small read. And even if we prefetch the data from disk to SSD (with the support from hardware APIs), the performance improvement is still significant. I am not sure, but I guess, comparing to pretching to memory, this patch might be more useful for hybrid storage drivers, because as you said, the memory size is really limited.&lt;/p&gt;

&lt;p&gt;Using existing IOCTL framework is an interesting idea. But maybe, there are some other advice types (for example, some of the types that Andreas had suggested) which don&apos;t need to be sent to OSS/MDS side. IOCTL seems like a low level interfaces which controls ldiskfs/ZFS directly. Fadvise could be more upper-level and might trigger smart reactions from different levels of Lustre components. So, I think it is a little bit different with IOCTL interfaces. &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;&lt;/p&gt;


</comment>
                            <comment id="103656" author="jay" created="Thu, 15 Jan 2015 20:21:59 +0000"  >&lt;p&gt;I had a conversation with Li Xi. It turned out that this is not exactly the same scenario of fadvise(), the goal of this work is not even to read WILLNEED pages into memory. The intention is to work on a specialized hardware where it has HDD on the OST and SSD as the cache of HDD, and it just prefetches the data from HDD to SSD so that the upcoming read can find the data in SSD. The data can be read by multiple clients therefore it may not be good to transfer those data to client&apos;s memory as fadvise() does.&lt;/p&gt;

&lt;p&gt;In that case, it&apos;s really confusing to use terminologies of fadvise(). I would like to change the name to prefetch or something else.&lt;/p&gt;

&lt;p&gt;Li Xi, please correct me if I got this wrong.&lt;/p&gt;</comment>
                            <comment id="103694" author="lixi" created="Fri, 16 Jan 2015 00:32:08 +0000"  >&lt;p&gt;Hi Jinshan,&lt;/p&gt;

&lt;p&gt;Yeah, the scenario of this work is different with traditional fadvise(). So it would be a good idea to use a different name to prevent confusion.&lt;/p&gt;</comment>
                            <comment id="103699" author="adilger" created="Fri, 16 Jan 2015 01:41:55 +0000"  >&lt;p&gt;JInshan, I think &quot;prefetch&quot; is not necessarily correct either, since there may be a desire to do e.g. DONTNEED or NOREUSE to flush data from the cache.  I don&apos;t mind &quot;ladvise&quot; as the name, since it is essentially &quot;fadvise, but on the server and not the client&quot;.  This may also be able to integrate into DSS into the future to give cache hints to the server.&lt;/p&gt;</comment>
                            <comment id="103780" author="jay" created="Fri, 16 Jan 2015 19:42:16 +0000"  >&lt;p&gt;Hi Andreas, If I could make a choice, I&apos;d avoid ladvise() and any terminologies similar to fadvise(). Sooner or later, we&apos;re going to implement fadvise(2) for Lustre, and people will start to ask what&apos;s the difference between ladvise() and fadvise() &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/wink.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;
</comment>
                            <comment id="103952" author="lixi" created="Tue, 20 Jan 2015 00:14:26 +0000"  >&lt;p&gt;Hi Jinshan,&lt;/p&gt;

&lt;p&gt;Do you have any better idea about the name? I am fine with ladvise(). I guess the difference between fadvise() and this mechanism has to be explained anyway no matter which name we choose. The difference between names of ladvise() and fadvise() looks enough to alert people that they are similar but different. And names that has similar meaning, e.g. hint and intent, might conflicts with existing mechanisms too, which will be worse.&lt;/p&gt;</comment>
                            <comment id="106268" author="gerrit" created="Mon, 9 Feb 2015 15:32:29 +0000"  >&lt;p&gt;Li Xi (lixi@ddn.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/13691&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/13691&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: Add feature of giving file access advices&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 0252db601d888f5923fd5a6dfec886c2a1c68038&lt;/p&gt;</comment>
                            <comment id="107036" author="green" created="Sat, 14 Feb 2015 05:42:15 +0000"  >&lt;p&gt;I just read through the patch (and left a bunch of comments).&lt;/p&gt;

&lt;p&gt;I think it leaves more questions than it answers.&lt;br/&gt;
e.g. you mention that &quot;senior users&quot; would be able to do this (to influence &quot;dumb applications&quot; I assume). But if you will walk this road - it opens all sorts of questions, like how sticky those advices are, how to get list of advices currently in effect on a file and in the filesystem, how to reset the advices so that they are no longer in effect and such.&lt;/p&gt;

&lt;p&gt;The very important question of why did not you try to talk to upstream kernel people to see if they would be willing to add a callback in fadvise system call to call into th filesystem? If they are willing to do this - your job is suddenly much simplified as a lot of 3rd party apps that currently use posix_fadvise would start magically working and we won&apos;t have one more API to think about.&lt;/p&gt;

&lt;p&gt;Have you considered that there&apos;s no sense to send any advises to the servers all by themself? Why not cache the advise information on the client - not only would you be able to glance information about this from the file descriptor (even if the kernel guys don&apos;t agree to insert an FS callback) for compat reasons, there&apos;s one less RPC, and then you can only send relevant advices with every IO too, and refresh server idea of your wishes every time should the server forget (due to failover/recovery or memory pressure or countless other reasons). I see your example of &quot;migrate data to other tier of storage&quot; potentially by a sysadmin (with lfs ... command, lfs ladvise is too cryptic and I think it&apos;s best if you have something more intuitive thought up, things like lfs mark fastaccess file, to give a random nonbinding example), the implementation then would be to issue the same advise command (whatever would be the way to do this) and then issuing a 1 byte read or some other lighweight IO in the necessary region so that your wishes are transferred to the server.&lt;/p&gt;

&lt;p&gt;Oh, also note how now if an application wants to control a file access, it needs to do two calls - to posix_Fadvise and your ioctl - this is also inconvenient, I imagine, and if the kernel guys reject your approach of calling into the filesystem - you might want to call into sys_fadvise64 yourself from your ioctl.&lt;/p&gt;</comment>
                            <comment id="107038" author="adilger" created="Sat, 14 Feb 2015 09:29:01 +0000"  >&lt;p&gt;Oleg, I think you miss some of the vslue of this interface. The regular fadvise syscall is itself not necessarily storing any persistent state on the client either. fadvise(WILLNEED) just prefetches pages into cache, but has no guarantee they will be even loaded or kept, since it is only advice to try to optimize performance.&lt;/p&gt;

&lt;p&gt;The ladvise code is similar to fadvise, except it is like calling fadvise on the server, which isn&apos;t possible today. Even if the upstream kernel was changed to allow fadvise() to contact the filesystem, the behavior is different. The workload for ladvise is e.g. a bunch of different clients are doing small random reads of a file, so prefetching pages into OSS cache with big linear reads before the random IO is a net benefit.  Fetching all that data into each client cache with fadvise() may not be, due to much more data being sent to the client.&lt;/p&gt;

&lt;p&gt;Similarly, having an ladvise DONTNEED that could flush all the cache for a specific object from OST cache may be better than only flushing it from the client cache. &lt;/p&gt;

&lt;p&gt;Even if fadvise is changed in the upstream kernel, it will take several years before that got into widely used vendor kernels (I don&apos;t think we plan to oatch client kernels), so having an interface for current systems is needed. &lt;/p&gt;</comment>
                            <comment id="107041" author="lixi" created="Sat, 14 Feb 2015 13:18:26 +0000"  >&lt;p&gt;Hi Oleg,&lt;/p&gt;

&lt;p&gt;I think Andreas has pointed out all the possible reasons that I can think of. And please notice that another important usage of ladvise() interface is to give DSS hints to OSTs in the future. Ofcouse, we could hack fadvise() interface and add DSS advice. But DSS advice is so different with existing fadvise() framework that a seperate interface seems better.&lt;/p&gt;</comment>
                            <comment id="107045" author="green" created="Sat, 14 Feb 2015 17:36:38 +0000"  >&lt;p&gt;Andreas: I got that. regular fadvise does store permanent state on the client in many cases even now (not in enough details to be useful here, though).&lt;br/&gt;
As for the local cache population on the client from fadvise - if we have a callback to fadvise into the filesystem - then we can control all of this to a big degree and I imagine this would be the first thing upstreeam guys ask us - i.e. &quot;why did not you ask for a call into fs from sys_fadvise64&quot;?&lt;br/&gt;
I wonder if other filesystems like GPFS have this sort of thing too?&lt;/p&gt;

&lt;p&gt;I feel that your example of random reads from a file does not really address all problems at hand. In reality there are three possible cases: a single client does a lot of random reads from the file and a lot of clients do random reads from the file (causing or not causing entire file to be read in the end).&lt;br/&gt;
For the cases number 3 it&apos;s definitely beneficial to prefetch entire file into server cache and keep it there, for case number two (lots of clients, not entire file read) usefulness is a function of how big of a probability it is we&apos;ll hit adjacent blocks, as it could be&lt;br/&gt;
the reads also would be wasted if you have clients read random places around 10% of a totally huge file. And in 1st case with a single client - it makes no sense to prefetch anything on the server.&lt;br/&gt;
I imagine theanswer to the 1st case is not to do this call, but how to distinguish between case #2 and #3 not call anything for #3, have a different argument for #3  (i.e. for #3 we call with WILLNEED and for #2 and possible even #1 as RANDOM)?&lt;br/&gt;
Additionally (something not done in this patch, and not requiring protocol changes, but probably needed eventually) is to do client cache management accordingly. i.e. in all cases we&apos;d need to shrink readahead windows to basically 0 and not allow them to grow. Or do we really plan to keep these completely separate - i.e. backend and frontend cache control? So people need to calls to control each one separately?&lt;/p&gt;

&lt;p&gt;As for patching client servers, at least in case of RedHat they seem to be happy to backport patches from upstream that people need, as long as they were already accepted upstream. I imagine other major vendors are in a similar position.&lt;/p&gt;

&lt;p&gt;Now, back to the protocol level changes - do we really think sending those advices separately, as opposed to a part of IO RPC is the right choice? Protocol changes are the most fixed in place and hardest to change so we really need to strike it right the first go around.&lt;br/&gt;
In my view embedding the advices into the IO RPCs has the benefit of actually making sure server has the actual picture of what&apos;s going on every time.&lt;br/&gt;
Since the advices are non-sticky (as per your comments) - I imagine then it&apos;s a bad idea to lose them (does not mean we need to grant them every time of course, server will have it&apos;s own logic about this) mid-run of the application just because server restarted? &lt;br/&gt;
On the downside, I imagine, if two different applications with different settings are working on the same file, a hilarity will ensue as they give conflicting commands with every RPC.&lt;/p&gt;

&lt;p&gt;I guess if we do decide on the separate RPCs for advices, it makes sense to futureproof them a bit to allow multiple entries.&lt;/p&gt;</comment>
                            <comment id="107047" author="adilger" created="Sat, 14 Feb 2015 19:06:42 +0000"  >&lt;p&gt;I think it may be best to consider client vs. server cache management separately, even if a functional fadvise() call was available in the future. If a client calls fadvise(DONTNEED), it isn&apos;t clear if that should also flush cache on the server (maybe other clients are still accessing that file).&lt;/p&gt;

&lt;p&gt;If an app is sophisticated enough to use llapi_ladvise() then it can also call fadvise() as needed.  Why should we entangle client and server cache management if there may be good reasons not to?&lt;/p&gt;

&lt;p&gt;One example could be an app that uses ladvise(WILLNEED) to fetch random IO data into server cache via prefetch, reads randomly into client cache, then ladvise(DONTNEED) to drop it from the server cache to start loading the next dataset in advance while it is still in client cache until processing is done. The app doesn&apos;t want ladvise(DONTNEED) to flush the client cache, and if we entangle the two then such optimization wouldn&apos;t be possible. &lt;/p&gt;

&lt;p&gt;Yes, it is possible that conflicting directives could be sent from multiple clients, but the OST could also start to ignore the advice in this case. In any case, in this case, the effect will generally be limited to a single user&apos;s files, so if they are asking for inconsistent behaviour then they get what they ask for in the end. &lt;/p&gt;

&lt;p&gt;As for adding such directives with each IO RPC, I could imagine that might also be possible (e.g. server side prefetch for readahead), and that isn&apos;t precluded in the future, but I imagine that for most workloads the app will call ladvise() separately from read/write so it makes sense to have a separate RPC for it today. Also, I expect that ladvise() advice will only be needed when it is not something that the kernel could detect itself (e.g. that some random IO is coming soon) so it might never be possible to automatically generate such hints automatically from within the kernel. &lt;/p&gt;</comment>
                            <comment id="107049" author="green" created="Sat, 14 Feb 2015 19:44:10 +0000"  >&lt;p&gt;Looking at the ongoing examples in the gerrit, it looks like we really have two usecases here.&lt;br/&gt;
One is for storage control where we tell the storage (and it&apos;s free to ignore of course) things like &quot;this file is about to be pounded in a way that is best handled by storage tier XXX&quot;. I imagine this indeed is ok to send as separate RPCs.&lt;br/&gt;
The other is for ongoing IO like RANDOM designation that probably makes the most sense to send along with IO (a one time readahead window reset is probably less ideal).&lt;br/&gt;
Though if we step further away - they are the same. When we want to have random IO for an object - it makes sense to ask the storage to move it to some SSD-like tier with low latency, and then every IO would not need to be cached or read-ahead deeply because cache hit rate is going to be low.&lt;/p&gt;

&lt;p&gt;As such I imagine the current patch is mostly fine as the very first step in that direction. Protocol-wise it&apos;s ok.&lt;br/&gt;
Do we really want the magic to be part of ioctl call? Is the plan here to use it a s a version check so different magic enables more features? But then we know extra features are enabled because we&apos;ll see them being used too, so that&apos;s kind of moot, and if we need to change the structure itself, then the ioctl number will change (it hashes the struct size into the actual ioctl number along with other stuff).&lt;br/&gt;
There are also some other style and correctness details in my first review that need to be addressed. And we also still probably should try and start the discussion in linux-fsdevel about feasibility of passing fadvise calls down to FS level so that when we get to usecases useful there - we already know the answer on possible avenues of implementing that?&lt;/p&gt;</comment>
                            <comment id="107069" author="jay" created="Mon, 16 Feb 2015 10:23:18 +0000"  >&lt;blockquote&gt;&lt;p&gt;One is for storage control where we tell the storage (and it&apos;s free to ignore of course) things like &quot;this file is about to be pounded in a way that is best handled by storage tier XXX&quot;. I imagine this indeed is ok to send as separate RPCs.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I think this is exactly the problem this patch will address. I don&apos;t think random IO is in scope of this patch because dedicated API is provided to applications and the applications should know exactly what they are doing. It&apos;s simply for the applications to look for trouble to issue wrong IO model to OSTs.&lt;/p&gt;

&lt;p&gt;I guess one confusion is from the function name fadivse(). This is why I&apos;d like to avoid advise() similar stuff and using a totally different name.&lt;/p&gt;

&lt;p&gt;The comments are too long, sorry if I missed something.&lt;/p&gt;</comment>
                            <comment id="107097" author="green" created="Tue, 17 Feb 2015 04:23:22 +0000"  >&lt;p&gt;Actually I guess teh advise thing makes sense in a way, if we consider that it is application givilg the acces advice ahead of time.&lt;/p&gt;

&lt;p&gt;It&apos;s just the RPCs proposed only make sense as advice to tiered storage on the backend to let it know ahead of time when to move stuff to different tiers ahead of time.&lt;/p&gt;</comment>
                            <comment id="107196" author="adilger" created="Tue, 17 Feb 2015 23:43:26 +0000"  >&lt;p&gt;If the server cache can be considered a &quot;storage tier&quot; then this code is already useful. Also, for ZFS with L2ARC or DSS it also would be useful if wired in correctly. &lt;/p&gt;</comment>
                            <comment id="107216" author="green" created="Wed, 18 Feb 2015 05:42:24 +0000"  >&lt;p&gt;Server cache is definitely a storage tier in my book.&lt;br/&gt;
And I agree the code is useful (once the server side support is added - that is).&lt;/p&gt;</comment>
                            <comment id="114803" author="adilger" created="Sat, 9 May 2015 04:08:26 +0000"  >&lt;p&gt;I was thinking for &lt;tt&gt;LU_LADVISE_RANDOM&lt;/tt&gt; that it makes sense to send the random IO blocksize with the ladvise RPC.  For new file writes with ZFS this would allow selecting the blocksize of the file to match the random IO size to avoid large read-modify-writes.&lt;/p&gt;</comment>
                            <comment id="114820" author="lixi" created="Mon, 11 May 2015 01:02:11 +0000"  >&lt;p&gt;Yeah, that makes sense. And in the process of adding advice type support for DSS, I also realized that extra fields of &apos;struct lu_ladvise&apos; might be necessary for specifying arguments. That requires wire protocol updates. I am not sure how these arguments could be added in a extendable way, because one or two u64 padding fields does not sound like a good solution.&lt;/p&gt;</comment>
                            <comment id="134702" author="lixi" created="Mon, 30 Nov 2015 09:37:05 +0000"  >&lt;p&gt;I&apos;ve cleaned up the codes again. A manual of lfs-ladvise has been added. WILLNEED advice has been renamed to WILLREAD to prevent confusion with Linux kernel fadvise.&lt;/p&gt;</comment>
                            <comment id="139205" author="bevans" created="Mon, 18 Jan 2016 22:16:16 +0000"  >&lt;p&gt;Would it be possible (or reasonable) to add a lockless_truncate flag into the ladvise framework?  We have customers who would like more fine-grained control over the lockless_truncate flag (by file, rather than by filesystem).&lt;/p&gt;</comment>
                            <comment id="139213" author="adilger" created="Tue, 19 Jan 2016 02:25:39 +0000"  >&lt;p&gt;Ben,&lt;br/&gt;
That is really a client-side optimization instead of a server-side optimization, but I guess it could also be added into the &quot;hint for Lustre file IO access&quot; area. There is already an ioctl for lockless IO, but that is overkill for what you want.&lt;/p&gt;

&lt;p&gt;You could propose a patch and we can see what it looks like. It would just be a new advice type, and set a flag on the Lustre file info that truncates are lockless, unless the client already has a lock. &lt;/p&gt;</comment>
                            <comment id="143398" author="adilger" created="Tue, 23 Feb 2016 17:45:19 +0000"  >&lt;p&gt;Add ticket for manual update.&lt;/p&gt;</comment>
                            <comment id="143429" author="nrutman" created="Tue, 23 Feb 2016 18:57:04 +0000"  >&lt;p&gt;If the purpose of the advice is to influence backend tier selection, it also probably makes sense to include a ADVICE_ARCHIVE directive indicating that data should be down-tiered to HSM or slower Lustre storage.&lt;/p&gt;</comment>
                            <comment id="143654" author="adilger" created="Wed, 24 Feb 2016 21:11:50 +0000"  >&lt;p&gt;Is that a different interface for &quot;lfs hsm_archive&quot; on the file, or are you thinking if HSM archives behind individual OSTs?  I&apos;m not against adding advices, but I think they need to have a real use case and not just something that might be used in the future. &lt;/p&gt;</comment>
                            <comment id="143663" author="nrutman" created="Wed, 24 Feb 2016 22:29:59 +0000"  >&lt;p&gt;Most flags listed here are for cache / hot data; I&apos;m suggesting it is helpful to know data non-re-use as well: ADVICE_CACHE_CLIENT -&amp;gt; ADVICE_CACHE_SERVER -&amp;gt; ADVICE_UNCACHE -&amp;gt; ADVICE_ARCHIVE.  For example, if I&apos;m writing a checkpoint file that I know I will not read, Lustre might choose to follow the DIO path and skip all caches. It was just a thought for consideration really; I&apos;m not trying to push it.&lt;/p&gt;</comment>
                            <comment id="149248" author="gerrit" created="Sun, 17 Apr 2016 20:51:34 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/10029/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/10029/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: Add feature of giving file access advices&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: e14246641c04c9e3004043f58f469532223d06d6&lt;/p&gt;</comment>
                            <comment id="152248" author="gerrit" created="Fri, 13 May 2016 16:56:29 +0000"  >&lt;p&gt;Li Xi (lixi@ddn.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/20203&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/20203&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: Add noread advice support for ladvise&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 4404ced63b358383825199a5904d0c2b772fe9b0&lt;/p&gt;</comment>
                            <comment id="161946" author="gerrit" created="Mon, 15 Aug 2016 21:12:08 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/12458/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/12458/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: Add willread advice support for ladvise&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: f756979d9730333394037f127e75f43910174622&lt;/p&gt;</comment>
                            <comment id="161985" author="gerrit" created="Tue, 16 Aug 2016 05:24:46 +0000"  >&lt;p&gt;Gu Zheng (gzheng@ddn.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/21940&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/21940&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: add code for ladvise_hdr into wirecheck.c&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 1b888505ff79dd4fcb42197df972c96033b57f19&lt;/p&gt;</comment>
                            <comment id="165151" author="gerrit" created="Wed, 7 Sep 2016 17:24:21 +0000"  >&lt;p&gt;James Nunez (james.a.nunez@intel.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/22361&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/22361&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; tests: Run ladvise DONTNEED Test Multiple Times&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 4713ee435075ff3818a593572028bb8058267c55&lt;/p&gt;</comment>
                            <comment id="165423" author="adilger" created="Thu, 8 Sep 2016 23:17:13 +0000"  >&lt;p&gt;Li Xi, I noticed just now in &lt;tt&gt;ofd_ladvise_prefetch()&lt;/tt&gt; that this is allocating PTLRPC_MAX_BRW_PAGES * sizeof(niobuf_local) = 160KB for each ladvise &lt;tt&gt;willread&lt;/tt&gt; call.  Instead, this should be using struct tgt_thread_big_cache *tbc = req-&amp;gt;rq_svc_thread-&amp;gt;t_data as is done in &lt;tt&gt;tgt_brw_read()&lt;/tt&gt;.&lt;/p&gt;</comment>
                            <comment id="165424" author="adilger" created="Thu, 8 Sep 2016 23:21:04 +0000"  >&lt;p&gt;Also, while you are in there, can you please fix the indenting for&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; ofd_ladvise_hdl(struct tgt_session_info *tsi)
{
        :
        :
                &lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; LU_LADVISE_WILLREAD:
                        req-&amp;gt;rq_status = ofd_ladvise_prefetch(env, 
                                fo,
                                ladvise-&amp;gt;lla_start,
                                ladvise-&amp;gt;lla_end);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;to be&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;                        req-&amp;gt;rq_status = ofd_ladvise_prefetch(env, fo,
                                                        ladvise-&amp;gt;lla_start,
                                                        ladvise-&amp;gt;lla_end);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="165974" author="gerrit" created="Wed, 14 Sep 2016 03:21:30 +0000"  >&lt;p&gt;Li Xi (lixi@ddn.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/22489&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/22489&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ofd: use thread buffer for ladvise&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 64b359ee1aa58b95c13323039b300a04556ff033&lt;/p&gt;</comment>
                            <comment id="166219" author="gerrit" created="Thu, 15 Sep 2016 23:28:33 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/20203/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/20203/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: Add dontneed advice support for ladvise&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: a5a7890093ea2509db15f8aa8a8c9d9c86133209&lt;/p&gt;</comment>
                            <comment id="166222" author="pjones" created="Fri, 16 Sep 2016 03:03:50 +0000"  >&lt;p&gt;As per discussion with Ihara all further enhancements in this area will be tracked under a different JIRA ticket&lt;/p&gt;</comment>
                            <comment id="168140" author="adilger" created="Mon, 3 Oct 2016 23:55:14 +0000"  >&lt;p&gt;Reopen to land man page for 2.9.0:&lt;/p&gt;

&lt;p&gt;Andreas Dilger (andreas.dilger@intel.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/22910&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/22910&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; doc: update ladvise man page&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 2&lt;br/&gt;
Commit: 61ceb43c858d6fc979fc4da9d2a925026b27859a&lt;/p&gt;</comment>
                            <comment id="168304" author="gerrit" created="Wed, 5 Oct 2016 03:52:56 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/22910/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/22910/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; doc: update ladvise man page&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: f63e53a364f5162c0f8a81e42978c5a2b9b7522d&lt;/p&gt;</comment>
                            <comment id="168318" author="pjones" created="Wed, 5 Oct 2016 11:44:57 +0000"  >&lt;p&gt;Man page has landed. Remaining patches tracked under this id will be landed under a new ticket&lt;/p&gt;</comment>
                            <comment id="168809" author="gerrit" created="Sat, 8 Oct 2016 16:38:54 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/22489/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/22489/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ofd: use thread buffer for ladvise&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: c29cf72acd431e65f0438804561e7c30feef0366&lt;/p&gt;</comment>
                            <comment id="170867" author="gerrit" created="Tue, 25 Oct 2016 02:23:11 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/21940/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/21940/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4931&quot; title=&quot;New feature of giving server/storage side advice of accessing file&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4931&quot;&gt;&lt;del&gt;LU-4931&lt;/del&gt;&lt;/a&gt; ladvise: add code for ladvise_hdr into wirecheck.c&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 5ee1287305fb6b6c472d097ef9a86a9e315104e4&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10323">
                    <name>Gantt End to End</name>
                                            <outwardlinks description="has to be finished together with">
                                        <issuelink>
            <issuekey id="34886">LUDOC-327</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="10459">LU-137</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="28723">LU-6254</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="26232">LU-5561</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="39198">LU-8565</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="30456">LU-6671</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="39676">LU-8591</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="42182">LU-8902</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="32367">LU-7225</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_10490" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>End date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 13 May 2016 15:23:34 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzwklb:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>13631</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10493" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>Start date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 21 Apr 2014 15:23:34 +0000</customfieldvalue>

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