Hello,
We have found that the memory usage of glusterfsd is increasing when
directories are created. Environment details can seen in the attached
environment.txt file, and the translator graph can be seen in the attached file
translator_graph.txt. In summary we have a setup of two gluster bricks, using
replicate mode, and one third gluster peer for quorum. We use glusterfs version
3.6.9. We build glusterfs directly from source code.
The test script creates many directories on the /mnt/export volume from the
storage client side. It creates directories of the path
"/mnt/export/dir.XXXXX", so all directories are under the same folder. In each
directory a file of a random size between 1024 and 11204 is created.
The number of directories created varied from 10000 to 200000 for different
runs. Before each run all directories were deleted.
A graph of the memory usage can be seen here: http://imgur.com/z8LOskQ
In the X-axis the number of directories is seen. The number varies because
before each run all directories are deleted. So first 80000 directories were
created, then they were deleted and 160000 were created then deleted and 200000
were created, then deleted and 40000 were created etc. Due to the amount of
data the resolution of the X-axis is not fine enough to show the exact
variation, but the general idea is that thousands of directories were created
and deleted.
The Y-axis shows the RSS memory usage of the glusterfsd process of this volume
on the two storage nodes (SN-0 and SN-1), as measured by 'pidstat -urdh -p
<pid>'.
We can see that the memory usage is continually increasing.
1) Is this increase normal expected? I can imagine that glusterfsd would
allocated more memory if more files or directories are created, but is there an
upper limit, or will it increase forever?
2) Can we control the memory allocation by any configuration parameters?
3) Is there a particular translator that controls this memory allocation?
We did another test, where only files were created. In this case the memory
usage reached an upper limit. Graph is available here: http://imgur.com/zDtkbml
So if only files are created there is an upper limit in memory allocation. Is
the case of directory creation different and why? Or is this a memory leak? Has
anyone else seen this behavior?
Best regards,
Klearchos
# gluster --version
glusterfs 3.6.9 built on Apr 14 2016 12:31:43
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc. <http://www.gluster.com>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General
Public License.
# uname -a
Linux SN-0 4.1.20-pc64-distro.git-v2.11-sctpmh #1 SMP Thu Apr 14 11:59:31 UTC
2016 x86_64 GNU/Linux
# gluster volume info export
Volume Name: export
Type: Replicate
Volume ID: f5b5173d-f7d3-434c-a9da-fff6b617e21c
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: XXX.XXX.XXX.7:/mnt/bricks/export/brick
Brick2: XXX.XXX.XXX.10:/mnt/bricks/export/brick
Options Reconfigured:
cluster.server-quorum-type: server
cluster.consistent-metadata: on
server.allow-insecure: on
cluster.server-quorum-ratio: 51%
# gluster volume status export
Status of volume: export
Gluster process Port Online Pid
------------------------------------------------------------------------------
Brick XXX.XXX.XXX.7:/mnt/bricks/export/brick 49153 Y 11881
Brick XXX.XXX.XXX.10:/mnt/bricks/export/brick 49153 Y 25649
NFS Server on localhost N/A N N/A
Self-heal Daemon on localhost N/A Y 7413
NFS Server on XXX.XXX.XXX.4 N/A N N/A
Self-heal Daemon on XXX.XXX.XXX.4 N/A Y 16504
NFS Server on XXX.XXX.XXX.10 N/A N N/A
Self-heal Daemon on XXX.XXX.XXX.10 N/A N N/A
Task Status of Volume export
------------------------------------------------------------------------------
There are no active volume tasks
# gluster volume list
volume1
export
volume2
volume3
volume4
volume5
============================ /mnt/export: Client graph ==================
Final graph:
+------------------------------------------------------------------------------+
1: volume export-client-0
2: type protocol/client
3: option ping-timeout 42
4: option remote-host 169.254.0.14
5: option remote-subvolume /mnt/bricks/export/brick
6: option transport-type socket
7: option send-gids true
8: end-volume
9:
10: volume export-client-1
11: type protocol/client
12: option ping-timeout 42
13: option remote-host 169.254.0.7
14: option remote-subvolume /mnt/bricks/export/brick
15: option transport-type socket
16: option send-gids true
17: end-volume
18:
19: volume export-replicate-0
20: type cluster/replicate
21: option consistent-metadata on
22: subvolumes export-client-0 export-client-1
23: end-volume
24:
25: volume export-dht
26: type cluster/distribute
27: subvolumes export-replicate-0
28: end-volume
29:
30: volume export-write-behind
31: type performance/write-behind
32: subvolumes export-dht
33: end-volume
34:
35: volume export-read-ahead
36: type performance/read-ahead
37: subvolumes export-write-behind
38: end-volume
39:
40: volume export-io-cache
41: type performance/io-cache
42: subvolumes export-read-ahead
43: end-volume
44:
45: volume export-quick-read
46: type performance/quick-read
47: subvolumes export-io-cache
48: end-volume
49:
50: volume export-open-behind
51: type performance/open-behind
52: subvolumes export-quick-read
53: end-volume
54:
55: volume export-md-cache
56: type performance/md-cache
57: subvolumes export-open-behind
58: end-volume
59:
60: volume export
61: type debug/io-stats
62: option latency-measurement off
63: option count-fop-hits off
64: subvolumes export-md-cache
65: end-volume
66:
67: volume meta-autoload
68: type meta
69: subvolumes export
70: end-volume
71:
+------------------------------------------------------------------------------+
============================ /mnt/export: Server graph =====================
Final graph:
+------------------------------------------------------------------------------+
1: volume export-posix
2: type storage/posix
3: option glusterd-uuid 1e0b6158-ff2b-4acc-8547-547c4754b32c
4: option directory /mnt/bricks/export/brick
5: option volume-id f5b5173d-f7d3-434c-a9da-fff6b617e21c
6: end-volume
7:
8: volume export-changelog
9: type features/changelog
10: option changelog-brick /mnt/bricks/export/brick
11: option changelog-dir /mnt/bricks/export/brick/.glusterfs/changelogs
12: option changelog-barrier-timeout 120
13: subvolumes export-posix
14: end-volume
15:
16: volume export-access-control
17: type features/access-control
18: subvolumes export-changelog
19: end-volume
20:
21: volume export-locks
22: type features/locks
23: subvolumes export-access-control
24: end-volume
25:
26: volume export-io-threads
27: type performance/io-threads
28: subvolumes export-locks
29: end-volume
30:
31: volume export-barrier
32: type features/barrier
33: option barrier disable
34: option barrier-timeout 120
34: option barrier-timeout 120
35: subvolumes export-io-threads
36: end-volume
37:
38: volume export-index
39: type features/index
40: option index-base /mnt/bricks/export/brick/.glusterfs/indices
41: subvolumes export-barrier
42: end-volume
43:
44: volume export-marker
45: type features/marker
46: option volume-uuid f5b5173d-f7d3-434c-a9da-fff6b617e21c
47: option timestamp-file /var/lib/glusterd/vols/export/marker.tstamp
48: option xtime off
49: option gsync-force-xtime off
50: option quota off
51: subvolumes export-index
52: end-volume
53:
54: volume export-quota
55: type features/quota
56: option volume-uuid export
57: option server-quota off
58: option timeout 0
59: option deem-statfs off
60: subvolumes export-marker
61: end-volume
62:
63: volume /mnt/bricks/export/brick
64: type debug/io-stats
65: option latency-measurement off
66: option count-fop-hits off
67: subvolumes export-quota
68: end-volume
69:
70: volume export-server
71: type protocol/server
72: option transport.socket.listen-port 49153
73: option rpc-auth.auth-glusterfs on
74: option rpc-auth.auth-unix on
75: option rpc-auth.auth-null on
76: option transport-type tcp
77: option auth.login./mnt/bricks/export/brick.allow
aec4710a-db1a-42e6-aa4b-af6d80839ef2
78: option auth.login.aec4710a-db1a-42e6-aa4b-af6d80839ef2.password
a76c8d5a-3055-48dd-9d6a-f50f371ccf6e
79: option auth.addr./mnt/bricks/export/brick.allow *
80: option rpc-auth-allow-insecure on
81: subvolumes /mnt/bricks/export/brick
82: end-volume
83:
+------------------------------------------------------------------------------+
_______________________________________________
Gluster-devel mailing list
Gluster-devel@gluster.org
http://www.gluster.org/mailman/listinfo/gluster-devel