Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Apr 2006 08:38:19 -0400
From:      Chuck Swiger <cswiger@mac.com>
To:        Peter <petermatulis@yahoo.ca>
Cc:        freebsd-questions <freebsd-questions@freebsd.org>
Subject:   Re: anyone understand torvald's critique of freebsd?
Message-ID:  <444A23BB.9080806@mac.com>
In-Reply-To: <20060422005629.41158.qmail@web60014.mail.yahoo.com>
References:  <20060422005629.41158.qmail@web60014.mail.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Peter wrote:
> Does anyone here understand Linus Torvald's recent comments on FreeBSD?
> 
> http://bsdnews.com/view_story.php3?story_id=5735

Sure.  There are different ways of moving data between the kernel and userland; 
the classic mechanism involves copying data from a wired-down page in kernel 
space allocated to network memory buffers to a userland page via copyin() and 
copyout() (or equivalents).

Mach (and apparently the ZERO_COPY_SOCKETS option to FreeBSD) manipulate the VM 
page table mappings to make that page visible in the process address space 
rather than copying the sequence of bytes manually via a message-passing paradigm.

The former approach tends to be more efficient for small amounts of data, 
especially for things smaller than one page of memory (ie, all non-jumbo network 
traffic); the latter approach tends to better for things which are bigger in size.

The Mach VM has more overhead to its operations because the VMOs are more 
complicated to work and a given workload will result in comparatively larger VMO 
datastructures than the less-complicated approaches to doing VM.  On the other 
hand, Mach was the first or among the earliest platforms to support shared 
libraries, dynamic loading of objects into user processes (dlopen vs. dso) and 
into the kernel, and has somewhat better scaling in the face of gigabytes of RAM 
and VM usage than most Unix flavors do (outside of Solaris, although FreeBSD is 
pretty decent nowadays too).

Mach handles mapping shared libraries into VM via a technique called prebinding 
that can minimize the work and memory overhead required for runtime symbol 
relocation, which tends to big win if you are running a lot of, say, Java or 
Perl processes that make extensive use of runtime class-loading, yet is flexible 
enough to deal with collisions if needed (whereas the older fixed-VM shared 
libraries were subject to evil nasty conflicts if your data segment grew too big 
and overlapped a library's chosen address space, or if two libraries wanted to 
be mapped into the same spot).

-- 
-Chuck



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?444A23BB.9080806>