From owner-freebsd-arch@FreeBSD.ORG Thu May 29 10:35:30 2003 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1C17037B401 for ; Thu, 29 May 2003 10:35:30 -0700 (PDT) Received: from park.rambler.ru (park.rambler.ru [81.19.64.101]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3C02543F85 for ; Thu, 29 May 2003 10:35:29 -0700 (PDT) (envelope-from is@rambler-co.ru) Received: from is.park.rambler.ru (is.park.rambler.ru [81.19.64.102]) by park.rambler.ru (8.12.6/8.12.6) with ESMTP id h4THZSmF075887; Thu, 29 May 2003 21:35:28 +0400 (MSD) Date: Thu, 29 May 2003 21:35:28 +0400 (MSD) From: Igor Sysoev X-Sender: is@is To: Terry Lambert In-Reply-To: <3ED62AFE.187A40F9@mindspring.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: arch@freebsd.org Subject: Re: sendfile(2) SF_NOPUSH flag proposal X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 May 2003 17:35:30 -0000 On Thu, 29 May 2003, Terry Lambert wrote: > Igor Sysoev wrote: > > On Wed, 28 May 2003, Terry Lambert wrote: > > > Igor Sysoev wrote: > > > > The portability argument is bogus because sendfile() portability is nonsense. > > > > > > Darwin has sendfile. See the released source code: it matches > > > the FreeBSD semantics, from what I can tell. > > > > So now FreeBSD/Darwin is second pair after AIX/MVS that has the same sendfile() > > prototype. It surely improves the sendfile() portability. Undoubtedly. > > FreeBSD, NetBSD, OpenBSD, Darwin. There's no sendfile() implementation in NetBSD and OpenBSD. If you apply some experimental patch you can easy fix some non-portable issues. By the way what's about kqueue(2) ? Are you not confused that NetBSD does not support EVFILT_AIO and OpenBSD does not support EVFILT_AIO and EVFILT_TIMER ? Does this mean that FreeBSD should not introduce any new kqueue filters or flags ? > > > > The drawback that really annoyed me is that sendfile() blocks on a reading > > > > from a disk while a sending to non-blocking socket. Although I see three > > > > workarounds it's much better to fix this inside sendfile(). > > > > > > There's no workaround for the latency issue, which comes from > > > the fact that a trap handles the request for more pages, and > > > that blocks all callers. Threads has the same problem in libc_r. > > > > The workaround idea is simple - a preloading. But implementation on user > > level is complex. In FreeBSD 4.x I see three ways: > > > > *) the use of aio_read() to read the single bytes; > > This does not fix the problem. See the extensive discussion, > last month, about the differences between libthr and libc_r > and libpthreads. Even when doing async I/O, you stall all > threads in any model that isn't 1:1 when you fault for a > user page in a system call. > > This is because a fault on a user page results in entering > the trap handler, which suspends the calling program until > such time as the fault is satisfied, or a SIGSEGV is raised > to the caller because the fault cannot be satisfied. I agree but I told not about the blocking on a page fault but the blocking on the reading the file page from a disk by sendfile(). These pages can be preloaded. > > *) the use rfork()ed helper processes to read the single bytes; > > *) and the use the pool of rfork()ed processes to handle connections. > > We call this "libthr". I believe that rfork() and libthr are different things. I think that the rfork()ed process in FreeBSD 5.x is still the process but not the thread. > > > > Five people ? > > > > > > Bill Fenner, Matt Dillon, Peter Jeremy, Marc Slemko, Terry Lambert, > > > Garance Droshin. > > > > At time of your mail there were only 4 people, in order of appearance: > > Peter Jeremy, you, Matt Dillon, and Marc Slemko. Bill Fenner's email > > was sent one and a half hour after yours and just before my response. > > Garance Droshin's mail was sent several hours later. > > Apparently, I received some mail that did not go to the list. > > However, if you are willing to include the contents of the > "sendfile() broken" thread, I could add three more before > your time deadline, including Bruce Evans. Well, but then these "five people have told you [ but not me ] the correct approach is to fix sendfile(2)". > But more to the point, so far you are the only one who is not > saying that sendfile() needs to be fixed, instead of kludged. By the way I do not see that Peter Jeremy said that sendfile() needs to be fixed, he said only that my flags are needless and I should prove their usefulness. Igor Sysoev http://sysoev.ru/en/