[Gluster-users] speeding up getdents()/stat() and/or general perf tuning...

mki-glusterfs at mozone.net mki-glusterfs at mozone.net
Tue Sep 29 23:14:02 UTC 2009


Hi

I've been noticing some long delays on doing a simple `ls' in 
directories that haven't been recently accessed on a test glusterfs
system we've put together.  The system(s) consists of a 4 node 
DHT + AFR (x1) setup, running 2.0.6 all with 10GbE connectivity 
between the nodes (and no there is no network bottleneck here as
iperf proves that the throughput between the machines is ~9Gbps).

stat("usr/bin", {st_mode=S_IFDIR|0755, st_size=28672, ...}) = 0 <1.659084>
open("usr/bin", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3 <0.001231>
fstat(3, {st_mode=S_IFDIR|0755, st_size=28672, ...}) = 0 <0.000007>
fcntl(3, F_GETFD)                       = 0x1 (flags FD_CLOEXEC) <0.000005>
getdents(3, /* 75 entries */, 4096)     = 2256 <0.033347>
getdents(3, /* 75 entries */, 4096)     = 2280 <0.001858>
getdents(3, /* 41 entries */, 4096)     = 1256 <0.000961>
getdents(3, /* 73 entries */, 4096)     = 2216 <0.034120>
getdents(3, /* 73 entries */, 4096)     = 2296 <0.001393>
getdents(3, /* 11 entries */, 4096)     = 344 <0.000481>
getdents(3, /* 72 entries */, 4096)     = 2264 <0.028436>
mmap(NULL, 147456, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f061c9b5000 <0.000005>
getdents(3, /* 74 entries */, 4096)     = 2304 <0.001711>
getdents(3, /* 42 entries */, 4096)     = 1344 <0.001304>
getdents(3, /* 74 entries */, 4096)     = 2200 <3.176572> <- SLOW OPERATION
getdents(3, /* 74 entries */, 4096)     = 2288 <0.012123>
getdents(3, /* 10 entries */, 4096)     = 280 <0.000376>
getdents(3, /* 0 entries */, 4096)      = 0 <0.000243>
close(3)                                = 0 <0.000011>

The client configs are simple (stripped down for simplicity sakes):

brick 1 tcp 10.10.10.11
brick 2 tcp 10.10.10.12
...
brick 8 tcp 10.10.10.18
replicate1 brick1 brick2
replicate2 brick3 brick5
replicate3 brick4 brick7
replicate4 brick6 brick8
distribute replicate1 replicate2 replicate3 replicate4
io-threads thread-count 16
readahead page-count 16
io-cache cache-size 512MB
write-behind cache-size 1MB

The storage nodes are even simpler yet (trimmed):

posix background-unlink yes
posix-locks
io-threads thread-count 16
transport-type tcp

The client nodes are running an unpatched fuse 2.7.4 userland (debian 
lenny) and the default kernel 2.6.31.1 fuse module and I'm curious if 
the delay in the getdents/stat calls are because of fuse or something 
else config wise that I've managed to miss?

Anyone have any recommendations or thoughts as to how to improve the 
performance?

Thanks.

Mohan



More information about the Gluster-users mailing list