[Samba] Performance problem with utime() on Solaris 8

Scott Cokely scott.cokely at skyworksinc.com
Mon Jul 30 22:34:54 GMT 2007

To all:

While updating our Samba installation from 2.2.5 to 3.0.25b, I found that 
Samba's performance was severely degraded.  A 1 gig test file with random text 
in it would take about 2:15 to copy using the old 2.2.5 smbd, but the same file 
would take 5-6 minutes to copy with a freshly compiled version.

I ran truss on smbd while the file copy was taking place, and found that the 
utime() call was taking up most of the system time.  I then ran truss on the 
2.2.5 smbd, and found that there were no utime() calls at all.  I went to the 
archives, downloaded and built version 2.2.12, and found that the performance 
was the same as 2.2.5.  Same with version 3.0.0, and version 3.0.10.

However, version 3.0.11 is where the performance problems begin.  So something 
related to utime() changed between versions 3.0.10 and 3.0.11, and this change 
has a major impact on the Solaris 8 build, GCC 2.95.3.

Here's the truss results for each version.  First, 3.0.11, which takes about 6 
minutes to run (Note:  Calls with zero total seconds are snipped):

syscall              seconds   calls
read                   17.89  392497
time                     .36   17632
utime                 179.76   17479
getgid                   .01      96
fcntl                   2.43   52505
poll                     .55   17523
pwrite64                6.48   17477
send                     .95   17524

In this run, 85% of the system calls are the utime() call.  And here's the same 
1G file copy using version 3.0.10:

syscall              seconds   calls
read                   15.03  390972
close                    .20       9
time                     .31   17603
utime                    .01       1
fcntl                   1.99   52483
poll                     .52   17507
stat64                   .24      36
fstat64                  .11      19
pwrite64                5.83   17477
open64                   .02      10
send                     .53   17507

Notice that the utime() call is almost nonexistent (1 call).  This balance of 
reads and writes is more of what I'd expect out of a Samba transfer.

I looked through the WHATSNEW.txt file in the 3.0.11 distribution, but couldn't 
find an obvious answer to this problem (if it *is* a problem).  So I'm throwing 
this out to the group:  What changed in version 3.0.11 that caused Samba to 
spend 85% of its time in a utime() system call?

# Scott Cokely                 #  The Internet interprets censorship
# (949)231-3742                #  as damage, and routes AROUND it.
# include "std_disclaimer.pl"; #------------------------------------
#               Quidquid latine dictum sit, altum viditur.

More information about the samba mailing list