<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:44:18 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-4611] too many transaction credits (32279 &gt; 25600) </title>
                <link>https://jira.whamcloud.com/browse/LU-4611</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Getting odd quota errors with the following errors on the mdt. This is a newly created filesystem.&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;Filesystem volume name:   nbp9-MDT0000
Last mounted on:          /
Filesystem UUID:          4615f09e-ac04-44de-a4d1-b463f280d6da
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery flex_bg dirdata sparse_super large_file huge_file uninit_bg dir_nlink extra_isize quota
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              644251648
Block count:              322122752
Reserved block count:     0
Free blocks:              241421671
Free inodes:              644239829
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1024
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         32768
Inode blocks per group:   4096
Flex block group size:    16
Filesystem created:       Wed Feb  5 15:31:14 2014
Last mount time:          Mon Feb 10 08:45:54 2014
Last write time:          Mon Feb 10 08:45:54 2014
Mount count:              5
Maximum mount count:      -1
Last checked:             Wed Feb  5 15:31:14 2014
Check interval:           0 (&amp;lt;none&amp;gt;)
Lifetime writes:          307 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          512
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      f50d0c82-4edf-4e98-94ef-69ed3ad456d0
Journal backup:           inode blocks
User quota inode:         3
Group quota inode:        4
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;nbp9-mds /&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;/log # tunefs.lustre /dev/mapper/nbp9--vg-mdt9
checking &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; existing Lustre data: found
Reading CONFIGS/mountdata

   Read previous values:
Target:     nbp9-MDT0000
Index:      0
Lustre FS:  nbp9
Mount type: ldiskfs
Flags:      0x1
              (MDT )
