<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 02:42:07 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-11234] Choose lustre pool to place file&#8217;s objects by user-defined policies</title>
                <link>https://jira.whamcloud.com/browse/LU-11234</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;&lt;b&gt;Choose lustre pool to place file&#8217;s objects by user-defined policies&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This feature fits to heterogeneous lustre environment where lustre ost targets consist of different devices&#65288;such as disk&#65292;ssd&#65289;and are maybe with different configures (Such as osd-zfs, osd-ldiskfs, RAID1, RAID6).&#160; This feature can help users to make more fine-grained data placement.&lt;/p&gt;

&lt;p&gt;When using this feature, lustre ost targets are firstly divided into many pools. Every pool is composed of homogeneous targets. That means, targets in one pools are with the same type of devices and with the same configure. Then, users define file create rules to put files into different pools. When the rules are enabled, file create operations will search the users-defined rules, find the corresponding pool, and then allocate data objects on the choosed pool.&#160;&lt;/p&gt;

&lt;p&gt;We use lustre source compiling to illustrate this feature.&lt;/p&gt;

&lt;p&gt;When building the lustre source code, files are composed of the following types&lt;/p&gt;

&lt;p&gt;1. Source code with filename extension .c or .h and configure files to present build rules, which is usually without any filename extension.&lt;/p&gt;

&lt;p&gt;2. temporary files that with filename extension .o&lt;/p&gt;

&lt;p&gt;3. kernel modules and other final files.&lt;/p&gt;

&lt;p&gt;For the above 3 types, 1, 3 need more reliability than I/O performance&#65292;while 2 need more IO performance than reliability.&lt;/p&gt;

&lt;p&gt;Firstly, build two pools, one ( eg. named pool_src )use disk array with RAID1 configuration to provide high reliability. The other (eg. named pool_temp) use SSD with RAID0 to provide high IO performance.&lt;/p&gt;

&lt;p&gt;Secondly, define the following pool policy:&lt;/p&gt;

&lt;p&gt;&#160;&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;
lfs setstripe -p pool_src lustre-source
lctl set_param lod.*.policies=&#8220;add post=\&#8220;o\&#8221; pool_temp&#8221;&#160; # file with post extortion .o will put in pool_temp
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;When the policies are applied, filename with extortion .o will be put in pool_temp, while the others will be put in pool_src.&#160;&lt;/p&gt;

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

&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="52946">LU-11234</key>
            <summary>Choose lustre pool to place file&#8217;s objects by user-defined policies</summary>
                <type id="2" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11311&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="1" iconUrl="https://jira.whamcloud.com/images/icons/statuses/open.png" description="The issue is open and ready for the assignee to start work on it.">Open</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="Teddy">Teddy</assignee>
                                    <reporter username="Teddy">Teddy</reporter>
                        <labels>
                            <label>TS</label>
                    </labels>
                <created>Sun, 12 Aug 2018 04:38:39 +0000</created>
                <updated>Fri, 19 Jun 2020 19:27:45 +0000</updated>
                                                                                <due></due>
                            <votes>1</votes>
                                    <watches>11</watches>
                                                                            <comments>
                            <comment id="231840" author="adilger" created="Sun, 12 Aug 2018 07:39:39 +0000"  >&lt;p&gt;When you write &quot;user&quot; here, you really mean &quot;administrator&quot;, since it typically is not possible for a regular user to login on the MGS to set a policy. Also, it appears that this policy would be global to all users. &lt;/p&gt;

&lt;p&gt;I think this proposal is a very useful one, we&apos;ve been discussing it for years, but nobody has been working on it  It would be nice if we could work out a mechanism for regular users to be able to create OST pools by themselves, and have per-user or per-directory policies for file creation. With the patch &lt;a href=&quot;https://review.whamcloud.com/32814&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/32814&lt;/a&gt; &quot;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11146&quot; title=&quot;setstripe for specific osts are broken&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11146&quot;&gt;&lt;del&gt;LU-11146&lt;/del&gt;&lt;/a&gt; lustre: fix setstripe for specific osts upon dir&quot; it is possible to set a directory default layout that selects specific OSTs, which is almost like a pool. The main difference is that the specific-OST layout currently requires the file to be striped over all OSTs, but it would be nice to allow striping overconly a subset of OSTs. &lt;/p&gt;

