[Gluster-devel] how best to set up for performance?

Niall Dalton nialldalton at mac.com
Sun Mar 16 00:39:17 UTC 2008


Hi,

I'd appreciate some advice on how to configure gluster for best  
performance. After reading the docs and experimenting, I'm still  
struggling to get more then a few hundred MB/s on large streaming reads.

I have a server with two 10gige cards connected directly to two  
storage servers. With no particular effort, I can push >750MB/s over  
each network interface to the storage machines, for an aggregate 1.5GB/ 
s, using iperf. Local disk tests on the storage servers shows 700 MB/s  
reads on each.

Using gluster I struggle to write more than 160MB/s and read at more  
than 200MB/s. Interestingly, using a single client and a single server  
I get the same results as when I use a single client and both storage  
servers - the read/write rate per storage server halves. This is using  
various combinations of readahead, writebehind, io-threads and a strip  
across the storage servers (tried lots of variations in the #threads,  
cache sizes, aggregate-sizes,  block sizes, etc etc).

My write test is:

dd if=/dev/zero of=/mnt/stripe/big.file bs=8M count=10000

and my read test is

dd if=/mnt/stripe/big.file of=/dev/null bs=8M

I'm using packages:

fuse-2.7.2glfs8  glusterfs-1.3.8pre3

Sample configs below (with last numbers tested, as noted I tried many  
others).

Any suggestions?

thanks
niall


server1 (8 cores, 16GB memory)
-------------------------------------------

volume brick
   type storage/posix
   option directory /big
end-volume

volume iothreads
   type performance/io-threads
   option thread-count 8
   option cache-size 4096MB
   subvolumes brick
end-volume

volume server
   type protocol/server
   subvolumes brick
   option transport-type tcp/server     # For TCP/IP transport
   option auth.ip.brick.allow *
   subvolumes brick
end-volume


server2 (8 cores, 16GB memory)
-------------------------------------------

volume brick
   type storage/posix
   option directory /big
end-volume

volume iothreads
   type performance/io-threads
   option thread-count 8
   option cache-size 4096MB
   subvolumes brick
end-volume

volume server
   type protocol/server
   subvolumes brick
   option transport-type tcp/server     # For TCP/IP transport
   option auth.ip.brick.allow *
   subvolumes brick
end-volume


client (16 cores, 64GB memory)
-------------------------------------------

volume jr1
   type protocol/client
   option transport-type tcp/client
   option remote-host 192.168.3.2
   option remote-subvolume brick
end-volume

volume jr2
   type protocol/client
   option transport-type tcp/client
   option remote-host 192.168.2.2
   option remote-subvolume brick
end-volume

volume writebehind-jr1
   type performance/write-behind
   option aggregate-size 1024kB
   subvolumes jr1
end-volume

volume writebehind-jr2
   type performance/write-behind
   option aggregate-size 1024kB
   subvolumes jr2
end-volume

volume readahead-jr1
   type performance/read-ahead
   option page-size 1024kB
   option page-count 64      )
   subvolumes writebehind-jr1
end-volume

volume readahead-jr2
   type performance/read-ahead
   option page-size 1024kB
   option page-count 64
   subvolumes writebehind-jr2
end-volume

volume iothreads-jr1
   type performance/io-threads
   option thread-count 8
   option cache-size 4096MB
   subvolumes jr1
end-volume

volume iothreads-jr2
   type performance/io-threads
   option thread-count 8
   option cache-size 4096MB
   subvolumes jr2
end-volume

volume stripe0
   type cluster/stripe
   option block-size *:4MB
   subvolumes jr1 jr2
end-volume





More information about the Gluster-devel mailing list