Persistent mount opts: user_xattr,errors=remount-ro
Parameters: mgsnode=10.151.26.5@o2ib lov.stripesize=1048576 lov.stripecount=4
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;Feb 10 07:37:42 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:828:osd_trans_start()) nbp9-MDT0000: too many transaction credits (32279 &amp;gt; 25600)
Feb 10 07:37:42 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:835:osd_trans_start())   create: 170/4250, delete: 0/0, destroy: 0/0
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:840:osd_trans_start())   attr_set: 2/2, xattr_set: 172/2395
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:847:osd_trans_start())   write: 1523/21322, punch: 338/1352, quota 4/52
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:852:osd_trans_start())   insert: 171/2906, delete: 0/0
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:857:osd_trans_start())   ref_add: 0/0, ref_del: 0/0
Feb 10 07:37:43 nbp9-mds kernel: Pid: 5858, comm: mdt02_043
Feb 10 07:37:43 nbp9-mds kernel: 
Feb 10 07:37:43 nbp9-mds kernel: Call Trace:
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0514895&amp;gt;] libcfs_debug_dumpstack+0x55/0x80 [libcfs]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0cfc41e&amp;gt;] osd_trans_start+0x65e/0x680 [osd_ldiskfs]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0e68309&amp;gt;] lod_trans_start+0x1b9/0x250 [lod]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0773117&amp;gt;] mdd_trans_start+0x17/0x20 [mdd]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa076712a&amp;gt;] mdd_create+0x91a/0x1790 [mdd]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0d03937&amp;gt;] ? osd_xattr_get+0x97/0x2d0 [osd_ldiskfs]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0ddf2a2&amp;gt;] mdt_reint_open+0x1362/0x20e0 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa053185e&amp;gt;] ? upcall_cache_get_entry+0x28e/0x860 [libcfs]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa07fadcc&amp;gt;] ? lustre_msg_add_version+0x6c/0xc0 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0dc9981&amp;gt;] mdt_reint_rec+0x41/0xe0 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0daeb03&amp;gt;] mdt_reint_internal+0x4c3/0x780 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0daf090&amp;gt;] mdt_intent_reint+0x1f0/0x530 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0dacf3e&amp;gt;] mdt_intent_policy+0x39e/0x720 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa07b2831&amp;gt;] ldlm_lock_enqueue+0x361/0x8d0 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa07d91ef&amp;gt;] ldlm_handle_enqueue0+0x4ef/0x10b0 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0dad3c6&amp;gt;] mdt_enqueue+0x46/0xe0 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0db3ad7&amp;gt;] mdt_handle_common+0x647/0x16d0 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0ded615&amp;gt;] mds_regular_handle+0x15/0x20 [mdt]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa080b3c8&amp;gt;] ptlrpc_server_handle_request+0x398/0xc60 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa05155de&amp;gt;] ? cfs_timer_arm+0xe/0x10 [libcfs]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0526d9f&amp;gt;] ? lc_watchdog_touch+0x6f/0x170 [libcfs]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa0802729&amp;gt;] ? ptlrpc_wait_event+0xa9/0x290 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffff81055813&amp;gt;] ? __wake_up+0x53/0x70
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa080c75e&amp;gt;] ptlrpc_main+0xace/0x1700 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa080bc90&amp;gt;] ? ptlrpc_main+0x0/0x1700 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffff8100c0ca&amp;gt;] child_rip+0xa/0x20
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa080bc90&amp;gt;] ? ptlrpc_main+0x0/0x1700 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffffa080bc90&amp;gt;] ? ptlrpc_main+0x0/0x1700 [ptlrpc]
Feb 10 07:37:43 nbp9-mds kernel: [&amp;lt;ffffffff8100c0c0&amp;gt;] ? child_rip+0x0/0x20
Feb 10 07:37:43 nbp9-mds kernel: 
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:828:osd_trans_start()) nbp9-MDT0000: too many transaction credits (32279 &amp;gt; 25600)
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:835:osd_trans_start())   create: 170/4250, delete: 0/0, destroy: 0/0
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:840:osd_trans_start())   attr_set: 2/2, xattr_set: 172/2395
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:847:osd_trans_start())   write: 1523/21322, punch: 338/1352, quota 4/52
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:852:osd_trans_start())   insert: 171/2906, delete: 0/0
Feb 10 07:37:43 nbp9-mds kernel: Lustre: 5858:0:(osd_handler.c:857:osd_trans_start())   ref_add: 0/0, ref_del: 0/0
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:828:osd_trans_start()) nbp9-MDT0000: too many transaction credits (32279 &amp;gt; 25600)
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:828:osd_trans_start()) Skipped 2 previous similar messages
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:835:osd_trans_start())   create: 170/4250, delete: 0/0, destroy: 0/0
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:835:osd_trans_start()) Skipped 2 previous similar messages
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:840:osd_trans_start())   attr_set: 2/2, xattr_set: 172/2395
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:840:osd_trans_start()) Skipped 2 previous similar messages
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:847:osd_trans_start())   write: 1523/21322, punch: 338/1352, quota 4/52
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:847:osd_trans_start()) Skipped 2 previous similar messages
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:852:osd_trans_start())   insert: 171/2906, delete: 0/0
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:852:osd_trans_start()) Skipped 2 previous similar messages
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:857:osd_trans_start())   ref_add: 0/0, ref_del: 0/0
Feb 10 07:38:48 nbp9-mds kernel: Lustre: 5791:0:(osd_handler.c:857:osd_trans_start()) Skipped 2 previous similar messages
Feb 10 07:43:07 nbp9-mds kernel: Lustre: 5860:0:(osd_handler.c:828:osd_trans_start()) nbp9-MDT0000: too many transaction credits (32279 &amp;gt; 25600)
Feb 10 07:43:07 nbp9-mds kernel: Lustre: 5860:0:(osd_handler.c:835:osd_trans_start())   create: 170/4250, delete: 0/0, destroy: 0/0
Feb 10 07:43:07 nbp9-mds kernel: Lustre: 5860:0:(osd_handler.c:840:osd_trans_start())   attr_set: 2/2, xattr_set: 172/2395
Feb 10 07:43:07 nbp9-mds kernel: Lustre: 5860:0:(osd_handler.c:847:osd_trans_start())   write: 1523/21322, punch: 338/1352, quota 4/52
Feb 10 07:43:07 nbp9-mds kernel: Lustre: 5860:0:(osd_handler.c:852:osd_trans_start())   insert: 171/2906, delete: 0/0
Feb 10 07:43:07 nbp9-mds kernel: Lustre: 5860:0:(osd_handler.c:857:osd_trans_start())   ref_add: 0/0, ref_del: 0/0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="23098">LU-4611</key>
            <summary>too many transaction credits (32279 &gt; 25600) </summary>
                <type id="1" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="1" iconUrl="https://jira.whamcloud.com/images/icons/priorities/blocker.svg">Blocker</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="niu">Niu Yawei</assignee>
                                    <reporter username="mhanafi">Mahmoud Hanafi</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Feb 2014 18:26:49 +0000</created>
                <updated>Fri, 31 Oct 2014 10:15:09 +0000</updated>
                            <resolved>Wed, 26 Mar 2014 15:28:17 +0000</resolved>
                                    <version>Lustre 2.4.1</version>
                                    <fixVersion>Lustre 2.6.0</fixVersion>
                    <fixVersion>Lustre 2.5.2</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>17</watches>
                                                                            <comments>
                            <comment id="76757" author="pjones" created="Tue, 11 Feb 2014 18:44:08 +0000"  >&lt;p&gt;Niu&lt;/p&gt;

