[Gluster-users] very low file creation rate with glusterfs -- result updates

Wei Dong wdong.pku at gmail.com
Fri Sep 11 13:44:42 UTC 2009

I think it is fuse that causes the slowness.  I ran all experiments with 
booster enabled and here's the new figure:  
http://www.cs.princeton.edu/~wdong/gluster/summary-booster.gif .  The 
numbers are MUCH better than NFS in most cases except for the local 
setting, which is not practically interesting.  The interesting thing is 
that all of a sudden, the deleting rate drop by 4-10 times -- though I 
don't really care about file deletion.

I must say that I'm totally satisfied by the results.

- Wei

Wei Dong wrote:
> Hi All,
> I complained about the low file creation rate with the glusterfs on my 
> cluster weeks ago and Avati suggested I started with a small number of 
> nodes.  I finally get sometime to seriously benchmark glusterfs with 
> Bonnie++ today and the results confirms that glusterfs is indeed slow 
> in terms of file creating.  My application is to store a large number 
> of ~200KB image files.  I use the following bonnie++ command for 
> evaluation (create 10K files of 200KiB each scattered under 100 
> directories):
> bonnie++ -d . -s 0 -n 10:200000:200000:100
> Since sequential I/O is not that interesting to me, I only keep the 
> random I/O results.
> My hardware configuration is 2xquadcore Xeon E5430 2.66GHz, 16GB 
> memory, 4 x Seagate 1500GiB 7200RPM hard drive.  The machines are 
> connected with gigabit ethernet.
> I ran several GlusterFS configurations, each named as N-R-T, where N 
> is the number of replicated volumes aggregated, R is the number of 
> replications and T is number of server side I/O thread.  I use one 
> machine to serve one volume so there are NxR servers and one separate 
> client running for each experiment.  On the client side, the server 
> volumes are first replicated and then aggregated -- even with 1-1-2 
> configuration, the single volume is wrapped by a replicate and a 
> distribute translator.  To show the overhead of those translators, I 
> also run a "simple" configuration which is 1-1-2 without the extra 
> replicate & distribute translators, and a "local" configuration which 
> is "simple" with client & server running on the same machine.  These 
> configurations are compared to "nfs" and "nfs-local", which is NFS 
> with server and client on the same machine.  The GlusterFS volume file 
> templates are attached to the email.
> The result is at 
> http://www.cs.princeton.edu/~wdong/gluster/summary.gif .  The 
> bars/numbers shown are operations/second, so the larger the better.
> Following are the messages shown by the figure:
> 1.  GlusterFS is doing a exceptionally good job on deleting files, but 
> creates and reads files much slower than both NFS.
> 2.  At least for one node server configuration, network doesn't 
> affects the file creation rate and does affects file read rate.
> 3.  The extra dummy replicate & distribute translators lowers file 
> creation rate by almost half. 4.  Replication doesn't hurt performance 
> a lot.
> 5.  I'm running only single-threaded benchmark, so it's hard to say 
> about scalability, but adding more servers does helps a little bit 
> even in single-threaded setting.
> Note that my results are not really that different from 
> http://gluster.com/community/documentation/index.php/GlusterFS_2.0_I/O_Benchmark_Results, 
> where the single node configuration file create rate is about 30/second.
> I see no reason why GlusterFS has to be that slower than NFS in file 
> creation in single node configuration.  I'm wondering if someone here 
> can help me figure out what's wrong in my configuration or what's 
> wrong in the GlusterFS implementation.
> - Wei
> Server volume:
> volume posix
>  type storage/posix
>  option directory /state/partition1/wdong/gluster
> end-volume
> volume lock
>  type features/locks
>  subvolumes posix
> end-volume
> volume brick
>  type performance/io-threads
>  option thread-count 2
>  subvolumes lock
> end-volume
> volume server
>  type protocol/server
>  option transport-type tcp
>  option auth.addr.brick.allow 192.168.99.*
>  option transport.socket.listen-port 6999
>  subvolumes brick
> end-volume
> Client volume
> volume brick-0-0
>  type protocol/client
>  option transport-type tcp
>  option remote-host c8-0-0
>  option remote-port 6999
>  option remote-subvolume brick
> end-volume
> volume brick-0-1 ...
> volume rep-0
> type cluster/replicate
> subvolumes brick-0-0 brick-0-1 ...
> ...
> volume union
> type cluster/distribute
> subvolumes rep-0 rep-1 rep-2 rep-3 rep-4 rep-5 rep-6 rep-7
> end-volume
> volume client
>  type performance/write-behind
>  option cache-size 32MB
>  option flush-behind on
>  subvolumes union
> end-volume
> For those who are interested enough to see the real configuration 
> files, I have all the configuration files and server/client logs 
> uploaded to http://www.cs.princeton.edu/~wdong/gluster/run.tar.gz .

More information about the Gluster-users mailing list