<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:14:04 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-1158] nanosecond timestamp support for Lustre</title>
                <link>https://jira.whamcloud.com/browse/LU-1158</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;The current Lustre network protocol has support for a 64-bit timestamp of seconds, but does not have a field for passing the nanosecond timestamp from clients to servers and back again.&lt;/p&gt;

&lt;p&gt;It would be relatively straight-forward to put 3x &lt;tt&gt;&amp;#95;&amp;#95;u32&lt;/tt&gt; nanosecond timestamps in the reserved fields in &lt;tt&gt;struct obdo&lt;/tt&gt; and &lt;tt&gt;struct mdt&amp;#95;body&lt;/tt&gt;.  These fields are currently always initialized to 0, so there wouldn&apos;t even need to be a protocol change or feature to begin using these fields for nanoseconds - just copy them in/out of the RPC structures, and old clients/servers will just store 0 there, and ignore any nanosecond timestamps that are sent to them (no differently than they do today).&lt;/p&gt;

&lt;p&gt;It is more complex to add the nanosecond timestamps to struct ost_lvb, which is most commonly used for glimpse locks (stat) on OST objects.  This will require a structure change to fit the extra 3x &lt;tt&gt;&amp;#95;&amp;#95;u32&lt;/tt&gt; nanosecond timestamps into ost_lvb, which may require a protocol change.  It &lt;em&gt;may&lt;/em&gt; be possible if this structure is passed in a separate ptlrpc message buffer that the larger size will be ignored by older clients, which would avoid the need for additional complexity for interoperability.&lt;/p&gt;</description>
                <environment></environment>
        <key id="13394">LU-1158</key>
            <summary>nanosecond timestamp support for Lustre</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.whamcloud.com/images/icons/priorities/major.svg">Major</priority>
                        <status id="4" iconUrl="https://jira.whamcloud.com/images/icons/statuses/reopened.png" description="This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.">Reopened</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="flei">Feng Lei </assignee>
                                    <reporter username="adilger">Andreas Dilger</reporter>
                        <labels>
                    </labels>
                <created>Thu, 1 Mar 2012 14:10:22 +0000</created>
                <updated>Sat, 3 Feb 2024 22:11:46 +0000</updated>
                                            <version>Lustre 2.4.0</version>
                                                        <due></due>
                            <votes>0</votes>
                                    <watches>16</watches>
                                                                            <comments>
                            <comment id="30159" author="adilger" created="Thu, 1 Mar 2012 14:19:37 +0000"  >&lt;p&gt;Johann, you were just working on changing the LDLM LVB structure to allow different LVB data to be passed for quota.  Does it seem practical to include the modifications necessary to increase ost_lvb in your changes, or is your change not so intrusive (i.e. using a smaller struct than ost_lvb) that adding this ability would increase the complexity of your patch unnecessarily?&lt;/p&gt;</comment>
                            <comment id="30282" author="johann" created="Fri, 2 Mar 2012 08:31:26 +0000"  >&lt;p&gt;Right, i&apos;ve already made changes to the LDLM LVB on the orion_quota branch, although i have not increased the size of it yet.&lt;br/&gt;
Yes, i think it makes sense to include the modifications to increase the ost_lvb in the same patch.&lt;/p&gt;</comment>
                            <comment id="41430" author="isami" created="Tue, 3 Jul 2012 18:41:25 +0000"  >&lt;p&gt;Patch tracking at &lt;a href=&quot;http://review.whamcloud.com/3266&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/3266&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1158&quot; title=&quot;nanosecond timestamp support for Lustre&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1158&quot;&gt;LU-1158&lt;/a&gt; general: support for nanosecond m/a/ctimes in Lustre&lt;/p&gt;</comment>
                            <comment id="41674" author="adilger" created="Tue, 10 Jul 2012 17:48:37 +0000"  >&lt;p&gt;I wanted to start a discussion here about the nanosecond times usage of the reserved fields in mdt_rec_reint.  I wasn&apos;t aware of it when this project started, but I see during patch inspection that the &lt;tt&gt;rr&amp;#95;{m,a,c}time&amp;#95;ns&lt;/tt&gt; fields consume the last 3 fields in that template struct.  In most of the instantiations (mdt_rec_link, mdt_rec_setxattr, mdt_rec_rename, mdt_rec_unlink) there are plenty of other padding fields that could be used if we need to add something to the wire protocol.  In a few of them (mdt_rec_create, mdt_rec_setattr) there are only 2 or 3 unused fields left, and in the case of mdt_rec_setattr there are no 64-bit fields at all.&lt;/p&gt;