&lt;p&gt;Could you please look into this one?&lt;/p&gt;

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

&lt;p&gt;Peter&lt;/p&gt;</comment>
                            <comment id="76886" author="adilger" created="Wed, 12 Feb 2014 20:58:51 +0000"  >&lt;p&gt;There is definitely something wrong with the transaction accounting here.  We&apos;ve seen problems similar to this in the past, but this one is much more obvious to see the problems given the large number of stripes.  The significant impact of this incorrect accounting is that creating a single widely-striped file is consuming ALL of the available transaction credits and serializing the create until the transaction handle is released.&lt;/p&gt;

&lt;p&gt;An equivalent problem might be hit if the number of concurrent creates of single-stripe files exceeds the transaction limit as well.  That is entirely possible with the default MDT thread count of 256.&lt;/p&gt;

&lt;p&gt;Mahmoud, I&apos;m assuming that this is a create of a 170-stripe file on a filesystem with at least this number of OSTs?  The MDT journal size looks to be 400MB (journal transaction size limit is 1/4 of journal size, so journal size = 25600 blocks * 4 * 4kB).&lt;/p&gt;

&lt;p&gt;The numbers reported for the transaction accounting are &quot;number of operations/maximum blocks needed for that operation&quot;.&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;create: 170/4250, delete: 0/0, destroy: 0/0
attr_set: 2/2, xattr_set: 172/2395
write: 1523/21322, punch: 338/1352, quota 4/52
insert: 171/2906, delete: 0/0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I suspect that there is some confusion in the OSD layer when creating files for an OST vs an MDT.  Some of the operations don&apos;t make sense at all for create on an MDT.  We shouldn&apos;t need an xattr_set for every object (@ 13 blocks per xattr), 2x punch for every object (not sure why this is included at all), nor even a &quot;create&quot; for every OST object created.  It also doesn&apos;t make sense to have 8x write for every create, nor an insert for every stripe (@16 blocks per insert).&lt;/p&gt;

&lt;p&gt;What I would suggest to start is to add a temporary debug line to osd_trans_declare_op() so that it is more obvious when this is being called.&lt;/p&gt;