&lt;p&gt;The patch &lt;a href=&quot;https://review.whamcloud.com/28972&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/28972&lt;/a&gt; &quot;UL-9982 lustre: Clients striping from mapped FID in nodemap&quot; allows specifying an arbitrary source FID for the default layout for files in a subdirectory mount.&lt;/p&gt;

&lt;p&gt;I think it would be possible to combine these ideas by having a &lt;tt&gt;$HOME/.lustre/defaults&lt;/tt&gt; directory (nothing special there, just a regular directory) that users could create policies in  or on (eg. different layouts for filename extensions), and then the $HOME/.lustre directory FID can be set as the default layout for all user directories if they want to apply this policy to their directories (it would be inherited by subdirectories automatically, or fetched from the fs root if needed. .&lt;/p&gt;

&lt;p&gt;Since this is not a configuration parameter, the user does not need to have any special login permisssion. Since thos layout is explicitly applied to user directories (there can be arbitrarily many different layouts for a user, they just need to supply the directory FID). &lt;/p&gt;
</comment>
                            <comment id="232178" author="teddy" created="Sat, 18 Aug 2018 02:09:31 +0000"  >&lt;p&gt;In the description, &#8216;user&#8217; means &#8216;administrator&#8217;: application users are only allowed to propose requirements for rules, but applying the rules to the system should be allowed to&#160;execute&#160;by authoritative administrator. Otherwise, if application users can define and apply rules by themselves, most will prefer to put their data on the faster devices. Besides, applying the rules by application users will increase the rate of misconfiguration.&lt;/p&gt;

&lt;p&gt;Indeed, I think, the rules of this feature deserves more careful designs. We can define rule conjunction, just like rules in TBF.&#160; For example, rules with UID and filename extension will only allow control file&#8217;s layout of users with UID( in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9658&quot; title=&quot;Add QoS for uid and gid in NRS-TBF&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9658&quot;&gt;&lt;del&gt;LU-9658&lt;/del&gt;&lt;/a&gt;, we have already add uid and gid in creat RPC).&lt;/p&gt;

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

&lt;p&gt;I&apos;ll upload the basic patch that only supports filename extension rule for review.&lt;/p&gt;</comment>
                            <comment id="232190" author="adilger" created="Sat, 18 Aug 2018 03:04:24 +0000"  >&lt;p&gt;There is nothing preventing users from allocating all of their files on the flash OSTs today, they can just use &quot;&lt;tt&gt;lfs setstripe -o idx,idx,idx&lt;/tt&gt;&quot; directly if they want. We need to have OST quotas to prevent users from using these OSTs. &lt;/p&gt;

&lt;p&gt;In that respect, allowing users some mechanism to specify &quot;pools&quot; or filename extension policies doesn&apos;t affect this, but could make like a lot easier for some applications and users.&lt;/p&gt;

&lt;p&gt;One simple way to enable this would be to allow &quot;&lt;tt&gt;lfs setstripe -o&lt;/tt&gt;&quot; to specify a smaller number of stripes than the OSTs listed. This would be treated the same way as a stripe count in a pool - the specified number of stripes is allocated to the file from the listed OSTs.&lt;/p&gt;

&lt;p&gt;After  that point, it would be possible for users to create their own pools, which are just named lists of OSTs, and &quot;&lt;tt&gt;lfs setstripe&lt;/tt&gt;&quot; can just get those lists from &lt;tt&gt;&lt;sub&gt;/.lustrerc&lt;/tt&gt; or similar. It is a bit more tricky if the files are not being created via &lt;tt&gt;lfs&lt;/tt&gt;, but eg. we could store the FID for the user &lt;tt&gt;&lt;/sub&gt;/.lustrerc&lt;/tt&gt; in the LOV EA so that the MDS can access it. &lt;/p&gt;</comment>
                            <comment id="233197" author="gerrit" created="Sat, 8 Sep 2018 05:55:20 +0000"  >&lt;p&gt;Teddy Zheng (jjkky@yahoo.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/33126&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/33126&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11234&quot; title=&quot;Choose lustre pool to place file&#8217;s objects by user-defined policies&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11234&quot;&gt;LU-11234&lt;/a&gt; lod: Choose pools to place file&apos;s objects by filename extension policies&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 5615ef1ee1db30e362e61ecc29add9907637a1e2&lt;/p&gt;</comment>
                            <comment id="235885" author="lixi_wc" created="Tue, 30 Oct 2018 07:22:11 +0000"  >&lt;p&gt;As discussed with Teddy and Ihara, we want to implement something like:&lt;/p&gt;

&lt;p&gt;1) Use Jobid/UID/GID to define expressions of rules (Just like TBF rules).&lt;/p&gt;

&lt;p&gt;2) Each rule has an operation, the current operation is simple, just to create the file in a dedicated OST pool. That means, the rule is a tuple of (expression, OST pool name)&lt;/p&gt;