&lt;p&gt;The question is what should we do at this point?  Should we hope that we don&apos;t need to add too many new fields to these structures?  Should we not add the atime_ns field, and just stick with one second resolution for atimes, since we don&apos;t even write the atime to disk more frequently than every 60s and keep an extra padding field for future use?  Should we work to add more space for padding fields to mdt_rec_reint in a compatible manner to 2.3 so that the use of the *time_ns fields in 2.4 will not consume all of the available space?&lt;/p&gt;</comment>
                            <comment id="41676" author="isami" created="Tue, 10 Jul 2012 18:54:47 +0000"  >&lt;p&gt;I think an initial mental exercise that would be good to perform in this case is to try and think of any fields that might need to be added in the future. If we can readily think of anything that would be handy or obvious to add (I can&apos;t, but given my inexperience with Lustre and high-performance computing in general I don&apos;t think I count), then it would imply that work should begin to add more space to mdt_rec_reint. Otherwise, if there are no extensions that may have to be made to mdt_rec_reint in the near future (as I suspect the case may be; prophecies about software are hard to tell), then I posit that at least removal of the atime_ns field is not the correct choice. While it is only updated on-disk every 60s, there is apparently a desire or need by some to have this kind of resolution for their timestamps, and at least having the nanosecond times could tell one of these highly-granular-time-needing users the most recent atime (down to the nanosecond) within that 60s between disk updates. Leaving atime out of the nanosecond club when mtime and ctime have nanoseconds also seems somewhat inconsistent.&lt;/p&gt;

&lt;p&gt;Since I tend favor compatability with future expansion, I would vote for working to add more space for padding fields into mdt_rec_reint in a manner compatible with 2.3. However, I don&apos;t know quite how much work that will entail; if it would be quite an undertaking, then it would seem prudent to instead leave the structures as-is and cross the bridge of expanding their size later when some fancy new feature requires it.&lt;/p&gt;</comment>
                            <comment id="43770" author="pjones" created="Sun, 26 Aug 2012 10:32:17 +0000"  >&lt;p&gt;Landed for 2.1.3 and 2.3&lt;/p&gt;</comment>
                            <comment id="43776" author="adilger" created="Sun, 26 Aug 2012 12:18:35 +0000"  >&lt;p&gt;Peter, just the patch to reserve the flag for this feature was landed, to avoid conflicts with other features being developed.  The actual code is not landed yet. &lt;/p&gt;</comment>
                            <comment id="46767" author="yong.fan" created="Fri, 19 Oct 2012 02:56:29 +0000"  >&lt;p&gt;We need to re-make the nanosecond timestamp patch against the variable sized LVB patch.&lt;/p&gt;</comment>
                            <comment id="56198" author="yong.fan" created="Fri, 12 Apr 2013 12:32:01 +0000"  >&lt;p&gt;Do we want to support it in Lustre-2.5 ?&lt;/p&gt;</comment>
                            <comment id="223944" author="artem_blagodarenko" created="Mon, 19 Mar 2018 15:30:20 +0000"  >&lt;p&gt;Are any plans exist currently to rewrite the patch against the variable sized LVB patch?&lt;/p&gt;</comment>
                            <comment id="223956" author="simmonsja" created="Mon, 19 Mar 2018 17:11:45 +0000"  >&lt;p&gt;This overlaps with the 64 bit time work I have been doing. Now that we support ktime_t this can easily be handled. Just as a note DO NOT use 32 bit fields for nanoseconds. This with not work after 2038 and due to that upstream will reject the patch.&lt;/p&gt;</comment>
                            <comment id="223966" author="artem_blagodarenko" created="Mon, 19 Mar 2018 17:49:59 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=simmonsja&quot; class=&quot;user-hover&quot; rel=&quot;simmonsja&quot;&gt;simmonsja&lt;/a&gt; thanks a lot for answer! I am going to look&#160;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9019&quot; title=&quot;Migrate lustre to standard 64 bit time kernel API&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9019&quot;&gt;&lt;del&gt;LU-9019&lt;/del&gt;&lt;/a&gt;&#160;now.&lt;/p&gt;</comment>
                            <comment id="223988" author="adilger" created="Mon, 19 Mar 2018 21:20:14 +0000"  >&lt;p&gt;James, I don&apos;t understand your comment.  Why would we ever want &lt;b&gt;more&lt;/b&gt; than a 32-bit field for nanoseconds?  Surely there can&apos;t be more than 2^32 nanoseconds in a second?  I understand that there can be leap seconds and other time adjustments that might result in over 10^9 nanoseconds in a second, but using a full 64-bit field for nanoseconds in the network protocol is just a waste of space.&lt;/p&gt;</comment>
                            <comment id="224026" author="simmonsja" created="Tue, 20 Mar 2018 14:18:37 +0000"  >&lt;p&gt;Oh I see. You want to basically transmit struct timespec64 over the wire. I was thinking in terms of nanoseconds since the epoch being transmitted.&lt;/p&gt;</comment>
                            <comment id="224027" author="artem_blagodarenko" created="Tue, 20 Mar 2018 14:23:02 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=simmonsja&quot; class=&quot;user-hover&quot; rel=&quot;simmonsja&quot;&gt;simmonsja&lt;/a&gt; So, do you think &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9019&quot; title=&quot;Migrate lustre to standard 64 bit time kernel API&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9019&quot;&gt;&lt;del&gt;LU-9019&lt;/del&gt;&lt;/a&gt; helps &quot;transmit struct timespec64 over the wire&quot; somehow?&lt;/p&gt;</comment>
                            <comment id="224040" author="adilger" created="Tue, 20 Mar 2018 16:07:17 +0000"  >&lt;p&gt;Hmm, when does  ns-since-epoch overflow?  Maybe 2 extra bits from the 2^30 ns in a 32-bit field... That would simplify the protocol change, and give us 4*140 years extra?&lt;/p&gt;</comment>
                            <comment id="224053" author="simmonsja" created="Tue, 20 Mar 2018 17:32:31 +0000"  >&lt;p&gt;2^32 -1 nanoseconds gives us&#160;4.294967295 seconds until overflow.&#160; So using just 32 bit nanoseconds time stamps are not very useful. As Atrem pointed out LNet already sends 64 bit time in seconds. We can use a 32 bit field to add nanosecond value along the already used seconds send. That is why I compared it to struct timespec64 = { time64_t tv_sec; long tv_nsec }&lt;/p&gt;

