[jcifs] Re: Large File upload performance

Christopher R. Hertel crh at ubiqx.mn.org
Sat Sep 20 13:51:27 EST 2003

Michael B Allen wrote:
> > Okay, I just did a simple test.  I copied a 32MB file from one machine to
> > another using SMBFS on the client side and Samba on the server side.  It
> > took 5minutes, 9seconds.  Copying the same file to the same location using
> > Put.java took 5minutes, 21seconds.  The difference is small enough that it
> > is likely to be the result of variations in network speed (this is over a
> > cable modem link and it tends to have a lot of jitter).
> >
> > To be honest, the above doesn't tell us much.  If there is a difference in
> > software performance, it is likely to be drowned out by the slow network
> > speed.  If the problem that Naved is seeing has anything to do with
> > protocol usage then my test does not provide any comparable data.
> >
> Actually I don't think this is a good test.

Well, yeah.  I tried to say as much.  It was just a 'throw things at the
problem and see if anything sticks' sort of test.  Nothing useful came of it

> The difference would be most
> apparent on high speed low latency networks. JCIFS writes are actually
> tuned to high latency slow networks because it uses a snd_buf_size below
> the MTU so the ACK is piggy backed in the response (you can't tune it to
> high speed low latency networks as Naved just demonstrated so we might as
> well tune it for slow high latency networks). On low latency networks the
> ACK doesn't matter so much and the buffer copy starts to show. At least I
> think that's what's happening.

It will take some more detailed readings to get a clear picture, but what
you're saying makes sense to me.

> I will fix this eventually but for now I don't think there's anything
> Naved can do about it unless he want's to change the writeWireFormat
> offset from 0 to 4 to leave room for the NetBIOS header and then hack
> NbtSocket to not do the copy and just encode the NetBIOS header in the new
> 4 byte space. It's ugly so I'm not going to do it but it would probably
> work.

There are nicer ways to do what you describe.  In my testing when writing my
book I did something similar in my C code.  I created a generic buffer type
and then logically divided it up when creating the messages.  Different
parts of the code would write to different sections of buffer.

Anyway, I'm still surprised that a buffer copy could account for a 50%
increase in the transfer time.

Chris -)-----

"Implementing CIFS - the Common Internet FileSystem" ISBN: 013047116X
Samba Team -- http://www.samba.org/     -)-----   Christopher R. Hertel
jCIFS Team -- http://jcifs.samba.org/   -)-----   ubiqx development, uninq.
ubiqx Team -- http://www.ubiqx.org/     -)-----   crh at ubiqx.mn.org
OnLineBook -- http://ubiqx.org/cifs/    -)-----   crh at ubiqx.org

More information about the jcifs mailing list