On 10/27/20 12:00 PM, Jan Kara wrote:
On Mon 26-10-20 16:44:18, Waiman Long wrote:The default value of inotify.max_user_watches sysctl parameter was set to 8192 since the introduction of the inotify feature in 2005 by commit 0eeca28300df ("[PATCH] inotify"). Today this value is just too small for many modern usage. As a result, users have to explicitly set it to a larger value to make it work.After some searching around the web, these are the inotify.max_user_watches values used by some projects: - vscode: 524288 - dropbox support: 100000 - users on stackexchange: 12228 - lsyncd user: 2000000 - code42 support: 1048576 - monodevelop: 16384 - tectonic: 524288 - openshift origin: 65536 Each watch point adds an inotify_inode_mark structure to an inode to be watched. Modeled after the epoll.max_user_watches behavior to adjust the default value according to the amount of addressable memory available, make inotify.max_user_watches behave in a similar way to make it use no more than 1% of addressable memory within the range [8192, 1048576]. For 64-bit archs, inotify_inode_mark should have a size of 80 bytes. That means a system with 8GB or more memory will have the maximum value of 1048576 for inotify.max_user_watches. This default should be big enough for most of the use cases. Signed-off-by: Waiman Long <[email protected]>So I agree that 8192 watches seem to be a bit low today but what you propose seems to be way too much to me. OTOH I agree that having to tune this manually kind of sucks so I'm for auto-tuning of the default. If the computation takes into account the fact that a watch pins an inode as Amir properly notes (that's the main reason why the number of watches is limited), I think limiting to 1% of pinned memory should be bearable. The amount of space pinned by an inode is impossible to estimate exactly (differs for different filesystems) but about 1k for one inode is a sound estimate IMO. Honza
I will certainly do that. Will send out a v2 soon. Cheers, Longman

