I've recently upgraded my home box from 8.2-PRE to 8.2-RELEASE and since
then I've been experiencing *abysmal* performance with samba.
We're talking transfer rates of say 50kbytes/s here, and I'm the only
client on the box.
I've seen here and there discussions about sendfile's support, and how
it is recommended to disable it in samba.
Now, the man tells us:
Default: use sendfile = false
On the other side, FTP and SFTP transfers are OK, at 20mbytes/s or so.
Find below a bit of info
smb.conf
---
[global]
workgroup = MYGROUP
server string = Samba Server
security = user
hosts allow = 192.168.0.1 192.168.1.1 fe80::1
load printers = no
log file = /var/log/samba/log.%m
max log size = 50
# You may want to add the following on a Linux system:
socket options = SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
bind interfaces only = yes
interfaces = re0 lagg0
hide unreadable = yes
[homes]
comment = Home Directories
browseable = no
writable = yes
loader.conf
---
# Tune ZFS somewhat aye ?
vm.kmem_size="3072M"
vm.kmem_size_max="3072M"
vfs.zfs.arc_min="128M"
vfs.zfs.arc_max="2048M"
vfs.zfs.txg.synctime="1"
vfs.zfs.prefetch_disable="0"
vfs.zfs.vdev.min_pending="4"
vfs.zfs.vdev.max_pending="8"
ZFS pool
---
nas# zpool status
pool: rtank
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rtank ONLINE 0 0 0
raidz2 ONLINE 0 0 0
gpt/zfs-ada0 ONLINE 0 0 0
gpt/zfs-ada1 ONLINE 0 0 0
gpt/zfs-ada2 ONLINE 0 0 0
gpt/zfs-ada3 ONLINE 0 0 0
gpt/zfs-ad14 ONLINE 0 0 0
gpt/zfs-ad10 ONLINE 0 0 0
gpt/zfs-ad11 ONLINE 0 0 0
gpt/zfs-ad12 ONLINE 0 0 0
gpt/zfs-ad13 ONLINE 0 0 0
zpool version 14
zfs version 3
So mmmm, sendfile disabled, ZFS pool not quite updated, good FTP/ssh
performance, horribad samba performance.
Does anyone have an idea of stuff I should be looking at ?
Again, this has only begun since I've upgraded from 8.2-PRE/RC3 to
8.2-RELEASE.
_______________________________________________
freebsd...@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stabl...@freebsd.org"
I have a similar system with significantly less disks (two pools, one
disk each; yes, no redundancy). The system can push, via SMB/CIFS
across the network about 65-70MBytes/sec, and 80-90MByte/sec via FTP.
I'll share with you my tunings for Samba, ZFS, and the system. I spent
quite some time messing with different values in Samba and FreeBSD to
find out what got me the "best" performance without destroying the
system horribly.
Please note the amount of memory matters greatly here, so don't go
blindly setting these if your system has some absurdly small amount of
physical RAM installed.
Before getting into what my system has, I also want to make clear that
there have been cases in the past where people were seeing abysmal
performance from ZFS, only to find out it was a *single disk* in their
pool which was causing all of the problems (meaning a single disk was
performing horribly, impacting everything). I can try to find the
mailing list post, but I believe the user offlined the disk (and later
replaced it) and everything was fast again. Just a FYI.
System specifications
=======================
* Case - Supermicro SC733T-645B
* MB - Supermicro X7SBA
* CPU - Intel Core 2 Duo E8400
* RAM - CT2KIT25672AA800, 4GB ECC
* RAM - CT2KIT25672AA80E, 4GB ECC
* Disk - Intel X25-V SSD (ada0, boot)
* Disk - WD1002FAEX (ada1, ZFS "data" pool)
* Disk - WD2001FASS (ada2, ZFS "backups" pool)
Samba
=======================
Rebuild the port (ports/net/samba35) with AIO_SUPPORT enabled. To use
AIO you will need to load the aio.ko kernel module (kldload aio) first.
Relevant smb.conf tunings:
[global]
socket options = TCP_NODELAY SO_SNDBUF=131072 SO_RCVBUF=131072
use sendfile = no
min receivefile size = 16384
aio read size = 16384
aio write size = 16384
aio write behind = yes
ZFS pools
=======================
pool: backups
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
backups ONLINE 0 0 0
ada2 ONLINE 0 0 0
errors: No known data errors
pool: data
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
ada1 ONLINE 0 0 0
errors: No known data errors
ZFS tunings
=======================
Your tunings here are "wild" (meaning all over the place). Your use
of vfs.zfs.txg.synctime="1" is probably hurting you quite badly, in
addition to your choice to enable prefetching (every ZFS FreeBSD system
I've used has benefit tremendously from having prefetching disabled,
even on systems with 8GB RAM and more). You do not need to specify
vm.kmem_size_max, so please remove that. Keeping vm.kmem_size is fine.
Also get rid of your vdev tunings, I'm not sure why you have those.
My relevant /boot/loader.conf tunings for 8.2-RELEASE (note to readers:
the version of FreeBSD you're running, and build date, matters greatly
here so do not just blindly apply these without thinking first):
# We use Samba built with AIO support; we need this module!
aio_load="yes"
# Increase vm.kmem_size to allow for ZFS ARC to utilise more memory.
vm.kmem_size="8192M"
vfs.zfs.arc_max="6144M"
# Disable ZFS prefetching
# http://southbrain.com/south/2008/04/the-nightmare-comes-slowly-zfs.html
# Increases overall speed of ZFS, but when disk flushing/writes occur,
# system is less responsive (due to extreme disk I/O).
# NOTE: Systems with 8GB of RAM or more have prefetch enabled by
# default.
vfs.zfs.prefetch_disable="1"
# Decrease ZFS txg timeout value from 30 (default) to 5 seconds. This
# should increase throughput and decrease the "bursty" stalls that
# happen during immense I/O with ZFS.
# http://lists.freebsd.org/pipermail/freebsd-fs/2009-December/007343.html
# http://lists.freebsd.org/pipermail/freebsd-fs/2009-December/007355.html
vfs.zfs.txg.timeout="5"
sysctl tunings
=======================
Please note that the below kern.maxvnodes tuning is based on my system
usage, and yours may vary, so you can remove or comment out this option
if you wish. The same goes for vfs.ufs.dirhash_maxmem. As for
vfs.zfs.txg.write_limit_override, I strongly suggest you keep this
commented out for starters; it effectively "rate limits" ZFS I/O, and
this smooths out overall performance (otherwise I was seeing what
appeared to be incredible network transfer speed, then the system would
churn hard for quite some time on physical I/O, then fast network speed,
physical I/O, etc... very "bursty", which I didn't want).
# Increase send/receive buffer maximums from 256KB to 16MB.
# FreeBSD 7.x and later will auto-tune the size, but only up to the max.
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
# Double send/receive TCP datagram memory allocation. This defines the
# amount of memory taken up by default *per socket*.
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=131072
# dirhash_maxmem defaults to 2097152 (2048KB). dirhash_mem has reached
# this limit a few times, so we should increase dirhash_maxmem to
# something like 16MB (16384*1024).
vfs.ufs.dirhash_maxmem=16777216
#
# ZFS tuning parameters
# NOTE: Be sure to see /boot/loader.conf for additional tunings
#
# Increase number of vnodes; we've seen vfs.numvnodes reach 115,000
# at times. Default max is a little over 200,000. Playing it safe...
kern.maxvnodes=250000
# Set TXG write limit to a lower threshold. This helps "level out"
# the throughput rate (see "zpool iostat"). A value of 256MB works well
# for systems with 4GB of RAM, while 1GB works well for us w/ 8GB on
# disks which have 64MB cache.
vfs.zfs.txg.write_limit_override=1073741824
Good luck.
--
| Jeremy Chadwick j...@parodius.com |
| Parodius Networking http://www.parodius.com/ |
| UNIX Systems Administrator Mountain View, CA, USA |
| Making life hard for others since 1977. PGP 4BD6C0CB |
[SNIP]
> Good luck.
>
It is fun because when I wrote my original email, I thought about both
you and mm@
Thanks a lot for your very detailed response, I will try these out and
post feedback :)
Hey Jeremy,
Thanks for this post. These settings seem to have fixed my Samba
configuration. I had configured with AIO previously, but apparently my
tunings weren't spot on. I'd get buffering over 100Mbit with 1080p
video, but 720p video would work just fine. Looks like this is what I
needed to be able to ditch using DLNA for streaming to my Popbox!
--
Joshua Boyd
JBipNet
E-mail: boy...@jbip.net
http://www.jbip.net
>
> # Set TXG write limit to a lower threshold. This helps "level out"
> # the throughput rate (see "zpool iostat"). A value of 256MB works well
> # for systems with 4GB of RAM, while 1GB works well for us w/ 8GB on
> # disks which have 64MB cache.
> vfs.zfs.txg.write_limit_override=1073741824
>
>
Sorry if you have said this before, but could you elaborate a bit
about this number? For instance, how much does the cache on the disk
has to say.
In my case: 3x1.5TB raidz with WD15EADS-00R6B0 which has 32MB cache
and 12GB memory. What would you recommend and why.
--
chs,
There's no real way to provide an in-depth analysis of this number; that
is to say, hard disk parameters (RPM, cache, and overall performance of
the drive (highly dependent upon on-disk firmware)) ultimately dictates
what's "best" for this number. I also imagine number of disks plays a
role as well This is why I advocate not messing with it unless you want
to try and "level out" throughput.
The value itself is literally 1024*1024*1024 (1GB). Don't think this is
some magic number; it's just what I came up with. You can search the
FreeBSD lists for references to the variable itself and find other
people advocating values like ~33MByte, etc.. All depends on how you
want the system to behave.
I don't particularly like watching the system behave like I described
(you snipped that portion of my text), which is why I use this variable.
--
| Jeremy Chadwick j...@parodius.com |
| Parodius Networking http://www.parodius.com/ |
| UNIX Systems Administrator Mountain View, CA, USA |
| Making life hard for others since 1977. PGP 4BD6C0CB |
_______________________________________________
Hi again Jeremy, list,
I've been able to test with the settings you recommended and this
obviously did the trick.
I'm now getting much better overall performance, see below the iostat
output during the transfer of a ~5gb file through samba:
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
rtank 5.17T 7.08T 1 1 146K 188K
rtank 5.17T 7.08T 539 0 67.0M 0
rtank 5.17T 7.08T 564 0 69.9M 0
rtank 5.17T 7.08T 530 0 65.8M 0
rtank 5.17T 7.08T 570 0 70.8M 0
rtank 5.17T 7.08T 567 0 70.3M 0
rtank 5.17T 7.08T 546 0 67.8M 0
rtank 5.17T 7.08T 546 0 67.9M 0
rtank 5.17T 7.08T 571 0 70.9M 0
rtank 5.17T 7.08T 549 0 68.2M 0
rtank 5.17T 7.08T 608 0 75.4M 0
rtank 5.17T 7.08T 565 0 70.3M 0
rtank 5.17T 7.08T 534 0 66.4M 0
rtank 5.17T 7.08T 557 0 69.2M 0
rtank 5.17T 7.08T 557 0 69.1M 0
rtank 5.17T 7.08T 538 0 66.8M 0
Not only am I getting much higher speed (~65mbytes/s as opposed to
~20-40 previously, before getting the abysmal drop) but now the load
on the ZFS pool is leveled.
Thank you again, settings definitely did it :)
> On Thu, Feb 24, 2011 at 08:30:17AM +0100, Damien Fleuriot wrote:
> > Hello list,
> >
> > I've recently upgraded my home box from 8.2-PRE to 8.2-RELEASE and
> > since then I've been experiencing *abysmal* performance with samba.
> >
> > We're talking transfer rates of say 50kbytes/s here, and I'm the
> > only client on the box.
[tuning tips]
Wow, thanks a lot! :-)
Those tips have finally stopped "chopiness" with our fileserver as well
as giving consistent throughput with samba.
Bye
Marc
--
Marc "UBM" Bocklet <ubm.f...@gmail.com>
long story:
I'm using old, crappy, low memory desktop PC as home router/test
server/(very little) storage:
FreeBSD 9.0-CURRENT #2 r219090: Mon Feb 28 03:06:13 CET 2011
CPU: mobile AMD Athlon(tm) XP 2200+ (1800.10-MHz 686-class CPU)
real memory = 1610612736 (1536 MB)
avail memory = 1562238976 (1489 MB)
ad0: 39205MB <Maxtor 6E040L0 NAR61590> at ata0-master UDMA133
ad1: 38166MB <SAMSUNG SP0411N TW100-08> at ata0-slave UDMA100
ad2: 39205MB <Maxtor 6E040L0 NAR61590> at ata1-master UDMA133
xl0: <3Com 3c905B-TX Fast Etherlink XL>
It's ZFS only (just updated to v28) system in RAIDZ1 configuration,
attached to cheap belkin 100Mb switch used for home network.
From couple of months I experienced pathetic SMB transfer - from 20kB/s
to 200kB/s. Especially when system was idle, because the most funny
thing about that - transfer was much better when system was busy (csup
or make world for instance). SMB throughput jumped to 2-4MB/s then
(well, from time to time at least).
I've been using following settings and tunings while I was experiencing
this issue:
smb.conf:
[global]
socket options = TCP_NODELAY SO_SNDBUF=65536 SO_RCVBUF=65536
use sendfile = yes
min receivefile size = 16384
aio read size = 16384
aio write size = 16384
aio write behind = true
loader.conf:
vm.kmem_size="1536M"
vm.kmem_size_max="1536M"
vfs.zfs.arc_max="1024M"
aio_load="YES"
sysctl.conf:
kern.ipc.maxsockbuf=2097152
net.inet.tcp.recvspace=262144
net.inet.tcp.recvspace=262144
net.inet.tcp.mssdflt=1452
net.inet.udp.recvspace=65535
net.inet.udp.maxdgram=65535
net.local.stream.recvspace=65535
net.local.stream.sendspace=65535
After applying tunables from Jeremy my configs looks like this:
smb.conf:
[global]
socket options = TCP_NODELAY SO_SNDBUF=131072 SO_RCVBUF=131072
use sendfile = yes
min receivefile size = 16384
aio read size = 16384
aio write size = 16384
aio write behind = yes
loader.conf:
vm.kmem_size="1536M"
vm.kmem_size_max="1536M"
vfs.zfs.arc_max="1024M"
vfs.zfs.txg.timeout="5"
aio_load="YES"
sysctl.conf:
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=131072
vfs.ufs.dirhash_maxmem=16777216
kern.maxvnodes=250000
vfs.zfs.txg.write_limit_override=134217728
Test: copying 1GB file both sides.
Results: stable 8MB/s both sides!
Thank you very much!
--
Bartosz Stec
with vfs.zfs.prefetch_disable="1":
dd if=/pool1/test/idisk1 of=/dev/null bs=1m count=500
524288000 bytes transferred in 18.347177 secs (28575949 bytes/sec)
with vfs.zfs.prefetch_disable="0":
dd if=/pool1/test/idisk1 of=/dev/null bs=1m count=500
524288000 bytes transferred in 3.331806 secs (157358504 bytes/sec)
after few seconds:
dd if=/pool1/test/idisk1 of=/dev/null bs=1m count=500
524288000 bytes transferred in 0.107767 secs (4865009592 bytes/sec)
My system:
FreeBSD 8.2-RELEASE
hw.machine: amd64
hw.model: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
hw.ncpu: 8
hw.physmem: 17155719168
3ware 9690sa controller
Disks: ST32000445SS
pool: pool1
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
raidz2 ONLINE 0 0 0
da12 ONLINE 0 0 0
da11 ONLINE 0 0 0
da10 ONLINE 0 0 0
da9 ONLINE 0 0 0
da16 ONLINE 0 0 0
da15 ONLINE 0 0 0
da14 ONLINE 0 0 0
da13 ONLINE 0 0 0
--
Best regards,
Sergey Gavrilov