(no commit message)
authordillon <dillon@web>
Sat, 10 Jul 2010 22:17:35 +0000 (15:17 -0700)
committerCharlie <root@leaf.dragonflybsd.org>
Sat, 10 Jul 2010 22:17:35 +0000 (15:17 -0700)
features/index.mdwn

index aeb0ed4..d949ebc 100644 (file)
@@ -1,2 +1,32 @@
-# DragonFly Features List
+# DragonFly's Major Features List
+
+## Kernel
+
+Please keep in mind that major modifications have been made to nearly the entire DragonFly kernel relative to the original FreeBSD-4.x fork.  There is very little similarity between the two today.  This is an attempt to iterate the largest, most user-visible changes.
+
+* The scheduler abstraction has been split up into two layers.  The LWKT (Light Weight Kernel Thread) scheduler is used by the kernel to schedule all executable entities.  The User Thread Scheduler is a separate scheduler which selects one user thread at a time for each cpu and schedules it using the LWKT scheduler.  Both scheduler abstractions are per-cpu but the user thread scheduler uses a common list of runnable processes.
+
+* The User Thread Scheduler further abstracts out user threads from the user process entity.  A user process contains one or more LWP (Light Weight Process) entities.  Each entity represents a user thread under that process.  The old rfork() mechanic still exists but is no longer used.  The threading library uses LWP-specific calls.
+
+* The kernel memory allocator has two abstracted pieces.  Basic kernel kmalloc is called kmalloc() and is based on an enhanced per-cpu slab allocator.  This allocator is essentially lockless.
+
+* DEVFS is the DragonFly device filesystem.  It works similarly to device filesystems found on other modern unix-like operating systems.  The biggest single feature is DEVFS's integration with block device serial numbers which allows a DragonFly system to reference disk drives by serial number instead of by their base device name.  Thus drives can be trivially migrated between physical ports and driver changes (base device name changes) become transparent to the system.
+
+* VKERNEL - DragonFly implements a virtual kernel feature for running DragonFly kernels in userland inside DragonFly kernels.  This works similarly to the linux UVM and allows DragonFly kernels to be debugged as a userland process.  The primary use is to make kernel development easier.
+
+## HAMMER - DragonFly Filesystem
+
+HAMMER is the DragonFly filesystem, replacing UFS.  HAMMER supports up to an Exabyte of storage, implements a fast UNDO/REDO FIFO for fsync(), recovers instantly on boot after a crash (no fsck), and implements a very sophisticated fine-grained historical access and snapshot mechanic.  HAMMER also sports an extremely robust streaming, queueless master->multiple-slave mirroring.
+
+All non-temporary HAMMER filesystems in DragonFly automatically maintain 60 days worth of 1-day snapshots and 1-day worth of fine-grained (30-second) snapshots.
+
+HAMMER is designed to accommodate today's large drives. 
+
+## DNTPD - DragonFly Network Time Daemon
+
+DragonFly has its own from-scratch time daemon.  After pulling our hair out over the many issues with open source time daemons we decided to write one ourselves and add new system calls to support it.  DNTPD uses a double staggered linear regression and correlation to make time corrections.  It will also properly deal with network failures (including lack of connectivity on boot), duplicate IPs resolved by DNS, and time source failures (typically 1 second off) when multiple time sources are available.  The linear regression and correlation allows DNTPD to make rough adjustments and frequency corrections within 5 minutes of boot and to make more fine-grained adjustments at any time following when the linear regression indicates accuracy beyond the noise floor.
+
+## DMA - DragonFly Mail Agent
+
+The DragonFly Mail Agent is a bare-bones (though not so bare-bones any more) mail transfer and mail terminus SMTP server which provides all the functionality needed for local mail delivery and simply remote mail transfers.  A more sophisticated MTA can then be thrown onto an installed system via pkgsrc.