Date: Tue, 23 Oct 2012 17:05:48 +0200 From: Andre Oppermann <andre@freebsd.org> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r241931 - in head/sys: conf kern Message-ID: <5086B24C.9000606@freebsd.org> In-Reply-To: <20121023144211.GX70741@FreeBSD.org> References: <201210231419.q9NEJjYH082863@svn.freebsd.org> <20121023144211.GX70741@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 23.10.2012 16:42, Gleb Smirnoff wrote: > On Tue, Oct 23, 2012 at 02:19:45PM +0000, Andre Oppermann wrote: > A> Author: andre > A> Date: Tue Oct 23 14:19:44 2012 > A> New Revision: 241931 > A> URL: http://svn.freebsd.org/changeset/base/241931 > A> > A> Log: > A> Replace the ill-named ZERO_COPY_SOCKET kernel option with two > A> more appropriate named kernel options for the very distinct > A> send and receive path. > A> > A> "options SOCKET_SEND_COW" enables VM page copy-on-write based > A> sending of data on an outbound socket. > A> > A> NB: The COW based send mechanism is not safe and may result > A> in kernel crashes. > A> > A> "options SOCKET_RECV_PFLIP" enables VM kernel/userspace page > A> flipping for special disposable pages attached as external > A> storage to mbufs. > A> > A> Only the naming of the kernel options is changed and their > A> corresponding #ifdef sections are adjusted. No functionality > A> is added or removed. > A> > A> Discussed with: alc (mechanism and limitations of send side COW) > > Users may call this a pointless POLA violation. IMO, the old > kernel option that we had for years, more than a decade, should remain > and just imply two new kernel options. There shouldn't be any users. Zero copy send is broken and responsible for random kernel crashes. Zero copy receive isn't supported by any modern driver. Both are useless to dangerous. The main problem with ZERO_COPY_SOCKETS was that it sounded great and who wouldn't want to have zero copy sockets? Unfortunately it doesn't work that way. According to alc@ even if zero copy send would work it wouldn't be faster due to page based COW setup being a very expensive operation. Eventually he want's page-based COW to go away. For zero copy send we're trying to come up with a sendfile-like approach where the page is simply wired into kernel space. The application then is not allowed to touch it until the socket buffer has released it again. The main issue here is how to provide feedback to the application when it is safe for reuse. For zero copy receive I've been contacted by np@ to find a way to combine DDP into the socket buffer layer. Trying to work something out that isn't too horrible. A generic approach would hinge on page sized mbufs though. -- Andre
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5086B24C.9000606>