X-Spam-Check-By: sourceware.org Date: Wed, 15 Mar 2006 22:49:28 +0100 From: Corinna Vinschen To: cygwin AT cygwin DOT com Subject: Re: select() too slow Message-ID: <20060315214927.GA31919@calimero.vinschen.de> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com References: <1753CE61-D772-46F7-8393-84E419E49307 AT ptnix DOT com> <4412EF74 DOT 1070500 AT byu DOT net> <890F74C6-8E51-405F-86CC-551170A2EA70 AT honeynet-pt DOT org> <20060311181653 DOT GA10054 AT trixie DOT casa DOT cgf DOT cx> <20060314191855 DOT GA17565 AT trixie DOT casa DOT cgf DOT cx> <1B24AE67-B28C-4D8E-A655-5D42E92B7F0C AT honeynet-pt DOT org> <20060314224304 DOT GC7159 AT trixie DOT casa DOT cgf DOT cx> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2i Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On Mar 15 19:07, Pedro Inacio wrote: > > On 2006/03/14, at 22:43, Christopher Faylor wrote: > > >On Tue, Mar 14, 2006 at 09:42:25PM +0000, Pedro Inacio wrote: > > > >I don't have any 100MB files sitting around but when I tried this on a > >14MB file, I find that cygwin is about 2X slower, not an order of > >magnitude slower. Taking away the pipe and using regular file > >redirection > >makes things a little faster on cygwin. > > > >So, I can't explain why you are seeing such extreme slowdowns. I > >am using > >the equivalent of a snapshot in my tests, however. Maybe that's the > >difference. > > > >cgf > > I have created a 14MB file and the results were: > > On Linux: 4 seconds > On Cygwin: 44 Seconds > > The test were made on 3 different platforms, and the results the same. > Cygwin is not just 2X slower but 11X slower, each is too much. It looks like this is a TCP_NODELAY issue. You tend to get the problem if a socket is used "interactively", which means, being used for reading and writing in arbitrary order. Unfortunately the Nagle algorithm on Windows is somewhat sluggish. I've tried your echo_server with and without Nagle disabled. Sending a 17 Megs file from my Cygwin box to an echo_server on my Linux box takes between 4 and 5 seconds. Sending a 17 Megs file from Linux to an echo_server on Cygwin takes about 55 seconds. However, when I disable the Nagle algorithm in the echo_server, it takes between 2 and 9 seconds. I don't understand the unexact interval, but I also don't see how that could be Cygwin's fault. --- echo_server.c.ORIG 2006-03-15 22:37:41.905621200 +0100 +++ echo_server.c 2006-03-15 22:45:56.597789300 +0100 @@ -62,6 +62,10 @@ int main(void) { fcntl(client_fd, F_SETFL, fcntl(client_fd, F_GETFL) | O_NONBLOCK); + int opt = 1; + if (setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof opt) == -1) + fprintf(stderr,"setsockopt TCP_NODELAY: %.100s", strerror(errno)); + while(1) { FD_ZERO(&read_fds); FD_ZERO(&write_fds); Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/