On Wed, 15 Mar 2006 20:13:01 -0800 Skunk Worx <[EMAIL PROTECTED]> wrote:
> Hello, > > I've taken a performance hit over localhost between kernels 2.6.14 and > 2.6.15 in my client/server application. > > I'm trying to gut things down to a simple test case, in the meantime, > this is what I've been discussing with the people at the fedora test list : > > This is only over localhost (lo). Two machines running client/server > 2.6.15 over ether seem fine, as was 2.6.14. > > 2.6.14 : about one or two recv() calls out of 48,000 take nearly 40 ms. > (no big deal--might add 80 ms. to a 20 second operation). > > 2.6.15 : about 3,000 recv() calls out of 48,000 take nearly 40 ms. (adds > almost two minutes) > > From strace : > > 15:27:04.568800 recv(3, "<?xml version=\"1.0\" encoding=\"UT"..., 555, ) > = 555 <0.000121> > > vs. > > 15:18:24.515891 recv(3, "<?xml version=\"1.0\" encoding=\"UT"..., 566, ) > = 566 <0.038414> > > Will watch replies and post more when I know more. Kinda new at this. > This came up with java debugging already. The problem is when the sender writes a message in separate write() system calls, each one becomes a separate packet. In 2.6.15 we do a new thing called Appropriate Byte Count and that penalizes stupid applications, but provides better fairness over the internet by accounting for packets better. If the application does: write(socket, "<xml version =\", ...) write(socket, "1.0", ... write(socket, "\" encoding = ", ... then finally read(socket, response) then after the second write system call, the next write will wait until a TCP ack comes back. If the application was smart and used writev() to do scatter gather, or buffering if using stdio; then the data goes out in nice big chunks and there will be no problem. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html