&lt;p&gt;I suspect part of the problem is a mixup in transaction declaration that is accounting for OST objects being created, even though this is happening on the MDT and any OSP credits for these operations should mostly be zero (except a small update in the lov_objids file in case of create).&lt;/p&gt;</comment>
                            <comment id="76902" author="mhanafi" created="Wed, 12 Feb 2014 21:59:15 +0000"  >&lt;p&gt;This filesystem has 240 OSTs. I think the user was doing trying to create a full stripe file/dir like this&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 -c -1 foo
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I am trying to duplicate the error.&lt;/p&gt;
</comment>
                            <comment id="76932" author="bzzz" created="Thu, 13 Feb 2014 03:39:38 +0000"  >&lt;p&gt;that is because of llog declarations involved mostly - we declare possible &quot;undo&quot; for the file just created. we probably can drop this entirely, need to think a bit. but we can&apos;t do this for unlink - we have to write to 170 llogs files. then every llog file is either old or new object (x2). for every object being created we set at least one EA (LMA). I&apos;m looking at write declarations as they consume most of credits.&lt;/p&gt;</comment>
                            <comment id="77057" author="niu" created="Fri, 14 Feb 2014 03:57:29 +0000"  >&lt;p&gt;Alex &amp;amp; Andreas, I don&apos;t see where so many write operations comes from, any idea?&lt;/p&gt;</comment>
                            <comment id="77058" author="adilger" created="Fri, 14 Feb 2014 05:55:50 +0000"  >&lt;p&gt;I was wondering where the setxattr operations would be needed, but the LMA FID on the unlink llog files makes sense. That said, the LMA xattr does not consume any space in the filesystem, since it is stored in the inode. I wonder if we can declare the setxattr more precisely, so that the OSD knows the xattr size and can account for it more appropriately?&lt;/p&gt;

&lt;p&gt;I suspect that a number if these operations can similarly be optimized with a bit more information. In particular, for file create I suspect each OSP will reserve a write to the lov_objids file, but those are always overwrites and should not consume more than a single credit.  Since there are normally many &lt;em&gt;u64 shared between OSPs in the same block, this could also be reduced significantly without any risk. At most ((max_ost_idx * sizeof(&lt;/em&gt;_u64) + blocksize - 1) / blocksize) blocks could be consumed for that file, not the thousands that are reserved today.&lt;/p&gt;

&lt;p&gt;Likewise, updates to the last_rcvd file typically only need a single block, and that could be known if the declare knows the offset and size of the write. &lt;/p&gt;</comment>
                            <comment id="77059" author="bzzz" created="Fri, 14 Feb 2014 05:57:08 +0000"  >&lt;p&gt;I checked with the code and observed this is due to extra declare_attr_set() in mdd_declare_object_initialize(). in Orion we tried to remove all extras and instead have all attributes set by dt_create(). this has changed over time, but we can fix that easily with something like:&lt;/p&gt;

