d47455e39d
unicpu configurations (i.e. RUMP_NCPU==1), but are massively faster than the multiprocessor versions since the fast path does not have to perform any cache coherent operations. _Applications_ with lock-happy kernel paths, i.e. _not_ lock microbenchmarks, measure up to tens of percents speedup on my Core2 Duo. Every globally atomic state required by normal locks/atomic ops implies a hideous speed penalty even for the fast path. While this requires a unicpu configuration, it should be noted that we are talking about a virtual unicpu configuration. The host can have as many processors as it desires, and the speed benefit of virtual unicpu is still there. It's pretty obvious that in terms of scalability simple workload partitioning and replication into multiple kernels wins hands down over complicated locking or locklessing algorithms which depend on globally atomic state. |
||
---|---|---|
.. | ||
dev | ||
fs | ||
include | ||
librump | ||
net | ||
ldscript.rump | ||
Makefile | ||
Makefile.rump | ||
README.dirs | ||
TODO |
$NetBSD: README.dirs,v 1.11 2010/05/11 11:58:14 pooka Exp $ The following is a quick rundown of the current directory structure. First, components in the kernel namespace, i.e. compiled with -D_KERNEL sys/rump/librump - kernel runtime emulation /rumpkern - kernel core, e.g. syscall, interrupt and lock support /rumpcrypto - kernel cryptographic routines /rumpdev - device support, e.g. autoconf subsystem /rumpnet - networking support and sockets layer /rumpvfs - file system support sys/rump/include /machine - used for architectures where the rump ABI is not yet the same as the kernel module ABI. will eventually disappear completely /rump - rump headers installed to userspace sys/rump/dev - device components, e.g. audio, raidframe, usb drivers sys/rump/fs - file system components /lib/lib${fs} - kernel file system code sys/rump/net - networking components /lib/libnet - subroutines from sys/net, e.g. route and if_ethersubr /lib/libnetinet - TCP/IP /lib/libvirtif - a virtual interface which uses host tap(4) to shovel packets. This is used by netinet and if_ethersubr. /lib/libsockin - implements PF_INET using host kernel sockets. This is mutually exclusive with net, netinet and virtif. The rest are out-of-kernel components (i.e. no -D_KERNEL) related to rump. hypercall interface: src/lib/librumpuser The "rumpuser" set of interfaces is used by rump to communicate with the host. Users: src/lib /libp2k - puffs-to-vfs adaption layer, userspace namespace /libukfs - user kernel file system, a library to access file system images (or devices) directly in userspace without going through a system call and puffs. It provides a slightly higher interface than pure rump syscalls. src/usr.sbin/puffs rump_$fs - userspace file system daemons using the kernel fs code src/share/examples/rump Various examples detailing use of rump in different scenarios. These are provided source-only.