&lt;p&gt;3) Define a list of rules with order. The file creation process will walk through this list, trying to match the first ones of them. if matches, the file will be created on the defined OST pool.&lt;/p&gt;

&lt;p&gt;4) The rule can be defined through /proc entry, just like what did for TBF.&lt;/p&gt;

&lt;p&gt;A lot of codes can be shared by TBF and this new feature. Maybe we can put some the functions into shared library rather than copy and paste.&lt;/p&gt;</comment>
                            <comment id="242468" author="adilger" created="Thu, 21 Feb 2019 19:52:38 +0000"  >&lt;p&gt;Rather than make all of these policies global, they should be implemented as part of a nodemap, even if it is the&quot; default&quot; nodemap to start with. This will allow different policies to be implemented for different clients if needed (eg. prefer local OST pool for clients connected over WAN).&lt;/p&gt;</comment>
                            <comment id="245265" author="adilger" created="Thu, 4 Apr 2019 20:36:48 +0000"  >&lt;p&gt;Instead of specifying &lt;em&gt;just&lt;/em&gt; the OST pool for files matching the policy, it would be much more useful to base this on patch &lt;a href=&quot;https://review.whamcloud.com/28972&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/28972&lt;/a&gt; &quot;&lt;tt&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9982&quot; title=&quot;Clients striping from mapped FID in nodemap&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9982&quot;&gt;LU-9982&lt;/a&gt; lustre: Clients striping from mapped FID in nodemap&lt;/tt&gt;&quot; and allow specifying the FID that is the source for the file layout.  That allows specifying a pool, but more importantly allows specifying the rest of the layout (stripe count, PFL components with multiple different pools, FLR mirroring, etc.).  Getting patch 28972 landed would itself be useful in any case for nodemap/fileset/isolation purposes.  Once that patch lands, I think the changes to 33126 would be relatively straight forward, adding a &lt;tt&gt;fid=&lt;span class=&quot;error&quot;&gt;&amp;#91;SEQ:OID:VER&amp;#93;&lt;/span&gt;&lt;/tt&gt; option to the matching rules.&lt;/p&gt;</comment>
                            <comment id="249639" author="lixi_wc" created="Fri, 21 Jun 2019 03:45:46 +0000"  >&lt;p&gt;Another requirement collected from real user is:&lt;/p&gt;

&lt;p&gt;People would like to allocate the files to different pools according to the range of the IDs. For example, project ID from 0 to 1000, to pool 0, pool ID from 1000 to 2000, to pool 1. We need support rule like:&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;lctl set_param lod.*.layout_policy=\ &quot;add rule_vip_users pool=pool1 uid={[0-000]}&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This would benefit the setting of TBF rule too, since we can&apos;t set a rule that list all 1000 IDs.&lt;/p&gt;</comment>
                            <comment id="273330" author="nrutman" created="Fri, 19 Jun 2020 16:53:50 +0000"  >&lt;p&gt;see also &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-10345&quot; title=&quot;allow specifying file layout by filename extension&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-10345&quot;&gt;LU-10345&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10120">
                    <name>Blocker</name>
                                            <outwardlinks description="is blocking">
                                                        </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="48297">LU-9982</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="49629">LU-10345</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i000kn:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>