&lt;p&gt;@@ -423,7 +423,7 @@ static int osp_declare_attr_set(const struct lu_env *env, struct dt_object *dt&lt;br/&gt;
                        RETURN(rc);&lt;br/&gt;
        }&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;if (o-&amp;gt;opo_new) {&lt;br/&gt;
+       if (o-&amp;gt;opo_new || fid_is_zero(lu_object_fid(&amp;amp;dt-&amp;gt;do_lu))) {&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;so that OSP just ignores setattr&apos;s on the new OST objects.&lt;/p&gt;

&lt;p&gt;this should help with create path, but won&apos;t with unlink as we have to write those 170 records.. here is another patch to improve this a bit:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/9258/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/9258/&lt;/a&gt;&lt;/p&gt;
</comment>
                            <comment id="77060" author="bzzz" created="Fri, 14 Feb 2014 06:06:48 +0000"  >&lt;p&gt;Andreas, have a look at &lt;a href=&quot;http://review.whamcloud.com/#/c/9258/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/9258/&lt;/a&gt; please, I did exactly like you suggested for LMA.&lt;br/&gt;
for files like last_rcvd/lov_objids I used optimistic (and cheap) way to recognize overwrite so drop credits required to allocate new blocks.&lt;br/&gt;
that said, we have to declare llogs in the create path, actually - in case of error we should be able to destroy all the stripes just created.&lt;br/&gt;
given we can&apos;t deal with gaps in the stream of new OST objects.&lt;/p&gt;</comment>
                            <comment id="77167" author="bzzz" created="Mon, 17 Feb 2014 07:52:28 +0000"  >&lt;p&gt;another way to save some credits can be truncate (dt_decalre_punch()) in llog_osd_write_blob(). it seem to be used by MGS which generates &quot;partial&quot; records and writes header/payload/tail separately - truncate is used to rollback partial changes. probably it&apos;s possible to teach MGS to use &quot;full&quot; records and get rid of truncate. with 7 stripes that would save us 56 credits on ldiskfs - 13% on unlink of 7-stripes file - decreasing credits from 436 to 380..&lt;/p&gt;

&lt;p&gt;that said, on 170 stripes this still gives us ~380/7*170=9180 credits. 3 concurrent transactions can easily cause early transaction close. with 25600 credits per transaction and 256 threads, we&apos;d need to decrease this down to 256 credits per thread/transactions. I don&apos;t think this is possible with the current design. something like a postponed iteration turning a big blob (essentially LOVEA) into a series of tiny transactions could help.&lt;/p&gt;</comment>
                            <comment id="77194" author="adilger" created="Mon, 17 Feb 2014 17:44:21 +0000"  >&lt;p&gt;I don&apos;t think we need to keep the full number of threads with the full transaction credits busy. There will always be some fraction of threads that are outside the transaction at a given time. That said, reducing the credits count by any amount will always help to avoid premature transaction commit and checkpoint. &lt;/p&gt;

&lt;p&gt;For the llog punch, it surprises me that we would need to reserve extra credits to truncate data just written?  At most any llog record could be 2 blocks long, so we shouldn&apos;t need more than {2*(bitmap + GDT to free), 1 block to overwrite} + inode = 5 blocks to truncate a single llog record. If we are already reserving this much for the write (assume yes?) why reserve extra for truncate?&lt;/p&gt;

&lt;p&gt;At one point, there were some explicit declares added to handle the error cases, but in the new accounting we also allow the &quot;undo&quot; updates for any declared update for error handling purpose.  I would hope that means we can get rid of the explicit punch calls entirely?  Is it possible to get rid of the other explicit undo declarations as well (ref_del, delete)?&lt;/p&gt;</comment>
                            <comment id="77195" author="bzzz" created="Mon, 17 Feb 2014 17:53:03 +0000"  >&lt;p&gt;from pure ldiskfs side, there is no point to declare punch for the block we write in the same transaction - we&apos;ll be modifying same bitmaps, gd, inode, etc. I&apos;m not absolutely sure, but probably that was added to satisfy operation-based verification for credits (that undo thing) - osd_punch() does expect OSD_OT_PUNCH to be declared and osd_write() doesn&apos;t declare that.&lt;/p&gt;

&lt;p&gt;also, I tend to think that&apos;d break ZFS with full debug enabled, but it&apos;s broken anyway.&lt;/p&gt;</comment>
                            <comment id="80299" author="jlevi" created="Wed, 26 Mar 2014 15:28:17 +0000"  >&lt;p&gt;Patch landed to Master. Please reopen ticket if more work is needed.&lt;/p&gt;</comment>
                            <comment id="80320" author="jaylan" created="Wed, 26 Mar 2014 17:58:38 +0000"  >&lt;p&gt;A port to b2_4 is appreciated. Thanks!&lt;/p&gt;</comment>
                            <comment id="80353" author="niu" created="Thu, 27 Mar 2014 05:27:24 +0000"  >&lt;p&gt;backport to b2_4: &lt;a href=&quot;http://review.whamcloud.com/9807&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/9807&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="84653" author="bogl" created="Wed, 21 May 2014 20:48:58 +0000"  >&lt;p&gt;backport to b2_5:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/10407&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/10407&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="22728">LU-4479</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="23823">LU-4798</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="22757">LU-4494</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="21750">LU-4193</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|hzwesn:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>12616</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>