* Samba performance / zero-copy network I/O @ 2001-02-14 20:14 Gord R. Lamb 2001-02-14 20:29 ` Alan Cox 2001-02-14 20:42 ` Jeremy Jackson 0 siblings, 2 replies; 10+ messages in thread From: Gord R. Lamb @ 2001-02-14 20:14 UTC (permalink / raw) To: linux-kernel Hi everyone, I'm trying to optimize a box for samba file serving (just contiguous block I/O for the moment), and I've now got both CPUs maxxed out with system load. (For background info, the system is a 2x933 Intel, 1gb system memory, 133mhz FSB, 1gbit 64bit/66mhz FC card, 2x 1gbit 64/66 etherexpress boards in etherchannel bond, running linux-2.4.1+smptimers+zero-copy+lowlatency) CPU states typically look something like this: CPU states: 3.6% user, 94.5% system, 0.0% nice, 1.9% idle .. with the 3 smbd processes each drawing around 50-75% (according to top). When reading the profiler results, the largest consuming kernel (calls?) are file_read_actor and csum_partial_copy_generic, by a longshot (about 70% and 20% respectively). Presumably, the csum_partial_copy_generic should be eliminated (or at least reduced) by David Miller's zerocopy patch, right? Or am I misunderstanding this completely? :) Regards, - Gord R. Lamb (glamb@lcis.dyndns.org) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 20:14 Samba performance / zero-copy network I/O Gord R. Lamb @ 2001-02-14 20:29 ` Alan Cox 2001-02-14 20:42 ` Jeremy Jackson 1 sibling, 0 replies; 10+ messages in thread From: Alan Cox @ 2001-02-14 20:29 UTC (permalink / raw) To: Gord R. Lamb; +Cc: linux-kernel > When reading the profiler results, the largest consuming kernel (calls?) > are file_read_actor and csum_partial_copy_generic, by a longshot (about > 70% and 20% respectively). > > Presumably, the csum_partial_copy_generic should be eliminated (or at > least reduced) by David Miller's zerocopy patch, right? Or am I > misunderstanding this completely? :) To an extent, providing you are using the samba sendfile() patches. SMB cant make great use of zero copy file I/O due to the fact its not really designed so much as mutated over time and isnt oriented for speed ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 20:14 Samba performance / zero-copy network I/O Gord R. Lamb 2001-02-14 20:29 ` Alan Cox @ 2001-02-14 20:42 ` Jeremy Jackson 2001-02-14 20:53 ` Gord R. Lamb 1 sibling, 1 reply; 10+ messages in thread From: Jeremy Jackson @ 2001-02-14 20:42 UTC (permalink / raw) To: Gord R. Lamb; +Cc: linux-kernel "Gord R. Lamb" wrote: > Hi everyone, > > I'm trying to optimize a box for samba file serving (just contiguous block > I/O for the moment), and I've now got both CPUs maxxed out with system > load. > > (For background info, the system is a 2x933 Intel, 1gb system memory, > 133mhz FSB, 1gbit 64bit/66mhz FC card, 2x 1gbit 64/66 etherexpress boards > in etherchannel bond, running linux-2.4.1+smptimers+zero-copy+lowlatency) > > CPU states typically look something like this: > > CPU states: 3.6% user, 94.5% system, 0.0% nice, 1.9% idle > > .. with the 3 smbd processes each drawing around 50-75% (according to > top). > > When reading the profiler results, the largest consuming kernel (calls?) > are file_read_actor and csum_partial_copy_generic, by a longshot (about > 70% and 20% respectively). > > Presumably, the csum_partial_copy_generic should be eliminated (or at > least reduced) by David Miller's zerocopy patch, right? Or am I > misunderstanding this completely? :) I only know enough to be dangerous here, but I believe you will need to be using one of the network cards whose driver actually uses the zero-copy patches, and/or which can perform tcp checksum in hardware (of the network card). ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 20:42 ` Jeremy Jackson @ 2001-02-14 20:53 ` Gord R. Lamb 2001-02-14 22:40 ` Tom Sightler 2001-02-17 8:17 ` Anton Blanchard 0 siblings, 2 replies; 10+ messages in thread From: Gord R. Lamb @ 2001-02-14 20:53 UTC (permalink / raw) To: Jeremy Jackson; +Cc: linux-kernel On Wed, 14 Feb 2001, Jeremy Jackson wrote: > "Gord R. Lamb" wrote: > > > Hi everyone, > > > > I'm trying to optimize a box for samba file serving (just contiguous block > > I/O for the moment), and I've now got both CPUs maxxed out with system > > load. > > > > (For background info, the system is a 2x933 Intel, 1gb system memory, > > 133mhz FSB, 1gbit 64bit/66mhz FC card, 2x 1gbit 64/66 etherexpress boards > > in etherchannel bond, running linux-2.4.1+smptimers+zero-copy+lowlatency) > > > > CPU states typically look something like this: > > > > CPU states: 3.6% user, 94.5% system, 0.0% nice, 1.9% idle > > > > .. with the 3 smbd processes each drawing around 50-75% (according to > > top). > > > > When reading the profiler results, the largest consuming kernel (calls?) > > are file_read_actor and csum_partial_copy_generic, by a longshot (about > > 70% and 20% respectively). > > > > Presumably, the csum_partial_copy_generic should be eliminated (or at > > least reduced) by David Miller's zerocopy patch, right? Or am I > > misunderstanding this completely? :) > > I only know enough to be dangerous here, but I believe you will need to > be using one of the network cards whose driver actually uses the > zero-copy patches, and/or which can perform tcp checksum in hardware > (of the network card). Hmm. Yeah, I think that may be one of the problems (Intel's card isn't supported afaik; if I have to I'll switch to 3com, or hopelessly try to implement support). I'm looking for a patch to implement sendfile in Samba, as Alan suggested. That seems like a good first step. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 20:53 ` Gord R. Lamb @ 2001-02-14 22:40 ` Tom Sightler 2001-02-16 2:24 ` Gord R. Lamb 2001-02-16 14:51 ` Andrew Morton 2001-02-17 8:17 ` Anton Blanchard 1 sibling, 2 replies; 10+ messages in thread From: Tom Sightler @ 2001-02-14 22:40 UTC (permalink / raw) To: Gord R. Lamb; +Cc: linux-kernel Quoting "Gord R. Lamb" <glamb@lcis.dyndns.org>: > On Wed, 14 Feb 2001, Jeremy Jackson wrote: > > > "Gord R. Lamb" wrote: > > > in etherchannel bond, running > linux-2.4.1+smptimers+zero-copy+lowlatency) Not related to network, but why would you have lowlatency patches on this box? My testing showed that the lowlatency patches abosolutely destroy a system thoughput under heavy disk IO. Sure, the box stays nice and responsive, but something has to give. On a file server I'll trade console responsivness for IO performance any day (might choose the opposite on my laptop). My testing wasn't very complete, but heavy dbench and multiple simultaneous file copies both showed significantly lower performance with lowlatency enabled, and returned to normal when disabled. Of course you may have had lowlatency disabled via sysctl but I was mainly curious if your results were different. Later, Tom ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 22:40 ` Tom Sightler @ 2001-02-16 2:24 ` Gord R. Lamb 2001-02-16 14:51 ` Andrew Morton 1 sibling, 0 replies; 10+ messages in thread From: Gord R. Lamb @ 2001-02-16 2:24 UTC (permalink / raw) To: Tom Sightler; +Cc: linux-kernel On Wed, 14 Feb 2001, Tom Sightler wrote: > Quoting "Gord R. Lamb" <glamb@lcis.dyndns.org>: > > > On Wed, 14 Feb 2001, Jeremy Jackson wrote: > > > > > "Gord R. Lamb" wrote: > > > > in etherchannel bond, running > > linux-2.4.1+smptimers+zero-copy+lowlatency) > > Not related to network, but why would you have lowlatency patches on > this box? Well, I figured it might reduce deadweight time between the different operations (disk reads, cache operations, network I/O) at the expense of a little throughput. It was just a hunch and I don't fully understand the internals (of any of this, really). Since I wasn't saturating the disk or network controller, I thought the gain from quicker response time (for packet acknowledgement, etc.) would outweigh the loss of individual throughputs. Again, I could be misunderstanding this completely. :) > My testing showed that the lowlatency patches abosolutely destroy a > system thoughput under heavy disk IO. Sure, the box stays nice and > responsive, but something has to give. On a file server I'll trade > console responsivness for IO performance any day (might choose the > opposite on my laptop). Well, I backed out that particular patch, and it didn't seem to make much of a difference either way. I'll look at it in more detail tomorrow though. Cya. > My testing wasn't very complete, but heavy dbench and multiple > simultaneous file copies both showed significantly lower performance > with lowlatency enabled, and returned to normal when disabled. > > Of course you may have had lowlatency disabled via sysctl but I was > mainly curious if your results were different. > > Later, > Tom > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 22:40 ` Tom Sightler 2001-02-16 2:24 ` Gord R. Lamb @ 2001-02-16 14:51 ` Andrew Morton 2001-02-16 20:49 ` Tom Sightler 1 sibling, 1 reply; 10+ messages in thread From: Andrew Morton @ 2001-02-16 14:51 UTC (permalink / raw) To: Tom Sightler; +Cc: Gord R. Lamb, linux-kernel Tom Sightler wrote: > > My testing showed that the lowlatency patches abosolutely destroy a system > thoughput under heavy disk IO. I'm surprised - I've been keeping an eye on that. Here's the result of a bunch of back-to-back `dbench 12' runs on UP, alternating with and without LL: With: 58.725 total 52.217 total 51.935 total 53.624 total 39.815 total Without: 1:16.85 total 52.525 total 57.602 total 41.623 total 58.848 total Results on reiserfs are similar. - ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-16 14:51 ` Andrew Morton @ 2001-02-16 20:49 ` Tom Sightler 0 siblings, 0 replies; 10+ messages in thread From: Tom Sightler @ 2001-02-16 20:49 UTC (permalink / raw) To: Andrew Morton; +Cc: Gord R. Lamb, linux-kernel > > My testing showed that the lowlatency patches abosolutely destroy a system > > thoughput under heavy disk IO. > > I'm surprised - I've been keeping an eye on that. > > Here's the result of a bunch of back-to-back `dbench 12' runs > on UP, alternating with and without LL: It's interesting that your results seem to show an improvement in performance, while mine show a consistent drop. My tests were not very scientific, and I was running much higher dbench processes, 'dbench 64' or 'dbench 128', and at those levels performance with lowlatency enabled fell though the floor on my setup. My system is a PIII 700Mhz, Adaptec 7892 Ultra-160, software RAID1, reiserfs, 256MB RAM. Under lower loads, like the 'dbench 12' lowlatency only showed only a few percent loss, but once you approached the levels around 50 things really went downhill. I might try to do a more complete test, maybe there's something else in my config that would make this be a problem, but it was definately quite noticable. Later, Tom ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-14 20:53 ` Gord R. Lamb 2001-02-14 22:40 ` Tom Sightler @ 2001-02-17 8:17 ` Anton Blanchard 2001-02-19 16:47 ` Gord R. Lamb 1 sibling, 1 reply; 10+ messages in thread From: Anton Blanchard @ 2001-02-17 8:17 UTC (permalink / raw) To: Gord R. Lamb; +Cc: Jeremy Jackson, linux-kernel > Hmm. Yeah, I think that may be one of the problems (Intel's card isn't > supported afaik; if I have to I'll switch to 3com, or hopelessly try to > implement support). I'm looking for a patch to implement sendfile in > Samba, as Alan suggested. That seems like a good first step. As Alan said, the smb protocol is pretty ugly. This patch makes samba use sendfile for unchained read_and_X replies. I could hook this into some of the other *read* replies but this is the one smbtorture uses so it served my purpose. Of course this is against the current CVS head, not some wimpy stable branch. :) I still need to write some code to make this safe (things will break badly if multiple clients hit the same file and one of them truncates at just the right time). In my tests, this only improved things by a couple of percent because we do so many other things than just serving files in real life (well if you can call netbench land real life). Anton diff -u -u -r1.195 includes.h --- source/include/includes.h 2000/12/06 00:05:14 1.195 +++ source/include/includes.h 2001/01/26 05:38:51 @@ -871,7 +871,8 @@ /* default socket options. Dave Miller thinks we should default to TCP_NODELAY given the socket IO pattern that Samba uses */ -#ifdef TCP_NODELAY + +#if 0 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY" #else #define DEFAULT_SOCKET_OPTIONS "" diff -u -u -r1.257 reply.c --- source/smbd/reply.c 2001/01/24 19:34:53 1.257 +++ source/smbd/reply.c 2001/01/26 05:38:53 @@ -2383,6 +2391,51 @@ END_PROFILE(SMBreadX); return(ERROR(ERRDOS,ERRlock)); } + +#if 1 + /* We can use sendfile if it is not chained */ + if (CVAL(inbuf,smb_vwv0) == 0xFF) { + off_t tmpoffset; + struct stat buf; + int flags = 0; + + nread = smb_maxcnt; + + fstat(fsp->fd, &buf); + if (startpos > buf.st_size) + return(UNIXERROR(ERRDOS,ERRnoaccess)); + if (nread > (buf.st_size - startpos)) + nread = (buf.st_size - startpos); + + SSVAL(outbuf,smb_vwv5,nread); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,nread); + CVAL(outbuf,smb_vwv0) = 0xFF; + set_message(outbuf,12,nread,False); + +#define MSG_MORE 0x8000 + if (nread > 0) + flags = MSG_MORE; + if (send(smbd_server_fd(), outbuf, data - outbuf, flags) == -1) + DEBUG(0,("reply_read_and_X: send ERROR!\n")); + + tmpoffset = startpos; + while(nread) { + int nwritten; + nwritten = sendfile(smbd_server_fd(), fsp->fd, &tmpoffset, nread); + if (nwritten == -1) + DEBUG(0,("reply_read_and_X: sendfile ERROR!\n")); + + if (!nwritten) + break; + + nread -= nwritten; + } + + return -1; + } +#endif + nread = read_file(fsp,data,startpos,smb_maxcnt); if (nread < 0) { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Samba performance / zero-copy network I/O 2001-02-17 8:17 ` Anton Blanchard @ 2001-02-19 16:47 ` Gord R. Lamb 0 siblings, 0 replies; 10+ messages in thread From: Gord R. Lamb @ 2001-02-19 16:47 UTC (permalink / raw) To: Anton Blanchard; +Cc: Jeremy Jackson, linux-kernel On Sat, 17 Feb 2001, Anton Blanchard wrote: > > > Hmm. Yeah, I think that may be one of the problems (Intel's card isn't > > supported afaik; if I have to I'll switch to 3com, or hopelessly try to > > implement support). I'm looking for a patch to implement sendfile in > > Samba, as Alan suggested. That seems like a good first step. > > As Alan said, the smb protocol is pretty ugly. This patch makes samba use > sendfile for unchained read_and_X replies. I could hook this into some of > the other *read* replies but this is the one smbtorture uses so it served my > purpose. Of course this is against the current CVS head, not some wimpy > stable branch. :) > > I still need to write some code to make this safe (things will break badly > if multiple clients hit the same file and one of them truncates at just the > right time). > > In my tests, this only improved things by a couple of percent because we do > so many other things than just serving files in real life (well if you can > call netbench land real life). Well, it made a big difference for me. I grabbed an extra 10-20mb/sec! Now I just need to work on coalescing some of the ethernet interrupts. Thanks, Anton! > Anton > > diff -u -u -r1.195 includes.h > --- source/include/includes.h 2000/12/06 00:05:14 1.195 > +++ source/include/includes.h 2001/01/26 05:38:51 > @@ -871,7 +871,8 @@ > > /* default socket options. Dave Miller thinks we should default to TCP_NODELAY > given the socket IO pattern that Samba uses */ > -#ifdef TCP_NODELAY > + > +#if 0 > #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY" > #else > #define DEFAULT_SOCKET_OPTIONS "" > diff -u -u -r1.257 reply.c > --- source/smbd/reply.c 2001/01/24 19:34:53 1.257 > +++ source/smbd/reply.c 2001/01/26 05:38:53 > @@ -2383,6 +2391,51 @@ > END_PROFILE(SMBreadX); > return(ERROR(ERRDOS,ERRlock)); > } > + > +#if 1 > + /* We can use sendfile if it is not chained */ > + if (CVAL(inbuf,smb_vwv0) == 0xFF) { > + off_t tmpoffset; > + struct stat buf; > + int flags = 0; > + > + nread = smb_maxcnt; > + > + fstat(fsp->fd, &buf); > + if (startpos > buf.st_size) > + return(UNIXERROR(ERRDOS,ERRnoaccess)); > + if (nread > (buf.st_size - startpos)) > + nread = (buf.st_size - startpos); > + > + SSVAL(outbuf,smb_vwv5,nread); > + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); > + SSVAL(smb_buf(outbuf),-2,nread); > + CVAL(outbuf,smb_vwv0) = 0xFF; > + set_message(outbuf,12,nread,False); > + > +#define MSG_MORE 0x8000 > + if (nread > 0) > + flags = MSG_MORE; > + if (send(smbd_server_fd(), outbuf, data - outbuf, flags) == -1) > + DEBUG(0,("reply_read_and_X: send ERROR!\n")); > + > + tmpoffset = startpos; > + while(nread) { > + int nwritten; > + nwritten = sendfile(smbd_server_fd(), fsp->fd, &tmpoffset, nread); > + if (nwritten == -1) > + DEBUG(0,("reply_read_and_X: sendfile ERROR!\n")); > + > + if (!nwritten) > + break; > + > + nread -= nwritten; > + } > + > + return -1; > + } > +#endif > + > nread = read_file(fsp,data,startpos,smb_maxcnt); > > if (nread < 0) { > ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2001-02-19 16:48 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2001-02-14 20:14 Samba performance / zero-copy network I/O Gord R. Lamb 2001-02-14 20:29 ` Alan Cox 2001-02-14 20:42 ` Jeremy Jackson 2001-02-14 20:53 ` Gord R. Lamb 2001-02-14 22:40 ` Tom Sightler 2001-02-16 2:24 ` Gord R. Lamb 2001-02-16 14:51 ` Andrew Morton 2001-02-16 20:49 ` Tom Sightler 2001-02-17 8:17 ` Anton Blanchard 2001-02-19 16:47 ` Gord R. Lamb
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox