Modernize the page
authordillon <dillon@web>
Tue, 8 May 2018 05:59:52 +0000 (05:59 +0000)
committerIkiWiki <ikiwiki.info>
Tue, 8 May 2018 05:59:52 +0000 (05:59 +0000)
docs/handbook/Configuration/index.mdwn

index d143591..2b1da4a 100644 (file)
@@ -1,12 +1,12 @@
 # Configuration and Tuning 
 
-***Written by Chern Lee.  Based on a tutorial written by Mike Smith.  Also based on [tuning(7)](http://leaf.dragonflybsd.org/cgi/web-man?command=tuning&section7) written by Matt Dillon.***
+***Originally written by Chern Lee.  Based on a tutorial written by Mike Smith.  Also based on [tuning(7)](http://leaf.dragonflybsd.org/cgi/web-man?command=tuning&section7) written by Matt Dillon.***
 
 [[!toc  levels=3]]
 
 ##Synopsis 
 
-One of the important aspects of DragonFly is system configuration. Correct system configuration will help prevent headaches during future upgrades. This chapter will explain much of the DragonFly configuration process, including some of the parameters which can be set to tune a DragonFly system.
+One of the more important aspects of DragonFly is system configuration. Correct system configuration helps prevent headaches and ensures that the system runs smoothly under loaded conditions. This chapter will explain much of the DragonFly configuration process, including some of the parameters which can be set to tune a DragonFly system.
 
 After reading this chapter, you will know:
 
@@ -30,28 +30,41 @@ After reading this chapter, you will know:
 
 #### Base Partitions 
 
-When laying out file systems with [disklabel(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=disklabel&section=8) remember that hard drives transfer data faster from the outer tracks to the inner. Thus smaller and heavier-accessed file systems should be closer to the outside of the drive, while larger partitions like `/usr` should be placed toward the inner. It is a good idea to create partitions in a similar order to: root, swap, `/var`, `/usr`.
-<!-- XXX: on the advent of SSDs, do we really need to talk about this stuff? Who knows where on the platter the partitions land, considering that a hard disk has multiple platters? -->
+Typically all partitions related to a DragonFly system are configured with [disklabel(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=disklabel&section=8) .  In the old days major subsystem directories such as /var and /usr were placed in their own partition, but in modern times nearly everything is just loaded onto the root filesystem.
 
-The size of `/var` reflects the intended machine usage. `/var` is used to hold mailboxes, log files, and printer spools. Mailboxes and log files can grow to unexpected sizes depending on how many users exist and how long log files are kept. Most users would never require a gigabyte, but remember that `/var/tmp` must be large enough to contain packages.
+By convention, partitions are configured as follows:  a: boot, b: swap, and d: root, and the disklabel is placed in slice 1 of the drive whether it is formatted with [fdisk(8)] (http://leaf.dragonflybsd.org/cgi/web-man?command=fdisk&section=8) or with [gpt(8)] (http://leaf.dragonflybsd.org/cgi/web-man?command=gpt&section=8).  For legacy boot, drives are formatted with [fdisk(8)] and for UEFI boot drives are formatted with [gpt(8)] and slice 0 contains the msdos gpt filesystem.  The initial formatting of the drive can be mostly automated up to the point where you install a disklabel, see the respective manual pages.
 
-The `/usr` partition holds much of the files required to support the system, the pkgsrcĀ® collection (recommended) and the source code (optional). At least 2 gigabytes would be recommended for this partition.
+Sometimes it is useful to separate data you wish to backup from data that you do not wish to backup.  By convention, on DragonFly, data that you do not wish to backup would be placed in e: build, mounted on /build, with sub-directories 'var.crash', 'usr.obj' 'var.tmp', 'tmp', and so forth which you use fstab to null-mount onto their normal locations of '/var/crash', '/usr/obj', '/var/tmp', and '/tmp'.  Remember that /var/tmp and /tmp must be chmod'd with the sticky bit set, i.e. 1777.
 
-When selecting partition sizes, keep the space requirements in mind. Running out of space in one partition while barely using another can be a hassle.
+Also by convention, the normal way to have a '/tmp' and a '/var/tmp' is to specify them as TMPFS filesystems in '/etc/fstab' rather than directories on the drive.  At least '/tmp' anyhow. '/var/tmp' is supposed to be somewhat persistent but it doesn't have to be.
+
+When selecting partition sizes, keep the space requirements in mind. Running out of space in one partition while barely using another can be a hassle.  We recommend the following sizes:
+
+    a: 1g   4.2BSD (i.e. UFS)  /boot
+    b: <approx-2x-system-ram>  swap
+    d: * HAMMER or HAMMER2     root (/)
+
+We recommend a 1 gigabyte boot partition, a swap partition approximately 2x system memory, with some caveats (see below) and then a root partition that holds the remainder of the drive.  If you use the additional e: /build convention, we recommend not skimping on either the root partition or the /build partition, but the larger one really depends on your intentions.  For example, if you intend to hold a large project on the system and do not wish for it to reside on /root, you might decide to use /build for that and leave things like /tmp and /var/tmp and such on root.  It's really up to you.
 
 #### Swap Partition 
 
-As a rule of thumb, the swap partition should be about double the size of system memory (RAM). For example, if the machine has 128 megabytes of memory, the swap file should be 256 megabytes. Systems with less memory may perform better with more swap. Less than 256 megabytes of swap is not recommended and memory expansion should be considered. The kernel's VM paging algorithms are tuned to perform best when the swap partition is at least two times the size of main memory. Configuring too little swap can lead to inefficiencies in the VM page scanning code and might create issues later if more memory is added.
-<!-- XXX: do we really recommend double the RAM for swap? IMHO the amount of RAM should be more than enough -->
+As a rule of thumb, the swap partition should be about double the size of system memory (RAM). For example, if the machine has 4g (gigabytes) of memory, the swap file should be around 8g. Systems with less memory may perform better with more swap.  Systems with huge amounts of memory, however, do not necessarily need to have 2x system ram as swap space.  We recommend at least 1x system memory to allow dumps to work in such cases.
+
+If your storage space is severely limited, definitely specify less swap than the recommendation so you have space for the normal filesystems.  However, very tiny amounts of swap on systems with large amounts of ram may cause degenerate paging behavior so do not make the swap partition too small.
+
+Swap is best served on fast media such as a SSD.  If you have multiple SSDs, then spreading your swap space across them will result in higher paging performance.  Note that swap is generally allocated linearly and often not heavily used.  This is actually optimal for use on a SSD because all that unused space can be automatically trimmed on boot using the 'trim' option as part of the fstab line for the swap setup.  TRIM is dangerous and must be enabled via sysctl as well for this to work.  But since swap tends to be used sparingly, having most of its space pre-trimmed means the SSD can use it as spare space to improve wear leveling.
+
+If swap is not expected to be used heavily, just swapping to one device is perfectly fine.
+
+DragonFly can accommodate huge amounts of swap, hundreds of gigabytes or even more if desired.  Large amounts of swap are typically only configured when using the [swapcache(8)]
+(http://leaf.dragonflybsd.org/cgi/web-man?command=swapcache&section=8) feature, described later.
 
-On larger systems with multiple SCSI disks (or multiple IDE disks operating on different controllers), it is recommend that a swap is configured on each drive (up to four drives). The swap partitions should be approximately the same size. The kernel can handle arbitrary sizes but internal data structures scale to 4 times the largest swap partition. Keeping the swap partitions near the same size will allow the kernel to optimally stripe swap space across disks. Large swap sizes are fine, even if swap is not used much. It might be easier to recover from a runaway program before being forced to reboot.
 
 #### Why Partition? 
 
-Several users think a single large partition will be fine, but there are several reasons why this is a bad idea. First, each partition has different operational characteristics and separating them allows the file system to tune accordingly. For example, the root and `/usr` partitions are read-mostly, without much writing. While a lot of reading and writing could occur in `/var` and `/var/tmp`.
+On modern systems the disk is formatted with GPT slices.  GPT can accomodate individual slices per filesystem, but it isn't really convenient to edit and display, and the DragonFly disklabel has certain advantages in that it will automatically align partitions on physical 1MB boundaries regardless of whether the disklabel itself is aligned in the slice it was placed in.
 
-By properly partitioning a system, fragmentation introduced in the smaller write heavy partitions will not bleed over into the mostly-read partitions. Keeping the write-loaded partitions closer to the disk's edge, will increase I/O performance in the partitions where it occurs the most. Now while I/O performance in the larger partitions may be needed, shifting them more toward the edge of the disk will not lead to a significant performance improvement over moving `/var` to the edge. Finally, there are safety concerns. A smaller, neater root partition which is mostly read-only has a greater chance of surviving a bad crash.
-<!-- XXX: again, same story about the edges of disks... -->
+The Convention for DragonFly is thus to put DragonFly related partitions in a disklabel as previously described, in slice 1, and not spread them out onto different GPT slices.  This puts everyone on the same page when dealing with maintenance of the system.
 
 CategoryHandbook
 
@@ -99,11 +112,11 @@ CategoryHandbook-configuration
 
 Typically, installed applications have their own configuration files, with their own syntax, etc. It is important that these files be kept separate from the base system, so that they may be easily located and managed by the package management tools.
 
-Typically, these files are installed in `/usr/pkg/etc`. In the case where an application has a large number of configuration files, a subdirectory will be created to hold them.
+Typically, these files are installed in `/usr/local/etc`. In the case where an application has a large number of configuration files, a subdirectory will be created to hold them.
 
 Normally, when a port or package is installed, sample configuration files are also installed. These are usually identified with a `.default` suffix. If there are no existing configuration files for the application, they will be created by copying the `.default` files.
 
-For example, consider the contents of the directory `/usr/pkg/etc/httpd`:
+For example, consider the contents of the directory `/usr/local/etc/apache24`:
 
     
 
@@ -127,9 +140,9 @@ For example, consider the contents of the directory `/usr/pkg/etc/httpd`:
 
 It is common for a system to host a number of services. These may be started in several different fashions, each having different advantages.
 
-Software installed from a port or the packages collection will often place a script in `/usr/pkg/share/examples/rc.d` which is invoked at system startup with a `start` argument, and at system shutdown with a `stop` argument. This is the recommended way for starting system-wide services that are to be run as `root`, or that expect to be started as `root`. These scripts are registered as part of the installation of the package, and will be removed when the package is removed.
+Software installed from a port or the packages collection will often place a script in `/usr/local/etc/rc.d` which is invoked at system startup with a `start` argument, and at system shutdown with a `stop` argument. This is the recommended way for starting system-wide services that are to be run as `root`, or that expect to be started as `root`. These scripts are registered as part of the installation of the package, and will be removed when the package is removed.  This directory is automatically searched by the RC system and you can enable installed packages at boot from `/etc/rc.conf` the same way you enable system services.
 
-A generic startup script in `/usr/pkg/share/examples/rc.d` looks like:
+A generic startup script in `/usr/local/etc/rc.d` looks like:
 
     
 
@@ -143,7 +156,7 @@ A generic startup script in `/usr/pkg/share/examples/rc.d` looks like:
 
     start)
 
-            /usr/pkg/bin/foobar
+            /usr/local/bin/foobar
 
             ;;
 
@@ -170,9 +183,7 @@ A generic startup script in `/usr/pkg/share/examples/rc.d` looks like:
 
     
 
-<!-- XXX: I don't think we actually look in /usr/pkg/share/examples/rc.d -->
-
-The startup scripts of DragonFly will look in `/usr/pkg/share/examples/rc.d` for scripts that have an `.sh` extension and are executable by `root`. Those scripts that are found are called with an option `start` at startup, and `stop` at shutdown to allow them to carry out their purpose. So if you wanted the above sample script to be picked up and run at the proper time during system startup, you should save it to a file called `FooBar.sh` in `/usr/local/etc/rc.d` and make sure it is executable. You can make a shell script executable with [chmod(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chmod&section=1) as shown below:
+You can make a shell script executable with [chmod(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chmod&section=1) as shown below:
 
     
 
@@ -182,7 +193,7 @@ Some services expect to be invoked by [inetd(8)](http://leaf.dragonflybsd.org/cg
 
 Some additional system services may not be covered by the toggles in `/etc/rc.conf`. These are traditionally enabled by placing the command(s) to invoke them in `/etc/rc.local` (which does not exist by default). Note that `rc.local` is generally regarded as the location of last resort; if there is a better place to start a service, do it there.
 
- **Note:** Do ***not*** place any commands in `/etc/rc.conf`. To start daemons, or run any commands at boot time, place a script in `/usr/pkg/share/examples/rc.d` instead.
+ **Note:** Do ***not*** place any commands in `/etc/rc.conf`. To start daemons, or run any commands at boot time, place a script in `/usr/local/etc/rc.d` instead, or put special command sequences in `/etc/rc.local`, depending on the situation.
 
 It is also possible to use the [cron(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=cron&section=8) daemon to start system services. This approach has a number of advantages, not least being that because [cron(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=cron&section=8) runs these processes as the owner of the `crontab`, services may be started and maintained by non-`root` users.
 
@@ -194,8 +205,6 @@ CategoryHandbook-configuration
 
 ## Configuring the cron Utility 
 
-<!-- XXX: can't really comment on this. someone please revise it -->
-
 ***Contributed by Tom Rhodes. ***
 
 One of the most useful utilities in DragonFly is [cron(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=cron&section=8). The `cron` utility runs in the background and constantly checks the `/etc/crontab` file. The `cron` utility also checks the `/var/cron/tabs` directory, in search of new `crontab` files. These `crontab` files store information about specific functions which `cron` is supposed to perform at certain times.
@@ -412,41 +421,12 @@ Nowadays we can not think about a computer without thinking about a network conn
 
 ### Locating the Correct Driver 
 
-Before you begin, you should know the model of the card you have, the chip it uses, and whether it is a PCI or ISA card. DragonFly supports a wide variety of both PCI and ISA cards. Check the Hardware Compatibility List for your release to see if your card is supported.
-
-Once you are sure your card is supported, you need to determine the proper driver for the card. The file `/usr/src/sys/i386/conf/LINT` will give you the list of network interfaces drivers with some information about the supported chipsets/cards. If you have doubts about which driver is the correct one, read the manual page of the driver. The manual page will give you more information about the supported hardware and even the possible problems that could occur.
-
-If you own a common card, most of the time you will not have to look very hard for a driver. Drivers for common network cards are present in the `GENERIC` kernel, so your card should show up during boot, like so:
-
-    
-
-    dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
-
-    000ff irq 15 at device 11.0 on pci0
-
-    dc0: Ethernet address: 00:a0:cc:da:da:da
-
-    miibus0: <MII bus> on dc0
-
-    ukphy0: <Generic IEEE 802.3u media interface> on miibus0
-
-    ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
-
-    dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
-
-    000ff irq 11 at device 12.0 on pci0
+Most common network chipsets are built into the kernel by default and will simply show up when
+you run the `ifconfig` command.  In situations where the NIC does not show up, if the chipset is supported by DragonFly, you may have to load the appropriate driver using `kldload if_<blah>` and see if it shows up.  You can load modules at boot time by putting the line `<modulename>_load="YES"` in `/boot/loader.conf`.  For example `if_emx_load="YES"`.  Available drivers can be found using ls as follows: `ls /boot/kernel/if*.ko`.
 
-    dc1: Ethernet address: 00:a0:cc:da:da:db
+If you have doubts about which driver is the correct one, read the manual page of the driver. The manual page will give you more information about the supported hardware and even the possible problems that could occur.
 
-    miibus1: <MII bus> on dc1
-
-    ukphy1: <Generic IEEE 802.3u media interface> on miibus1
-
-    ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
-
-In this example, we see that two cards using the [dc(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=dc&section=4) driver are present on the system.
-
-To use your network card, you will need to load the proper driver. This may be accomplished in one of two ways. The easiest way is to simply load a kernel module for your network card with [kldload(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=kldload&section=8). A module is not available for all network card drivers (ISA cards and cards using the [ed(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=ed&section=4) driver, for example). Alternatively, you may statically compile the support for your card into your kernel. Check `/usr/src/sys/i386/conf/LINT` and the manual page of the driver to know what to add in your kernel configuration file. For more information about recompiling your kernel, please see [kernelconfig.html Chapter 9]. If your card was detected at boot by your kernel (`GENERIC`) you do not have to build a new kernel.
+In this example, we see that two cards using the [em(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=em&section=4) driver are present on the system.
 
 ### Configuring the Network Card 
 
@@ -458,7 +438,7 @@ To display the configuration for the network interfaces on your system, enter th
 
     % ifconfig
 
-    dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+    em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 
             inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
 
@@ -468,7 +448,7 @@ To display the configuration for the network interfaces on your system, enter th
 
             status: active
 
-    dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
+    em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 
             inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
 
@@ -490,9 +470,9 @@ To display the configuration for the network interfaces on your system, enter th
 
 In this example, the following devices were displayed:
 
-* `dc0`: The first Ethernet interface
+* `em0`: The first Ethernet interface
 
-* `dc1`: The second Ethernet interface
+* `em1`: The second Ethernet interface
 
 * `lp0`: The parallel port interface
 
@@ -502,7 +482,7 @@ In this example, the following devices were displayed:
 
 DragonFly uses the driver name followed by the order in which one the card is detected at the kernel boot to name the network card, starting the count at zero. For example, `sis2` would be the third network card on the system using the [sis(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=sis&section=4) driver.
 
-In this example, the `dc0` device is up and running. The key indicators are:
+In this example, the `em0` device is up and running. The key indicators are:
 
   1. `UP` means that the card is configured and ready.
 
@@ -522,7 +502,7 @@ If the [ifconfig(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=ifconfig&s
 
     
 
-    dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
+    em0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
 
                ether 00:a0:cc:da:da:da
 
@@ -532,7 +512,7 @@ To configure your card, you need `root` privileges. The network card configurati
 
     
 
-    # ifconfig dc0 inet 192.168.1.3 netmask 255.255.255.0
+    # ifconfig em0 inet 192.168.1.3 netmask 255.255.255.0
 
 Manually configuring the care has the disadvantage that you would have to do it after each reboot of the system. The file `/etc/rc.conf` is where to add the network card's configuration.
 
@@ -540,15 +520,15 @@ Open `/etc/rc.conf` in your favorite editor. You need to add a line for each net
 
     
 
-    ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
+    ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
 
-    ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
+    ifconfig_em1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
 
-You have to replace `dc0`, `dc1`, and so on, with the correct device for your cards, and the addresses with the proper ones. You should read the card driver and [ifconfig(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#ifconfig&section8) manual pages for more details about the allowed options and also [rc.conf(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=rc.conf&section=5) manual page for more information on the syntax of `/etc/rc.conf`.
+You have to replace `em0`, `em1`, and so on, with the correct device for your cards, and the addresses with the proper ones. You should read the card driver and [ifconfig(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#ifconfig&section8) manual pages for more details about the allowed options and also [rc.conf(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=rc.conf&section=5) manual page for more information on the syntax of `/etc/rc.conf`.
 
 If you configured the network during installation, some lines about the network card(s) may be already present. Double check `/etc/rc.conf` before adding any lines.
 
-You will also have to edit the file `/etc/hosts` to add the names and the IP addresses of various machines of the LAN, if they are not already there. For more information please refer to [hosts(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=hosts&section=5) and to `/usr/share/examples/etc/hosts`.
+You may also have to edit the file `/etc/hosts` to add the names and the IP addresses of various machines of the LAN, if they are not already there. For more information please refer to [hosts(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=hosts&section=5) and to `/usr/share/examples/etc/hosts`.  The use of `/etc/hosts` is not encouraged.  Instead, a DNS resolver should be specified in `/etc/resolv.conf` (see the manual page for /etc/resolv.conf).
 
 ### Testing and Troubleshooting 
 
@@ -618,7 +598,7 @@ You could also use the machine name instead of `192.168.1.2` if you have set up
 
 Troubleshooting hardware and software configurations is always a pain, and a pain which can be alleviated by checking the simple things first. Is your network cable plugged in? Have you properly configured the network services? Did you configure the firewall correctly? Is the card you are using supported by DragonFly? Always check the hardware notes before sending off a bug report. Update your version of DragonFly to the latest PREVIEW version. Check the mailing list archives, or perhaps search the Internet.
 
-If the card works, yet performance is poor, it would be worthwhile to read over the [tuning(7)](http://leaf.dragonflybsd.org/cgi/web-man?command=tuning&section=7) manual page. You can also check the network configuration as incorrect network settings can cause slow connections.
+If the card works, yet performance is poor, it would be worthwhile to read over the [tuning(7)](http://leaf.dragonflybsd.org/cgi/web-man?command=tuning&section=7) manual page. You can also check the network configuration as incorrect network settings can cause slow connections.  Under DragonFly, network interfaces universally default to a highest-performance configuration, but extreme network conditions may require some tuning for optimal results.
 
 Some users experience one or two ***device timeouts***, which is normal for some cards. If they continue, or are bothersome, you may wish to be sure the device is not conflicting with another device. Double check the cable connections. Perhaps you may just need to get another card.
 
@@ -723,7 +703,7 @@ If you are using DHCP, [dhclient(8)](http://leaf.dragonflybsd.org/cgi/web-man?co
 
 #### /etc/hosts 
 
-`/etc/hosts` is a simple text database reminiscent of the old Internet. It works in conjunction with DNS and NIS providing name to IP address mappings. Local computers connected via a LAN can be placed in here for simplistic naming purposes instead of setting up a [named(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=named&section=8) server. Additionally, `/etc/hosts` can be used to provide a local record of Internet names, reducing the need to query externally for commonly accessed names.
+`/etc/hosts` is a simple text database reminiscent of the old Internet. It works in conjunction with DNS and NIS providing name to IP address mappings. Local computers connected via a LAN can be placed in here for simplistic naming purposes instead of setting up a [named(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=named&section=8) server. Additionally, `/etc/hosts` can be used to provide a local record of Internet names, reducing the need to query externally for commonly accessed names.  We do not recommend using this file.  DNS is the better choice for most purposes.
 
     
 
@@ -998,10 +978,6 @@ Fixing the problem mentioned above would require a user to set `hw.pci.allow_uns
 
 ### Sysctl Variables 
 
-#### `vfs.vmiodirenable` 
-
-The `vfs.vmiodirenable` sysctl variable may be set to either 0 (off) or 1 (on); it is 1 by default. This variable controls how directories are cached by the system. Most directories are small, using just a single fragment (typically 1 K) in the file system and less (typically 512 bytes) in the buffer cache. With this variable turned off (to 0), the buffer cache will only cache a fixed number of directories even if ou have a huge amount of memory. When turned on (to 1), this sysctl allows the buffer cache to use the VM Page Cache to cache the directories, making all the memory available for caching directories. However, the minimum in-core memory used to cache a directory is the physical page size (typically 4 K) rather than 512  bytes. We recommend keeping this option on if you are running any services which manipulate large numbers of files. Such services can include web caches, large mail systems, and news systems. Keeping this option on will generally not reduce performance even with the wasted memory but you should experiment to find out.
-
 #### `vfs.write_behind` 
 
 The `vfs.write_behind` sysctl variable defaults to `1` (on). This tells the file system to issue media writes as full clusters are collected, which typically occurs when writing large sequential files. The idea is to avoid saturating the buffer cache with dirty buffers when it would not benefit I/O performance. However, this may stall processes and under certain circumstances you may wish to turn it off.
@@ -1016,48 +992,16 @@ There are various other buffer-cache and VM page cache related sysctls. We do no
 
 The `vm.swap_idle_enabled` sysctl variable is useful in large multi-user systems where you have lots of users entering and leaving the system and lots of idle processes. Such systems tend to generate a great deal of continuous pressure on free memory reserves. Turning this feature on and tweaking the swapout hysteresis (in idle seconds) via `vm.swap_idle_threshold1` and `vm.swap_idle_threshold2` allows you to depress the priority of memory pages associated with idle processes more quickly then the normal pageout algorithm. This gives a helping hand to the pageout daemon. Do not turn this option on unless you need it, because the tradeoff you are making is essentially pre-page memory sooner rather than later; thus eating more swap and disk bandwidth. In a small system this option will have a determinable effect but in a large system that is already doing moderate paging this option allows the VM system to stage whole processes into and out of memory easily.
 
-#### `hw.ata.wc` 
-
-IDE drives lie about when a write completes. With IDE write caching turned on, IDE hard drives not only write data to disk out of order, but will sometimes delay writing some blocks indefinitely when under heavy disk loads. A crash or power failure may cause serious file system corruption. Turning off write caching will remove the danger of this data loss, but will also cause disk operations to proceed ***very slowly.*** Change this only if prepared to suffer with the disk slowdown.
-
-Changing this variable must be done from the boot loader at boot time. Attempting to do it after the kernel boots will have no effect.
-
-For more information, please see [ata(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=ata&section=4) manual page.
-
-<!-- XXX: add some more sysctls, e.g. relating to AHCI, nata, ... -->
-
-### Soft Updates 
-
-**Note** that soft updates are only available on UFS.
-
-The [tunefs(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=tunefs&section=8) program can be used to fine-tune a UFS file system. This program has many different options, but for now we are only concerned with toggling Soft Updates on and off, which is done by:
-
-    
-
-    # tunefs -n enable /filesystem
-
-    # tunefs -n disable /filesystem
-
-A filesystem cannot be modified with [tunefs(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=tunefs&section=8) while it is mounted. A good time to enable Soft Updates is before any partitions have been mounted, in single-user mode.
-
- **Note:** It is possible to enable Soft Updates at filesystem creation time, through use of the `-U` option to [newfs(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=newfs&section=8).
-
-Soft Updates drastically improves meta-data performance, mainly file creation and deletion, through the use of a memory cache. We recommend to use Soft Updates on all of your file systems. There are two downsides to Soft Updates that you should be aware of: First, Soft Updates guarantees filesystem consistency in the case of a crash but could very easily be several seconds (even a minute!) behind updating the physical disk. If your system crashes you may lose more work than otherwise. Secondly, Soft Updates delays the freeing of filesystem blocks. If you have a filesystem (such as the root filesystem) which is almost full, performing a major update, such as `make installworld`, can cause the filesystem to run out of space and the update to fail.
-
-#### More Details about Soft Updates 
-<!-- XXX: consider axing this section -->
+This option should only be used when default paging activities are insufficient.
 
-There are two traditional approaches to writing a file systems meta-data back to disk. (Meta-data updates are updates to non-content data like inodes or directories.)
+#### kern.cam.da.0.trim_enabled
 
-Historically, the default behavior was to write out meta-data updates synchronously. If a directory had been changed, the system waited until the change was actually written to disk. The file data buffers (file contents) were passed through the buffer cache and backed up to disk later on asynchronously. The advantage of this implementation is that it operates safely. If there is a failure during an update, the meta-data are always in a consistent state. A file is either created completely or not at all. If the data blocks of a file did not find their way out of the buffer cache onto the disk by the time of the crash, [fsck(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#fsck&section8) is able to recognize this and repair the filesystem by setting the file length to 0. Additionally, the implementation is clear and simple. The disadvantage is that meta-data changes are slow. An `rm -r`, for instance, touches all the files in a directory sequentially, but each directory change (deletion of a file) will be written synchronously to the disk. This includes updates to the directory itself, to the inode table, and possibly to indirect blocks allocated by the file. Similar considerations apply for unrolling large hierarchies (`tar -x`).
+AHCI storage devices on which you wish to allow TRIM operations must have trim enabled via the associated sysctl.
 
-The second case is asynchronous meta-data updates. This is the default for Linux/ext2fs and `mount -o async` for *BSD ufs. All meta-data updates are simply being passed through the buffer cache too, that is, they will be intermixed with the updates of the file content data. The advantage of this implementation is there is no need to wait until each meta-data update has been written to disk, so all operations which cause huge amounts of meta-data updates work much faster than in the synchronous case. Also, the implementation is still clear and simple, so there is a low risk for bugs creeping into the code. The disadvantage is that there is no guarantee at all for a consistent state of the filesystem. If there is a failure during an operation that updated large amounts of meta-data (like a power failure, or someone pressing the reset button), the filesystem will be left in an unpredictable state. There is no opportunity to examine the state of the filesystem when the system comes up again; the data blocks of a file could already have been written to the disk while the updates of the inode table or the associated directory were not. It is actually impossible to implement a `fsck` which is able to clean up the resulting chaos (because the necessary information is not available on the disk). If the filesystem has been damaged beyond repair, the only choice is to use [newfs(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#newfs&section8) on it and restore it from backup.
+#### dev.ahci.0.0.link_pwr_mgmt
 
-The usual solution for this problem was to implement ***dirty region logging***, which is also referred to as ***journaling***, although that term is not used consistently and is occasionally applied to other forms of transaction logging as well. Meta-data updates are still written synchronously, but only into a small region of the disk. Later on they will be moved to their proper location. Because the logging area is a small, contiguous region on the disk, there are no long distances for the disk heads to move, even during heavy operations, so these operations are quicker than synchronous updates. Additionally the complexity of the implementation is fairly limited, so the risk of bugs being present is low. A disadvantage is that all meta-data are written twice (once into the logging region and once to the proper location) so for normal work, a performance ***pessimization*** might result. On the other hand, in case of a crash, all pending meta-data operations can be quickly either rolled-back or completed from the logging area after the system comes up again, resulting in a fast filesystem startup.
+On laptops, link power management can reduce power consumption at the cost of slow reaction time when coming out of idle.  This will show up under the dev.ahci sysctl family.  If enabling link power management results in instability or freezes you should not enable the option.
 
-Kirk McKusick, the developer of Berkeley FFS, solved this problem with Soft Updates: all pending meta-data updates are kept in memory and written out to disk in a sorted sequence (***ordered meta-data updates***). This has the effect that, in case of heavy meta-data operations, later updates to an item ***catch*** the earlier ones if the earlier ones are still in memory and have not already been written to disk. So all operations on, say, a directory are generally performed in memory before the update is written to disk (the data blocks are sorted according to their position so that they will not be on the disk ahead of their meta-data). If the system crashes, this causes an implicit ***log rewind***: all operations which did not find their way to the disk appear as if they had never happened. A consistent filesystem state is maintained that appears to be the one of 30 to 60 seconds earlier. The algorithm used guarantees that all resources in use are marked as such in their appropriate bitmaps: blocks and inodes. After a crash, the only resource allocation error that occurs is that resources are marked as ***used*** which are actually ***free***. [fsck(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#fsck&section8) recognizes this situation, and frees the resources that are no longer used. It is safe to ignore the dirty state of the filesystem after a crash by forcibly mounting it with `mount -f`. In order to free resources that may be unused, [fsck(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=fsck&section=8) needs to be run at a later time.
-
-The advantage is that meta-data operations are nearly as fast as asynchronous updates (i.e. faster than with ***logging***, which has to write the meta-data twice). The disadvantages are the complexity of the code (implying a higher risk for bugs in an area that is highly sensitive regarding loss of user data), and a higher memory consumption. Additionally there are some idiosyncrasies one has to get used to. After a crash, the state of the filesystem appears to be somewhat ***older***. In situations where the standard synchronous approach would have caused some zero-length files to remain after the `fsck`, these files do not exist at all with a Soft Updates filesystem because neither the meta-data nor the file contents have ever been written to disk. Disk space is not released until the updates have been written to disk, which may take place some time after running `rm`. This may cause problems when installing large amounts of data on a filesystem that does not have enough free space to hold all the files twice.
 
 ## Tuning Kernel Limits 
 
@@ -1065,59 +1009,59 @@ The advantage is that meta-data operations are nearly as fast as asynchronous up
 
 #### `kern.maxfiles` 
 
-<!-- XXX: revise this section; someone who knows about it -->
-
 `kern.maxfiles` can be raised or lowered based upon your system requirements. This variable indicates the maximum number of file descriptors on your system. When the file descriptor table is full, ***`file: table is full`*** will show up repeatedly in the system message buffer, which can be viewed with the `dmesg` command.
 
 Each open file, socket, or fifo uses one file descriptor. A large-scale production server may easily require many thousands of file descriptors, depending on the kind and number of services running concurrently.
 
-`kern.maxfile`'s default value is dictated by the `MAXUSERS` option in your kernel configuration file. `kern.maxfiles` grows proportionally to the value of `MAXUSERS`. When compiling a custom kernel, it is a good idea to set this kernel configuration option according to the uses of your system. From this number, the kernel is given most of its pre-defined limits. Even though a production machine may not actually have 256 users connected at once, the resources needed may be similar to a high-scale web server.
-
- **Note:** Setting `MAXUSERS` to `0` in your kernel configuration file will choose a reasonable default value based on the amount of RAM present in your system. It is set to 0 in the default GENERIC kernel.
+`kern.maxfile`'s default value is dictated by available system memory and is typically very generous.
 
 #### `kern.ipc.somaxconn` 
 
 The `kern.ipc.somaxconn` sysctl variable limits the size of the listen queue for accepting new TCP connections. The default value of `128` is typically too low for robust handling of new connections in a heavily loaded web server environment. For such environments, it is recommended to increase this value to `1024` or higher. The service daemon may itself limit the listen queue size (e.g. [sendmail(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=sendmail&section=8), or  **Apache** ) but will often have a directive in its configuration file to adjust the queue size. Large listen queues also do a better job of avoiding Denial of Service (DoS) attacks.
 
-### Network Limits 
+### Network Limits
 
-The `NMBCLUSTERS` kernel configuration option dictates the amount of network Mbufs available to the system. A heavily-trafficked server with a low number of Mbufs will hinder DragonFly's ability. Each cluster represents approximately 2 K of memory, so a value of 1024 represents 2 megabytes of kernel memory reserved for network buffers. A simple calculation can be done to figure out how many are needed. If you have a web server which maxes out at 1000 simultaneous connections, and each connection eats a 16 K receive and 16 K send buffer, you need approximately 32 MB worth of network buffers to cover the web server. A good rule of thumb is to multiply by 2, so 2x32 MB / 2 KB # 64 MB / 2 kB  32768. We recommend values between 4096 and 32768 for machines with greater amounts of memory. Under no circumstances should you specify an arbitrarily high value for this parameter as it could lead to a boot time crash. The `-m` option to [netstat(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=netstat&section=1) may be used to observe network cluster use. `kern.ipc.nmbclusters` loader tunable should be used to tune this at boot time.
+The `kern.ipc.nmbclusters` and `kern.ipc.nmbjclusters` tunables (placed in `/boot/loader.conf`) can be used to override the default number of normal clusters and jumbo clusters the network is allowed to use.  Default values are typically based on system memory and quite generous.
 
-<!-- XXX: mention kern.ipc.mbufs sysctl -->
+A heavily-trafficked server with a low number of Mbufs will hinder DragonFly's ability. Each cluster represents approximately 2 K of memory, so a value of 1024 represents 2 megabytes of kernel memory reserved for network buffers. A simple calculation can be done to figure out how many are needed. If you have a web server which maxes out at 1000 simultaneous connections, and each connection eats a 16 K receive and 16 K send buffer, you need approximately 32 MB worth of network buffers to cover the web server. A good rule of thumb is to multiply by 2, so 2x32 MB / 2 KB # 64 MB / 2 kB  32768.
 
-For busy servers that make extensive use of the [sendfile(2)](http://leaf.dragonflybsd.org/cgi/web-man?command=sendfile&section=2) system call, it may be necessary to increase the number of [sendfile(2)](http://leaf.dragonflybsd.org/cgi/web-man?command=sendfile&section=2) buffers via the `NSFBUFS` kernel configuration option or by setting its value in `/boot/loader.conf` (see [loader(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=loader&section=8) for details). A common indicator that this parameter needs to be adjusted is when processes are seen in the `sfbufa` state. The sysctl variable `kern.ipc.nsfbufs` is a read-only glimpse at the kernel configured variable. This parameter nominally scales with `kern.maxusers`, however it may be necessary to tune accordingly.
+Under no circumstances should you specify an arbitrarily high value for this parameter as it could lead to a boot time crash or run the system out of memory. The `-m` option to [netstat(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=netstat&section=1) may be used to observe network cluster use. `kern.ipc.nmbclusters` loader tunable should be used to tune this at boot time.
 
- **Important:** Even though a socket has been marked as non-blocking, calling [sendfile(2)](http://leaf.dragonflybsd.org/cgi/web-man?command=sendfile&section=2) on the non-blocking socket may result in the [sendfile(2)](http://leaf.dragonflybsd.org/cgi/web-man?command=sendfile&section=2) call blocking until enough `struct sf_buf`'s are made available.
+The `kern.ipc.nmbufs` specified the number of small mbufs for the network, most often used to store network headers and small packets.  Default values are typically very generous and do not need to be overridden.
 
 #### `net.inet.ip.portrange.*` 
 
 The `net.inet.ip.portrange.*` sysctl variables control the port number ranges automatically bound to TCP and UDP sockets. There are three ranges: a low range, a default range, and a high range. Most network programs use the default range which is controlled by the `net.inet.ip.portrange.first` and `net.inet.ip.portrange.last`, which default to 1024 and 5000, respectively. Bound port ranges are used for outgoing connections, and it is possible to run the system out of ports under certain circumstances. This most commonly occurs when you are running a heavily loaded web proxy. The port range is not an issue when running servers which handle mainly incoming connections, such as a normal web server, or has a limited number of outgoing connections, such as a mail relay. For situations where you may run yourself out of ports, it is recommended to increase `net.inet.ip.portrange.last` modestly. A value of `10000`, `20000` or `30000` may be reasonable. You should also consider firewall effects when changing the port range. Some firewalls may block large ranges of ports (usually low-numbered ports) and expect systems to use higher ranges of ports for outgoing connections -- for this reason it is recommended that `net.inet.ip.portrange.first` be lowered.
 
 #### TCP Bandwidth Delay Product 
-<!-- XXX: Revise this stuff, I'm not familiar with it -->
 
-The TCP Bandwidth Delay Product Limiting is similar to TCP/Vegas in NetBSD. It can be enabled by setting `net.inet.tcp.inflight_enable` sysctl variable to `1`. The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput.
+The TCP Bandwidth Delay Product Limiting is similar to TCP/Vegas in NetBSD. It is enabled by default but can be disabled by setting `net.inet.tcp.inflight_enable` sysctl variable to `0`. The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput.
 
-This feature is useful if you are serving data over modems, Gigabit Ethernet, or even high speed WAN links (or any other link with a high bandwidth delay product), especially if you are also using window scaling or have configured a large send window. If you enable this option, you should also be sure to set `net.inet.tcp.inflight_debug` to `0` (disable debugging), and for production use setting `net.inet.tcp.inflight_min` to at least `6144` may be beneficial. However, note that setting high minimums may effectively disable bandwidth limiting depending on the link. The limiting feature reduces the amount of data built up in intermediate route and switch packet queues as well as reduces the amount of data built up in the local host's interface queue. With fewer packets queued up, interactive connections, especially over slow modems, will also be able to operate with lower ***Round Trip Times***. However, note that this feature only effects data transmission (uploading / server side). It has no effect on data reception (downloading).
+This feature is useful if you are serving large amounts of data concurrently, such as a media server might do, particularly when the packets are constricted by a WAN, especially if you are also using window scaling or have configured a large send window.  For production use changing `net.inet.tcp.inflight_min` may be beneficial. However, note that setting high minimums may effectively disable bandwidth limiting depending on the link. The limiting feature reduces the amount of data built up in intermediate route and switch packet queues as well as reduces the amount of data built up in the local host's interface queue. With fewer packets queued up, interactive connections, especially over slow modems, will also be able to operate with lower ***Round Trip Times***. However,  this feature only effects data transmission (uploading / server side). It has no effect on data reception (downloading).
 
-Adjusting `net.inet.tcp.inflight_stab` is ***not*** recommended. This parameter defaults to 20, representing 2 maximal packets added to the bandwidth delay product window calculation. The additional window is required to stabilize the algorithm and improve responsiveness to changing conditions, but it can also result in higher ping times over slow links (though still much lower than you would get without the inflight algorithm). In such cases, you may wish to try reducing this parameter to 15, 10, or 5; and may also have to reduce `net.inet.tcp.inflight_min` (for example, to 3500) to get the desired effect. Reducing these parameters should be done as a last resort only.
+Adjusting `net.inet.tcp.inflight_stab` is ***not*** recommended. This parameter defaults to 50, representing 4 maximal packets added to the bandwidth delay product window calculation. The additional window is required to stabilize the algorithm and improve responsiveness to changing conditions, but it can also result in higher ping times over slow links (though still much lower than you would get without the inflight algorithm). In such cases, you may wish to try reducing this parameter to 30, 15, 10, or 5; and may also have to reduce `net.inet.tcp.inflight_min` (for example, to 3500) to get the desired effect. Reducing these parameters should be done as a last resort only.
 
 ## Adding Swap Space 
-<!-- XXX: swapcache -->
 
-No matter how well you plan, sometimes a system does not run as you expect. If you find you need more swap space, it is simple enough to add. You have three ways to increase swap space: adding a new hard drive, enabling swap over NFS, and creating a swap file on an existing partition.
+No matter how well you plan, sometimes a system does not run as you expect. If you find you need more swap space, it is simple enough to add.  A second situation that arises is when a system has a small SSD and a large HDD where using [swapcache(8)] (http://leaf.dragonflybsd.org/cgi/web-man?command=swapcache&section=8) might be useful.
 
-### Swap on a New Hard Drive 
+You have three ways to increase swap space: paging to a fast storage device, enabling swap over NFS, and creating a swap file on an existing partition.
 
-The best way to add swap, of course, is to use this as an excuse to add another hard drive. You can always use another hard drive, after all. If you can do this, go reread the discussion about swap space in [configtuning-initial.html Section 6.2] for some suggestions on how to best arrange your swap.
+### Swap on a New Storage Device
+
+The best way to add swap, of course, is to use this as an excuse to add a SSD or HDD to system. You can always use another storage device, after all. If you can do this, go reread the discussion about swap space in [configtuning-initial.html Section 6.2] for some suggestions on how to best arrange your swap.  By convention, DragonFly recommends that swap always use the 'b' partition in a disklabel to avoid accidents.
 
 ### Swapping over NFS 
 
 Swapping over NFS is only recommended if you do not have local storage to swap to. Even though DragonFly has an excellent NFS implementation, NFS swapping will be limited by the available network bandwidth and puts an additional burden on the NFS server.
 
+Swapping on a file over NFS can be done simply via `swapon <filepath>`.  It is recommended that this command be placed in /etc/rc.local.
+
+DragonFly only recommends swap on actual storage devices.  DragonFly does not recommend NFS-based swap.  If you do use NFS-based swap the swap file on the NFS server may require special configuration to prevent block reallocation by the underlying filesystem (which can destroy performance or fill up the drive).  On UFS, pre-zero the swap file.  On HAMMER2, use the `hammer2` command to disable the check code and disable compression on the file in order to disable the normal copy-on-write block reallocation operation.
+
 ### Swapfiles 
 
-We do NOT recommend swapping to a file.  At best you can use this technique to swap to a file over NFS, but generally speaking paging to a file can lead to system deadlocks in low-memory situations due to resources needed by the filesystem itself to execute the paging operation.
+DragonFly does NOT recommend swapping to a file.  At best you can use this technique to swap to a file over NFS, but generally speaking paging to a file can lead to system deadlocks in low-memory situations due to resources needed by the filesystem itself to execute the paging operation.  It just isn't a good idea.
 
 You can create a file of a specified size to use as a swap file. In our example here we will use a 64M file called `/usr/swap0`. You can use any name you want, of course.  On a real system you will want to size the swap to at least be the same as the amount of physical ram in the machine, and as already mentioned, we do NOT recommend swapping to a file due to the deadlock risk.
 
@@ -1174,21 +1118,11 @@ In this section, we will provide comprehensive information about ACPI. Reference
 
 ### What Is ACPI? 
 
-Advanced Configuration and Power Interface (ACPI) is a standard written by an alliance of vendors to provide a standard interface for hardware resources and power management (hence the name). It is a key element in ***Operating System-directed configuration and Power Management***, i.e.: it provides more control and flexibility to the operating system (OS). Modern systems ***stretched*** the limits of the current Plug and Play interfaces (such as APM), prior to the introduction of ACPI. ACPI is the direct successor to APM (Advanced Power Management).
-
-### Shortcomings of Advanced Power Management (APM) 
-
-The ***Advanced Power Management (APM)*** facility control's the power usage of a system based on its activity. The APM BIOS is supplied by the (system) vendor and it is specific to the hardware platform. An APM driver in the OS mediates access to the ***APM Software Interface***, which allows management of power levels.
-
-There are four major problems in APM. Firstly, power management is done by the (vendor-specific) BIOS, and the OS does not have any knowledge of it. One example of this, is when the user sets idle-time values for a hard drive in the APM BIOS, that when exceeded, it (BIOS) would spin down the hard drive, without the consent of the OS. Secondly, the APM logic is embedded in the BIOS, and it operates outside the scope of the OS. This means users can only fix problems in their APM BIOS by flashing a new one into the ROM; which, is a very dangerous procedure, and if it fails, it could leave the system in an unrecoverable state. Thirdly, APM is a vendor-specific technology, which, means that there is a lot or parity (duplication of efforts) and bugs found in one vendor's BIOS, may not be solved in others. Last but not the least, the APM BIOS did not have enough room to implement a sophisticated power policy, or one that can adapt very well to the purpose of the machine.
-
-***Plug and Play BIOS (PNPBIOS)*** was unreliable in many situations. PNPBIOS is 16-bit technology, so the OS has to use 16-bit emulation in order to ***interface*** with PNPBIOS methods.
-
-The DragonFly APM driver is documented in the [apm(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=apm&section=4) manual page.
+Advanced Configuration and Power Interface (ACPI) is a standard written by an alliance of vendors to provide a standard interface for hardware resources and power management (hence the name). It is a key element in ***Operating System-directed configuration and Power Management***, i.e.: it provides more control and flexibility to the operating system (OS). Modern systems ***stretched*** the limits of the current Plug and Play interfaces (such as APM), prior to the introduction of ACPI. ACPI is the direct successor to APM (Advanced Power Management).  In DragonFly, ACPI is now mandatory and APM is no longer used.
 
 ### Configuring ACPI 
 
-The `acpi.ko` driver is loaded by default at start up by the [loader(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=loader&section=8) and should ***not*** be compiled into the kernel. The reasoning behind this is that modules are easier to work with, say if switching to another `acpi.ko` without doing a kernel rebuild. This has the advantage of making testing easier. Another reason is that starting ACPI after a system has been brought up is not too useful, and in some cases can be fatal. In doubt, just disable ACPI all together. This driver should not and can not be unloaded because the system bus uses it for various hardware interactions. ACPI can be disabled with the [acpiconf(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=acpiconf&section=8) utility. In fact most of the interaction with ACPI can be done via [acpiconf(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=acpiconf&section=8). Basically this means, if anything about ACPI is in the [dmesg(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=dmesg&section=8) output, then most likely it is already running.
+The `acpi.ko` driver is now always compiled into the kernel and present by default.  Most systems simply will not operate properly without it.
 
  **Note:** ACPI and APM cannot coexist and should be used separately. The last one to load will terminate if the driver notices the other running.
 
@@ -1271,7 +1205,7 @@ Most system hangs are a result of lost interrupts or an interrupt storm. Chipset
 
 Interrupt storms can be distinguished from lost interrupts by checking the output of `vmstat -i` and looking at the line that has `acpi0`. If the counter is increasing at more than a couple per second, you have an interrupt storm. If the system appears hung, try breaking to DDB ( **CTRL** + **ALT** + **ESC**  on console) and type `show interrupts`.
 
-Your best hope when dealing with interrupt problems is to try disabling APIC support with `hint.apic.0.disabled="1"` in `loader.conf`.
+Your best hope when dealing with interrupt problems is to get developer help via the bug reporting system or #dragonflybsd on irc.efnet.org.
 
 #### Panics 
 
@@ -1287,69 +1221,13 @@ First, try setting `hw.acpi.disable_on_poweroff#0` in [loader.conf(5)](http://le
 
 If you have other problems with ACPI (working with a docking station, devices not detected, etc.), please email a description to the mailing list as well; however, some of these issues may be related to unfinished parts of the ACPI subsystem so they might take a while to be implemented. Please be patient and prepared to test patches we may send you.
 
-### ASL, acpidump, and IASL 
-<!-- XXX: IMHO all this crap about fixing your DSDT etc should  be axed -->
-
-The most common problem is the BIOS vendors providing incorrect (or outright buggy!) bytecode. This is usually manifested by kernel console messages like this:
-
-    
-
-    ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
-
-    (Node 0xc3f6d160), AE_NOT_FOUND
-
-Often, you can resolve these problems by updating your BIOS to the latest revision. Most console messages are harmless but if you have other problems like battery status not working, they're a good place to start looking for problems in the AML. The bytecode, known as AML, is compiled from a source language called ASL. The AML is found in the table known as the DSDT. To get a copy of your ASL, use [acpidump(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=acpidump&section=8). You should use both the `-t` (show contents of the fixed tables) and `-d` (disassemble AML to ASL) options. See the [submitting Debugging Information](acpi-debug.html#ACPI-SUBMITDEBUG) section for an example syntax.
-
-The simplest first check you can do is to recompile your ASL to check for errors. Warnings can usually be ignored but errors are bugs that will usually prevent ACPI from working correctly. To recompile your ASL, issue the following command:
-
-    
-
-    # iasl your.asl
-
-### Fixing Your ASL 
-
-In the long run, our goal is for almost everyone to have ACPI work without any user intervention. At this point, however, we are still developing workarounds for common mistakes made by the BIOS vendors. The Microsoft interpreter (`acpi.sys` and `acpiec.sys`) does not strictly check for adherence to the standard, and thus many BIOS vendors who only test ACPI under Windows never fix their ASL. We hope to continue to identify and document exactly what non-standard behavior is allowed by Microsoft's interpreter and replicate it so DragonFly can work without forcing users to fix the ASL. As a workaround and to help us identify behavior, you can fix the ASL manually. If this works for you, please send a [diff(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=diff&section=1) of the old and new ASL so we can possibly work around the buggy behavior in ACPI-CA and thus make your fix unnecessary.
-
-Here is a list of common error messages, their cause, and how to fix them:
-
-#### OS dependencies 
-
-Some AML assumes the world consists of various Windows versions. You can tell DragonFly to claim it is any OS to see if this fixes problems you may have. An easy way to override this is to set `hw.acpi.osname=Windows 2001` in `/boot/loader.conf` or other similar strings you find in the ASL.
-
-#### Missing Return statements 
-
-Some methods do not explicitly return a value as the standard requires. While ACPI-CA does not handle this, DragonFly has a workaround that allows it to return the value implicitly. You can also add explicit Return statements where required if you know what value should be returned. To force `iasl` to compile the ASL, use the `-f` flag.
-
-#### Overriding the Default AML 
-
-After you customize `your.asl`, you will want to compile it, run:
-   
-
-    # iasl your.asl
-
-You can add the `-f` flag to force creation of the AML, even if there are errors during compilation. Remember that some errors (e.g., missing Return statements) are automatically worked around by the interpreter.
-
-`DSDT.aml` is the default output filename for `iasl`. You can load this instead of your BIOS's buggy copy (which is still present in flash memory) by editing `/boot/loader.conf` as follows:
-
-    
-
-    acpi_dsdt_load="YES"
-
-    acpi_dsdt_name="/boot/DSDT.aml"
-
-Be sure to copy your `DSDT.aml` to the `/boot` directory.
-
 ### Getting Debugging Output From ACPI 
 
 The ACPI driver has a very flexible debugging facility. It allows you to specify a set of subsystems as well as the level of verbosity. The subsystems you wish to debug are specified as ***layers*** and are broken down into ACPI-CA components (ACPI_ALL_COMPONENTS) and ACPI hardware support (ACPI_ALL_DRIVERS). The verbosity of debugging output is specified as the ***level*** and ranges from ACPI_LV_ERROR (just report errors) to ACPI_LV_VERBOSE (everything). The ***level*** is a bitmask so multiple options can be set at once, separated by spaces. In practice, you will want to use a serial console to log the output if it is so long it flushes the console message buffer.
 
-Debugging output is not enabled by default. To enable it, add `options ACPI_DEBUG` to your kernel config if ACPI is compiled into the kernel. You can add `ACPI_DEBUG=1` to your `/etc/make.conf` to enable it globally. If it is a module, you can recompile just your `acpi.ko` module as follows:
-
-    
-
-    # cd /sys/dev/acpica5 && make clean && make ACPI_DEBUG=1
+Debugging output is not enabled by default. To enable it, add `options ACPI_DEBUG` to your kernel config and recompile your kernel. You can add `ACPI_DEBUG=1` to your `/etc/make.conf` to enable it globally.
 
-Install `acpi.ko` in `/boot/kernel` and add your desired level and layer to `loader.conf`. This example enables debug messages for all ACPI-CA components and all ACPI hardware drivers (CPU, LID, etc.) It will only output error messages, the least verbose level.
+Add your desired debug level and layer to `loader.conf`. This example enables debug messages for all ACPI-CA components and all ACPI hardware drivers (CPU, LID, etc.) It will only output error messages, the least verbose level.