<div dir="ltr">Hi,<div><br></div><div class="gmail_extra"><div class="gmail_quote">On Thu, Nov 9, 2017 at 7:47 PM,  <span dir="ltr">&lt;<a href="mailto:ingard@jotta.no" target="_blank">ingard@jotta.no</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Someone on the #gluster-users irc channel said the following :<br>
&quot;Decreasing features.locks-revocation-max-<wbr>blocked to an absurdly low number is letting our distributed-disperse set heal again.&quot;<br>
<br>
Is this something to concider? Does anyone else have experience with tweaking this to speed up healing?<br></blockquote><div><br></div><div>What that option does is to release the currently granted lock for a file when a new lock request comes and there are more than features-revocation-max-blocked locks already pending. The real effect of this is that all pending requests can proceed, but the client that was using the old granted lock will continue working without knowing that it doesn&#39;t have the lock, meaning that everything it does can cause corruption. This option was created to avoid that a single bad client could block the entire cluster, but if you set this option to a really small value compared to your workload, it will probably cause unwanted effects even or perfectly healthy and well-behaving clients.</div><div><br></div><div>This option shouldn&#39;t be used unless you are very sure of what your users are doing with the volume and how, and you know the implications of this option. Otherwise this is a good candidate to have data corruption.</div><div><br></div><div>Anyway, if setting this option improves speed, it means that there&#39;s a heavy lock usage. It should be determined if that usage is normal or not. For example, disperse needs to take locks for reads and writes. If a file is being simultaneously accessed by multiple clients, the lock usage will be high because of contention between clients, but normal. Forcing the release of some locks while another client is trying to write (for example self-heal), will probably cause read errors to other clients.</div><div><br></div><div>If a real problem is detected, it&#39;s better to file a bug with as much information as you can give to try to resolve the problem (if there&#39;s a real problem) or to try to improve performance (if everything works fine but slow).</div><div><br></div><div>Xavi</div><div><br></div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Sent from my iPhone<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; On 9 Nov 2017, at 18:00, Serkan Ă‡oban &lt;<a href="mailto:cobanserkan@gmail.com">cobanserkan@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; You can set disperse.shd-max-threads to 2 or 4 in order to make heal<br>
&gt; faster. This makes my heal times 2-3x faster.<br>
&gt; Also you can play with disperse.self-heal-window-size to read more<br>
&gt; bytes at one time, but i did not test it.<br>
&gt;<br>
&gt;&gt; On Thu, Nov 9, 2017 at 4:47 PM, Xavi Hernandez &lt;<a href="mailto:jahernan@redhat.com">jahernan@redhat.com</a>&gt; wrote:<br>
&gt;&gt; Hi Rolf,<br>
&gt;&gt;<br>
&gt;&gt; answers follow inline...<br>
&gt;&gt;<br>
&gt;&gt;&gt; On Thu, Nov 9, 2017 at 3:20 PM, Rolf Larsen &lt;<a href="mailto:rolf@jotta.no">rolf@jotta.no</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; We ran a test on GlusterFS 3.12.1 with erasurecoded volumes 8+2 with 10<br>
&gt;&gt;&gt; bricks (default config,tested with 100gb, 200gb, 400gb bricksizes,10gbit<br>
&gt;&gt;&gt; nics)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 1.<br>
&gt;&gt;&gt; Tests show that healing takes about double the time on healing 200gb vs<br>
&gt;&gt;&gt; 100, and abit under the double on 400gb vs 200gb bricksizes. Is this<br>
&gt;&gt;&gt; expected behaviour? In light of this would make 6,4 tb bricksizes use ~ 377<br>
&gt;&gt;&gt; hours to heal.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 100gb brick heal: 18 hours (8+2)<br>
&gt;&gt;&gt; 200gb brick heal: 37 hours (8+2) +205%<br>
&gt;&gt;&gt; 400gb brick heal: 59 hours (8+2) +159%<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Each 100gb is filled with 80000 x 10mb files (200gb is 2x and 400gb is 4x)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; If I understand it correctly, you are storing 80.000 files of 10 MB each<br>
&gt;&gt; when you are using 100GB bricks, but you double this value for 200GB bricks<br>
&gt;&gt; (160.000 files of 10MB each). And for 400GB bricks you create 320.000 files.<br>
&gt;&gt; Have I understood it correctly ?<br>
&gt;&gt;<br>
&gt;&gt; If this is true, it&#39;s normal that twice the space requires approximately<br>
&gt;&gt; twice the heal time. The healing time depends on the contents of the brick,<br>
&gt;&gt; not brick size. The same amount of files should take the same healing time,<br>
&gt;&gt; whatever the brick size is.<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2.<br>
&gt;&gt;&gt; Are there any possibility to show the progress of a heal? As per now we<br>
&gt;&gt;&gt; run gluster volume heal volume info, but this exit&#39;s when a brick is done<br>
&gt;&gt;&gt; healing and when we run heal info again the command contiunes showing gfid&#39;s<br>
&gt;&gt;&gt; until the brick is done again. This gives quite a bad picture of the status<br>
&gt;&gt;&gt; of a heal.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; The output of &#39;gluster volume heal &lt;volname&gt; info&#39; shows the list of files<br>
&gt;&gt; pending to be healed on each brick. The heal is complete when the list is<br>
&gt;&gt; empty. A faster alternative if you don&#39;t want to see the whole list of files<br>
&gt;&gt; is to use &#39;gluster volume heal &lt;volname&gt; statistics heal-count&#39;. This will<br>
&gt;&gt; only show the number of pending files on each brick.<br>
&gt;&gt;<br>
&gt;&gt; I don&#39;t know any other way to track progress of self-heal.<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 3.<br>
&gt;&gt;&gt; What kind of config tweaks is recommended for these kind of EC volumes?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; I usually use the following values (specific only for ec):<br>
&gt;&gt;<br>
&gt;&gt; client.event-threads 4<br>
&gt;&gt; server.event-threads 4<br>
&gt;&gt; performance.client-io-threads on<br>
&gt;&gt;<br>
&gt;&gt; Regards,<br>
&gt;&gt;<br>
&gt;&gt; Xavi<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; $ gluster volume info<br>
&gt;&gt;&gt; Volume Name: test-ec-100g<br>
&gt;&gt;&gt; Type: Disperse<br>
&gt;&gt;&gt; Volume ID: 0254281d-2f6e-4ac4-a773-<wbr>2b8e0eb8ab27<br>
&gt;&gt;&gt; Status: Started<br>
&gt;&gt;&gt; Snapshot Count: 0<br>
&gt;&gt;&gt; Number of Bricks: 1 x (8 + 2) = 10<br>
&gt;&gt;&gt; Transport-type: tcp<br>
&gt;&gt;&gt; Bricks:<br>
&gt;&gt;&gt; Brick1: dn-304:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick2: dn-305:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick3: dn-306:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick4: dn-307:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick5: dn-308:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick6: dn-309:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick7: dn-310:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick8: dn-311:/mnt/test-ec-2/brick<br>
&gt;&gt;&gt; Brick9: dn-312:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Brick10: dn-313:/mnt/test-ec-100/brick<br>
&gt;&gt;&gt; Options Reconfigured:<br>
&gt;&gt;&gt; nfs.disable: on<br>
&gt;&gt;&gt; transport.address-family: inet<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Volume Name: test-ec-200<br>
&gt;&gt;&gt; Type: Disperse<br>
&gt;&gt;&gt; Volume ID: 2ce23e32-7086-49c5-bf0c-<wbr>7612fd7b3d5d<br>
&gt;&gt;&gt; Status: Started<br>
&gt;&gt;&gt; Snapshot Count: 0<br>
&gt;&gt;&gt; Number of Bricks: 1 x (8 + 2) = 10<br>
&gt;&gt;&gt; Transport-type: tcp<br>
&gt;&gt;&gt; Bricks:<br>
&gt;&gt;&gt; Brick1: dn-304:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick2: dn-305:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick3: dn-306:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick4: dn-307:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick5: dn-308:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick6: dn-309:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick7: dn-310:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick8: dn-311:/mnt/test-ec-200_2/<wbr>brick<br>
&gt;&gt;&gt; Brick9: dn-312:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Brick10: dn-313:/mnt/test-ec-200/brick<br>
&gt;&gt;&gt; Options Reconfigured:<br>
&gt;&gt;&gt; nfs.disable: on<br>
&gt;&gt;&gt; transport.address-family: inet<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Volume Name: test-ec-400<br>
&gt;&gt;&gt; Type: Disperse<br>
&gt;&gt;&gt; Volume ID: fe00713a-7099-404d-ba52-<wbr>46c6b4b6ecc0<br>
&gt;&gt;&gt; Status: Started<br>
&gt;&gt;&gt; Snapshot Count: 0<br>
&gt;&gt;&gt; Number of Bricks: 1 x (8 + 2) = 10<br>
&gt;&gt;&gt; Transport-type: tcp<br>
&gt;&gt;&gt; Bricks:<br>
&gt;&gt;&gt; Brick1: dn-304:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick2: dn-305:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick3: dn-306:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick4: dn-307:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick5: dn-308:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick6: dn-309:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick7: dn-310:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick8: dn-311:/mnt/test-ec-400_2/<wbr>brick<br>
&gt;&gt;&gt; Brick9: dn-312:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Brick10: dn-313:/mnt/test-ec-400/brick<br>
&gt;&gt;&gt; Options Reconfigured:<br>
&gt;&gt;&gt; nfs.disable: on<br>
&gt;&gt;&gt; transport.address-family: inet<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Regards<br>
&gt;&gt;&gt; Rolf Arne Larsen<br>
&gt;&gt;&gt; Ops Engineer<br>
&gt;&gt;&gt; <a href="mailto:rolf@jottacloud.com">rolf@jottacloud.com</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt; Gluster-users mailing list<br>
&gt;&gt;&gt; <a href="mailto:Gluster-users@gluster.org">Gluster-users@gluster.org</a><br>
&gt;&gt;&gt; <a href="http://lists.gluster.org/mailman/listinfo/gluster-users" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-users</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt; Gluster-users mailing list<br>
&gt;&gt; <a href="mailto:Gluster-users@gluster.org">Gluster-users@gluster.org</a><br>
&gt;&gt; <a href="http://lists.gluster.org/mailman/listinfo/gluster-users" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-users</a><br>
&gt; ______________________________<wbr>_________________<br>
&gt; Gluster-users mailing list<br>
&gt; <a href="mailto:Gluster-users@gluster.org">Gluster-users@gluster.org</a><br>
&gt; <a href="http://lists.gluster.org/mailman/listinfo/gluster-users" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-users</a><br>
</div></div></blockquote></div><br></div></div>