[Samba] Troubleshooting poor (small) random read performance -- serverid.tdb?

Volker Lendecke Volker.Lendecke at SerNet.DE
Wed Jun 18 01:29:12 MDT 2014


On Tue, Jun 17, 2014 at 10:27:38PM -0700, Ray Van Dolson wrote:
> Hi everyone;
> 
> Have a Windows 2012 based workload that generates many (20K+ PPS) small
> reads (Wireshark tells me the individual packets are typically less
> than 200 bytes and are Read AndX Request) from eight or so hosts to a
> Samba server running on RHEL 6.5.  Samba version is the latest Red Hat
> provided 3.6.9 version.
> 
> Things are going quite a bit slower than expected (as compared to the
> same workload pointed at a Windows 2012 server).
> 
> iostat shows not much disk IO activity or iowait going on, but smbd
> processes are all maxed out CPU wise.  An strace on them shows *lots*
> of activity (almost exclusively) to the serverid.tdb file:
> 
> fcntl(16, F_SETLKW, {type=F_RDLCK, whence=SEEK_SET, start=636, len=1}) = 0
> fcntl(16, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=636, len=1}) = 0
> 
> File handle 16 corresponds with the serverid.tdb file for the PID in
> question.

A lot of accesses to serverid.tdb have been eliminated in
Samba 4.1. In Samba master, we eliminated the requirement to
do fcntls altogether by introducing mutex support to tdb.

> 
> Have been searching around trying to find out what exactly it is that
> the serverid.tdb file is used for but hvaen't found a great
> explanation.  Am wondering if it has something to do with my use of
> security ads and winbind?

No, that's not the cause.

> I'm hoping that if I can find a way to eliminate or optimize all of
> this activity I can get better performance out of Samba and avoid
> needing to shift to Windows.

If your workload does not do byte range locks and does not
depend on those, you might give "strict locking = no" a
quick try.

> Possibly Samba 4.x would work better?  Haven't yet tried.

Hopefully 4.1 would be better. Also, depending on the
workload, enabling async I/O (aio read size = 1, aio write
size = 1) might also improve things significantly.

> Also am unsure if this random read workload with very small
> transactions will work well out of the box with Samba.
> 
> My config:
> 
> [global]
>     workgroup = WORKGROUP
>     password server = server, *
>     realm = realm.com
>     security = ads
>     idmap uid = 10000-19999
>     idmap gid = 10000-19999
>     idmap config WORKGROUP:backend = rid
>     idmap config WORKGROUP:range = 10000000-19999999
>     template shell = /bin/bash
>     winbind enum users = no
>     winbind enum groups = no
>     winbind separator = +
>     winbind use default domain = yes
>     winbind normalize names = yes
>     template homedir = /home/%D/%U
>     template shell = /bin/bash
>     server string = Samba Server Version %v
>     log file = /var/log/samba/log.%m
>     log level= 1
>     max log size = 50
>     passdb backend = tdbsam
>     load printers = no
>     cups options = raw
> 
>     socket options = TCP_NODELAY SO_KEEPALIVE SO_RCVBUF=131072 SO_SNDBUF=131072 IPTOS_LOWDELAY

Please remove these settings if you are not running ancient
AIX or so. Modern kernels are good at figuring out those
settings themselves. In particular the SNDBUV/RCVBUF
settings can cause harm.

If you are in the position to try 4.1, I would suggest to do
so. 4.1 also has proper support for SMB2, which might also
have a huge effect on overall performance.

Please keep us posted about your results. If nothing helps,
don't give up but provide us with more input please :-)

Volker

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de


More information about the samba mailing list