&lt;p&gt;Atrem all the needed infrastructure to support the linux kernel 64 bit time handling has been merged to the latest lustre. Just don&apos;t use the cfs time wrappers since they will be going away.&lt;/p&gt;</comment>
                            <comment id="224075" author="adilger" created="Tue, 20 Mar 2018 21:45:02 +0000"  >&lt;p&gt;Clearly I wasn&apos;t thinking of &lt;b&gt;only&lt;/b&gt; a __u32 nanoseconds timestamp, since that won&apos;t even last until the end of this comment, let alone to Y2038, but rather in addition to the existing 64-bit seconds field, as was discussed in the original description.&lt;/p&gt;

&lt;p&gt;On the other hand, passing the entire timestamp as a 64-bit nanosecond timestamp gives us roughly 292 years before &lt;em&gt;signed&lt;/em&gt; overflow, and could simplify the wire protocol change (no need to change the size of the fields) with the added complexity that there would need to be a connection flag to indicate if this client is sending timestamps in seconds or nanoseconds.  Potentially we could just assume any value larger than 2^32 is going to be nanoseconds (it is unlikely that any current Lustre releases would still be running in 20 years, and conversely 2^60 ns is needed to get to 2006, so they are very unlikely to conflict), but using an &lt;tt&gt;OBD_CONNECT_NANOSECONDS&lt;/tt&gt; flag is not &lt;em&gt;too&lt;/em&gt; hard.  The main complexity is that this flag would need to be checked in many places, possibly places where the client export is not easily available, so just making a decision based on the size of the timestamp is relatively safe, and the old seconds format could eventually be deprecated with little effort.&lt;/p&gt;</comment>
                            <comment id="395291" author="gerrit" created="Mon, 4 Dec 2023 04:34:19 +0000"  >&lt;p&gt;&quot;Feng Lei &amp;lt;flei@whamcloud.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/53313&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/53313&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1158&quot; title=&quot;nanosecond timestamp support for Lustre&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1158&quot;&gt;LU-1158&lt;/a&gt; general: support nanosecond timestamps&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 3dc43cd08efc8347cdceed3939be7c33256a081c&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="42994">LU-9019</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="57284">LU-12922</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="21237">LU-4050</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="51920">LU-10934</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="54892">LU-11971</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="15957">LUDOC-92</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                            <subtask id="15183">LU-1619</subtask>
                    </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|hzv61z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4515</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>3.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>