<div dir="ltr">Another parallel effort could be trying to configure the number of inodes/dentries cached by kernel VFS using /proc/sys/vm interface.<br><br><pre>==============================================================

vfs_cache_pressure
------------------

This percentage value controls the tendency of the kernel to reclaim
the memory which is used for caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a &quot;fair&quot; rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

Increasing vfs_cache_pressure significantly beyond 100 may have negative
performance impact. Reclaim code needs to take various locks to find freeable
directory and inode objects. With vfs_cache_pressure=1000, it will look for
ten times more freeable objects than there are.<br><br></pre><pre>Also we&#39;ve an article for sysadmins which has a section:<br><br>&lt;quote&gt;<br></pre><pre>With GlusterFS, many users with a lot of storage and many small files
easily end up using a lot of RAM on the server side due to
&#39;inode/dentry&#39; caching, leading to decreased performance when the kernel
keeps crawling through data-structures on a 40GB RAM system. Changing
this value higher than 100 has helped many users to achieve fair caching
and more responsiveness from the kernel.<br><br>&lt;/quote&gt;<br><br></pre><pre>Complete article can be found at:<br><a href="https://gluster.readthedocs.io/en/latest/Administrator%20Guide/Linux%20Kernel%20Tuning/">https://gluster.readthedocs.io/en/latest/Administrator%20Guide/Linux%20Kernel%20Tuning/</a><br><br></pre><pre>regards,<br></pre><pre></pre></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 5, 2017 at 5:20 PM, Raghavendra Gowdappa <span dir="ltr">&lt;<a href="mailto:rgowdapp@redhat.com" target="_blank">rgowdapp@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">+gluster-devel<br>
<br>
Ashish just spoke to me about need of GC of inodes due to some state in inode that is being proposed in EC. Hence adding more people to conversation.<br>
<br>
&gt; &gt; On 4 September 2017 at 12:34, Csaba Henk &lt;<a href="mailto:chenk@redhat.com">chenk@redhat.com</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; &gt; I don&#39;t know, depends on how sophisticated GC we need/want/can get by. I<br>
&gt; &gt; &gt; guess the complexity will be inherent, ie. that of the algorithm chosen<br>
&gt; &gt; &gt; and<br>
&gt; &gt; &gt; how we address concurrency &amp; performance impacts, but once that&#39;s got<br>
&gt; &gt; &gt; right<br>
&gt; &gt; &gt; the other aspects of implementation won&#39;t be hard.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Eg. would it be good just to maintain a simple LRU list?<br>
&gt; &gt; &gt;<br>
&gt;<br>
&gt; Yes. I was also thinking of leveraging lru list. We can invalidate first &quot;n&quot;<br>
&gt; inodes from lru list of fuse inode table.<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; That might work for starters.<br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Csaba<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On Mon, Sep 4, 2017 at 8:48 AM, Nithya Balachandran &lt;<a href="mailto:nbalacha@redhat.com">nbalacha@redhat.com</a>&gt;<br>
&gt; &gt; &gt; wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; On 4 September 2017 at 12:14, Csaba Henk &lt;<a href="mailto:chenk@redhat.com">chenk@redhat.com</a>&gt; wrote:<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt; Basically how I see the fuse invalidate calls as rescuers of sanity.<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt; Normally, when you have lot of certain kind of stuff that tends to<br>
&gt; &gt; &gt;&gt;&gt; accumulate, the immediate thought is: let&#39;s set up some garbage<br>
&gt; &gt; &gt;&gt;&gt; collection<br>
&gt; &gt; &gt;&gt;&gt; mechanism, that will take care of keeping the accumulation at bay. But<br>
&gt; &gt; &gt;&gt;&gt; that&#39;s what doesn&#39;t work with inodes in a naive way, as they are<br>
&gt; &gt; &gt;&gt;&gt; referenced<br>
&gt; &gt; &gt;&gt;&gt; from kernel, so we have to keep them around until kernel tells us it&#39;s<br>
&gt; &gt; &gt;&gt;&gt; giving up its reference. However, with the fuse invalidate calls we can<br>
&gt; &gt; &gt;&gt;&gt; take the initiative and instruct the kernel: &quot;hey, kernel, give up your<br>
&gt; &gt; &gt;&gt;&gt; references to this thing!&quot;<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt; So we are actually free to implement any kind of inode GC in glusterfs,<br>
&gt; &gt; &gt;&gt;&gt; just have to take care to add the proper callback to fuse_invalidate_*<br>
&gt; &gt; &gt;&gt;&gt; and<br>
&gt; &gt; &gt;&gt;&gt; we are good to go.<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; That sounds good and something we need to do in the near future. Is this<br>
&gt; &gt; &gt;&gt; something that is easy to implement?<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt; Csaba<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt; On Mon, Sep 4, 2017 at 7:00 AM, Nithya Balachandran<br>
&gt; &gt; &gt;&gt;&gt; &lt;<a href="mailto:nbalacha@redhat.com">nbalacha@redhat.com</a><br>
&gt; &gt; &gt;&gt;&gt; &gt; wrote:<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt; On 4 September 2017 at 10:25, Raghavendra Gowdappa<br>
&gt; &gt; &gt;&gt;&gt;&gt; &lt;<a href="mailto:rgowdapp@redhat.com">rgowdapp@redhat.com</a><br>
&gt; &gt; &gt;&gt;&gt;&gt; &gt; wrote:<br>
&gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; ----- Original Message -----<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; From: &quot;Nithya Balachandran&quot; &lt;<a href="mailto:nbalacha@redhat.com">nbalacha@redhat.com</a>&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; Sent: Monday, September 4, 2017 10:19:37 AM<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; Subject: Fuse mounts and inodes<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; Hi,<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; One of the reasons for the memory consumption in gluster fuse<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; mounts<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; is the<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; number of inodes in the table which are never kicked out.<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; Is there any way to default to an entry-timeout and<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; attribute-timeout value<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; while mounting Gluster using Fuse? Say 60s each so those entries<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; will be<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; purged periodically?<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; Once the entry timeouts, inodes won&#39;t be purged. Kernel sends a<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; lookup<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; to revalidate the mapping of path to inode. AFAIK, reverse<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; invalidation<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; (see inode_invalidate) is the only way to make kernel forget<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; inodes/attributes.<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; Is that something that can be done from the Fuse mount ? Or is this<br>
&gt; &gt; &gt;&gt;&gt;&gt; something that needs to be added to Fuse?<br>
&gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; Regards,<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt; Nithya<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt;<br>
______________________________<wbr>_________________<br>
Gluster-devel mailing list<br>
<a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a><br>
<a href="http://lists.gluster.org/mailman/listinfo/gluster-devel" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-devel</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Raghavendra G<br></div>
</div>