<div dir="ltr">+Raghavendra and Manoj  for their insights.</div><div class="gmail_extra"><br><div class="gmail_quote">On 6 April 2018 at 13:53, Artem Russakovskii <span dir="ltr">&lt;<a href="mailto:archon810@gmail.com" target="_blank">archon810@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I restarted rsync, and this has been sitting there for almost a minute, barely moved several bytes in that time:</div><div><br></div><div>2014/11/545b06baa3d98/com.<wbr>google.android.apps.<wbr>inputmethod.zhuyin-2.1.0.<wbr>79226761-armeabi-v7a-175-<wbr>minAPI14.apk</div><div>      6,389,760  45%   18.76kB/s    0:06:50  </div><div><br></div><div>I straced each of the 3 processes rsync created and saw this (note: every time there were several seconds of no output, I ctrl-C&#39;ed and detached from strace):</div><div><br></div><div><div>citadel:/home/archon810 # strace -p 16776</div><div>Process 16776 attached</div><div>select(6, [5], [4], [5], {45, 293510})  = 1 (out [4], left {44, 71342})</div><div>write(4, &quot;\4\200\0\7\3513&gt;\2755\360[\<wbr>372\317\337DZ\36\324\300o\235\<wbr>377\247\367\177%\37\226\352\<wbr>377\256\351&quot;..., 32776) = 32776</div><div>ioctl(1, TIOCGPGRP, [16776])            = 0</div><div>write(1, &quot;\r      4,292,608  30%   27.07kB/&quot;..., 46) = 46</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7\270\224\277\24\31\<wbr>247f\32\233x\t\276l\f-\254\r\<wbr>246\324\360\30\235\350\6\34\<wbr>304\230\242&quot;..., 32776) = 32776</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7\346_\363\36\33\<wbr>320}Dd\5_\327\250\237i\242?B\<wbr>276e\245\202Z\213\301[\25S&quot;...<wbr>, 32776) = 32776</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7\330\303\221\357\<wbr>225\37h\373\366X\306L\f&gt;\234\\<wbr>%n\253\266\5\372c\257&gt;V\366\<wbr>255&quot;..., 32776) = 32776</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7i\301\17u\224{/O\<wbr>213\330\33\317\272\246\221\22\<wbr>261|w\244\5\307|\21\373\v\<wbr>356k&quot;..., 32776) = 32776</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7\270\277\233\206n\<wbr>304:\362_\213~\356bm\5\350\<wbr>337\26\203\225\332\277\372\<wbr>275\247&lt;\307\22&quot;..., 32776) = 32776</div><div>read(3, &quot;\316\214\260\341:\263P\214\<wbr>373n\313\10\333 }\323\364Q\353\r\232d\204\257\<wbr>\Q\306/\277\253/\356&quot;..., 262144) = 262144</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7\314\233\274S08\<wbr>330\276\226\267\233\360rp\<wbr>210x)\320\0314\223\323\3335Y\<wbr>312\313\307&quot;..., 32776) = 32776</div><div>select(6, [5], [4], [5], {60, 0})       = 1 (out [4], left {59, 999998})</div><div>write(4, &quot;\4\200\0\7\316\214\260\341:\<wbr>263P\214\373n\313\10\333 }\323\364Q\353\r\232d\204\257\<wbr>\Q\306/&quot;..., 32776) = 32776</div><div>select(6, [5], [4], [5], {60, 0}^CProcess 16776 detached</div><div> &lt;detached ...&gt;</div><div>citadel:/home/archon810 # strace -p 16777</div><div>Process 16777 attached</div><div>select(4, [3], [], [3], {38, 210908}^CProcess 16777 detached</div><div> &lt;detached ...&gt;</div><div>citadel:/home/archon810 # strace -p 16776</div><div>Process 16776 attached</div><div>select(6, [5], [4], [5], {48, 295874}^CProcess 16776 detached</div><div> &lt;detached ...&gt;</div><div>citadel:/home/archon810 # strace -p 16778</div><div>Process 16778 attached</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999996})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7\3508\<wbr>343\204\207\255\4\212y\230&amp;&amp;\<wbr>372\30*\322\f\325v\335\230 \16v&quot;..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999998})</div><div>read(0, &quot;\373\30\2\2667\371\207)&quot;, 8)   = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7\6\213\<wbr>2223\233\36-\350,\303\0\234\7`<wbr>\317\276H\353u\217\275\316\<wbr>333@&quot;..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\375\33\367_\357\330\362\222&quot;<wbr>, 8) = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7`Nv\355\<wbr>275\336wzQ\365\264\364\20AX\<wbr>365DG\372\311\216\212\375\276&quot;<wbr>..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\374)\300\264}\21\226s&quot;, 8)    = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7\10:\v\<wbr>342O\305\374\5:Y+ \250\315\24\202J-@\256WC\320\<wbr>371&quot;..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\3023\24O\343y\312\204&quot;, 8)    = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7\27\22^\<wbr>n/S.\215\362T\f\257Q\207z\241~<wbr>B\3\32\32344\17&quot;..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999998})</div><div>read(0, &quot;\367P\222\262\224\17\25\250&quot;, 8) = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7FujR\213\<wbr>372\341E\232\360\n\257\323\<wbr>233&gt;\364\245\37\3\31\314\20\<wbr>206\362&quot;..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\203o\300\341\37\340(8&quot;, 8)    = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999998})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7n\211\<wbr>357\301\217\210\23\341$\342d8\<wbr>25N\2035[\260\1\206B\206!\2&quot;..<wbr>., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;|\222\223\336\201w\325\356&quot;, 8) = 8</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999999})</div><div>read(0, &quot;\0\200\0\0\4\200\0\7\220\<wbr>216Y\343\362\366\231\372?\<wbr>334N^\303\35\374cC;\vtx\231&lt;w&quot;<wbr>..., 32768) = 32768</div><div>select(1, [0], [], [0], {60, 0})        = 1 (in [0], left {59, 999998})</div><div>read(0, &quot;;k\v\314\21\375\3\274&quot;, 8)     = 8</div><div>write(3, &quot;\3508\343\204\207\255\4\212y\<wbr>230&amp;&amp;\372\30*\322\f\325v\335\<wbr>230 \16v\213O//\332\4\24\24&quot;..., 262144^C</div></div><div><br></div><div>I&#39;m really not sure what to make of this. In the time I wrote the above, the file still hasn&#39;t finished copying.</div><div><br></div><div><div>2014/11/545b06baa3d98/com.<wbr>google.android.apps.<wbr>inputmethod.zhuyin-2.1.0.<wbr>79226761-armeabi-v7a-175-<wbr>minAPI14.apk</div><div>     10,321,920  73%   33.31kB/s    0:01:53 </div></div></div><div class="gmail_extra"><span class=""><br clear="all"><div><div class="m_1816690262914557608gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><br>Sincerely,<br>Artem<br><br>--<br>Founder, <a href="http://www.androidpolice.com" target="_blank">Android Police</a>, <a href="http://www.apkmirror.com/" style="font-size:12.8000001907349px" target="_blank">APK Mirror</a><span style="font-size:12.8000001907349px">, Illogical Robot LLC</span></div><div dir="ltr"><a href="http://beerpla.net/" target="_blank">beerpla.net</a> | <a href="https://plus.google.com/+ArtemRussakovskii" target="_blank">+ArtemRussakovskii</a> | <a href="http://twitter.com/ArtemR" target="_blank">@ArtemR</a><br></div></div></div></div></div></div></div></div></div></div></div>
<br></span><div><div class="h5"><div class="gmail_quote">On Fri, Apr 6, 2018 at 1:12 AM, Artem Russakovskii <span dir="ltr">&lt;<a href="mailto:archon810@gmail.com" target="_blank">archon810@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi again,<div><br></div><div>I&#39;d like to expand on the performance issues and plead for help. Here&#39;s one case which shows these odd hiccups: <a href="https://i.imgur.com/CXBPjTK.gifv" target="_blank">https://i.imgur.com/C<wbr>XBPjTK.gifv</a>.<div><br></div><div>In this GIF where I switch 

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">back and forth</span>

between copy operations on 2 servers, I&#39;m copying a 10GB dir full of .apk and image files.</div><div><br></div><div>On server &quot;hive&quot; I&#39;m copying straight from the main disk to an attached volume block (xfs). As you can see, the transfers are relatively speedy and don&#39;t hiccup.</div><div>On server &quot;citadel&quot; I&#39;m copying the same set of data to a 4-replicate gluster which uses block storage as a brick. As you can see, performance is much worse, and there are frequent pauses for many seconds where nothing seems to be happening - just freezes.<br></div><div><br></div><div>All 4 servers have the same specs, and all of them have performance issues with gluster and no such issues when raw xfs block storage is used.</div><div><br></div><div>hive has long finished copying the data, while citadel is barely chugging along and is expected to take probably half an hour to an hour. I have over 1TB of data to migrate, at which point if we went live, I&#39;m not even sure gluster would be able to keep up instead of bringing the machines and services down.</div><div><br></div><div><br></div><div><br></div><div>Here&#39;s the cluster config, though it didn&#39;t seem to make any difference performance-wise before I applied the customizations vs after.</div><div><br></div><div><div>Volume Name: apkmirror_data1</div><div>Type: Replicate</div><div>Volume ID: 11ecee7e-d4f8-497a-9994-ceb144<wbr>d6841e</div><div>Status: Started</div><div>Snapshot Count: 0</div><div>Number of Bricks: 1 x 4 = 4</div><div>Transport-type: tcp</div><div>Bricks:</div><div>Brick1: nexus2:/mnt/nexus2_block1/apkm<wbr>irror_data1</div><div>Brick2: forge:/mnt/forge_block1/apkmir<wbr>ror_data1</div><div>Brick3: hive:/mnt/hive_block1/apkmirro<wbr>r_data1</div><div>Brick4: citadel:/mnt/citadel_block1/ap<wbr>kmirror_data1</div><div>Options Reconfigured:</div><div>cluster.quorum-count: 1</div><div>cluster.quorum-type: fixed</div><div>network.ping-timeout: 5</div><div>network.remote-dio: enable</div><div>performance.rda-cache-limit: 256MB</div><div>performance.readdir-ahead: on</div><div>performance.parallel-readdir: on</div><div>network.inode-lru-limit: 500000</div><div>performance.md-cache-timeout: 600</div><div>performance.cache-invalidation<wbr>: on</div><div>performance.stat-prefetch: on</div><div>features.cache-invalidation-ti<wbr>meout: 600</div><div>features.cache-invalidation: on</div><div>cluster.readdir-optimize: on</div><div>performance.io-thread-count: 32</div><div>server.event-threads: 4</div><div>client.event-threads: 4</div><div>performance.read-ahead: off</div><div>cluster.lookup-optimize: on</div><div>performance.cache-size: 1GB</div><div>cluster.self-heal-daemon: enable</div><div>transport.address-family: inet</div><div>nfs.disable: on</div><div>performance.client-io-threads: on</div></div><div><br></div><div><br></div><div>The mounts are done as follows in /etc/fstab:</div><div>/dev/disk/by-id/scsi-0Linode_V<wbr>olume_citadel_block1 /mnt/citadel_block1 xfs defaults 0 2<br></div><div>localhost:/apkmirror_data1 /mnt/apkmirror_data1 glusterfs defaults,_netdev 0 0<br></div><div><br></div><div>I&#39;m really not sure if direct-io-mode mount tweaks would do anything here, what the value should be set to, and what it is by default.</div><div><br></div><div>The OS is OpenSUSE 42.3, 64-bit. 80GB of RAM, 20 CPUs, hosted by Linode.</div><div><br></div><div>I&#39;d really appreciate any help in the matter. </div><div><br></div><div>Thank you.</div></div></div><div class="gmail_extra"><span><br clear="all"><div><div class="m_1816690262914557608m_3605953469601762469gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><br>Sincerely,<br>Artem<br><br>--<br>Founder, <a href="http://www.androidpolice.com" target="_blank">Android Police</a>, <a href="http://www.apkmirror.com/" style="font-size:12.8000001907349px" target="_blank">APK Mirror</a><span style="font-size:12.8000001907349px">, Illogical Robot LLC</span></div><div dir="ltr"><a href="http://beerpla.net/" target="_blank">beerpla.net</a> | <a href="https://plus.google.com/+ArtemRussakovskii" target="_blank">+ArtemRussakovskii</a> | <a href="http://twitter.com/ArtemR" target="_blank">@ArtemR</a><br></div></div></div></div></div></div></div></div></div></div></div>
<br></span><div><div class="m_1816690262914557608h5"><div class="gmail_quote">On Thu, Apr 5, 2018 at 11:13 PM, Artem Russakovskii <span dir="ltr">&lt;<a href="mailto:archon810@gmail.com" target="_blank">archon810@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>I&#39;m trying to squeeze performance out of gluster on 4 80GB RAM 20-CPU machines where Gluster runs on attached block storage (Linode) in (4 replicate bricks), and so far everything I tried results in sub-optimal performance.</div><div><br></div><div>There are many files - mostly images, several million - and many operations take minutes, copying multiple files (even if they&#39;re small) suddenly freezes up for seconds at a time, then continues, iostat frequently shows large r_await and w_awaits with 100% utilization for the attached block device, etc.</div><div><br></div><div>But anyway, there are many guides out there for small-file performance improvements, but more explanation is needed, and I think more tweaks should be possible.<br></div><div><br></div><div>My question today is about performance.cache-size. Is this a size of cache in RAM? If so, how do I view the current cache size to see if it gets full and I should increase its size? Is it advisable to bump it up if I have many tens of gigs of RAM free? </div><div><br></div><div><br></div><div><br></div><div>More generally, in the last 2 months since I first started working with gluster and set a production system live, I&#39;ve been feeling frustrated because Gluster has a lot of poorly-documented and confusing options. I really wish documentation could be improved with examples and better explanations.</div><div><br></div><div>Specifically, it&#39;d be absolutely amazing if the docs offered a strategy for setting each value and ways of determining more optimal values. For example, for performance.cache-size, if it said something like &quot;run command abc to see your current cache size, and if it&#39;s hurting, up it, but be aware that it&#39;s limited by RAM,&quot; it&#39;d be already a huge improvement to the docs. And so on with other options.</div><div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">The gluster team is quite helpful on this mailing list, but in a reactive rather than proactive way. Perhaps it&#39;s tunnel vision once you&#39;ve worked on a project for so long where less technical explanations and even proper documentation of options takes a back seat, but I encourage you to be more proactive about helping us understand and optimize Gluster.</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">Thank you.</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><br></div><div><div class="m_1816690262914557608m_3605953469601762469m_1420630595765814996gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Sincerely,<br>Artem<br><br>--<br>Founder, <a href="http://www.androidpolice.com" target="_blank">Android Police</a>, <a href="http://www.apkmirror.com/" style="font-size:12.8px" target="_blank">APK Mirror</a><span style="font-size:12.8px">, Illogical Robot LLC</span></div><div dir="ltr"><a href="http://beerpla.net/" target="_blank">beerpla.net</a> | <a href="https://plus.google.com/+ArtemRussakovskii" target="_blank">+ArtemRussakovskii</a> | <a href="http://twitter.com/ArtemR" target="_blank">@ArtemR</a><br></div></div></div></div></div></div></div></div></div></div></div>
</div></div>
</blockquote></div><br></div></div></div>
</blockquote></div><br></div></div></div>
<br>______________________________<wbr>_________________<br>
Gluster-users mailing list<br>
<a href="mailto:Gluster-users@gluster.org">Gluster-users@gluster.org</a><br>
<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></blockquote></div><br></div>