The FastCgiConfig directive defines the default parameters for all dynamic FastCGI applications. This directive does not affect static or external applications in any way.

Dynamic applications are not started at server initialization, but upon demand. If the demand is heavy, additional application instances are started. As the demand fades, application instances are killed off. Many of the options govern this process.

Option can be one of (case insensitive):

-appConnTimeout n (0 seconds)

Unix: The number of seconds to wait for a connection to the FastCGI application to complete or 0 to indicate a blocking connect() should be used. Blocking connect()s have an OS dependent internal timeout. If the timeout expires, a SERVER_ERROR results. For non-zero values, this is the amount of time used in a select() to write to the file descriptor returned by a non-blocking connect(). Non-blocking connect()s are troublesome on many platforms. See also -idle-timeout, it produces similar results but in a more portable manner.Windows NT: TCP based applications work as above. Named pipe based applications (static applications configured without the -port option and dynamic applications) use this value successfully to limit the amount of time to wait for a connection (i.e. it’s not “troublesome”). By default, this is 90 seconds (FCGI_NAMED_PIPE_CONNECT_TIMEOUT in mod_fastcgi.h).

-autoUpdate (none)

Causes mod_fastcgi to check the modification time of the application on disk before processing each request. If the application on disk has been changed, the process manager is notified and all running instances of the application are killed off. In general, it’s preferred that this type of functionality be built-in to the application (e.g. every 100th request it checks to see if there’s a newer version on disk and exits if so). There may be an outstanding problem (bug) when this option is used with -restart.

-flush (none)

Force a write to the client as data is received from the application. By default, mod_fastcgi buffers data in order to free the application as quickly as possible.

-gainValue n (0.5)

A floating point value between 0 and 1 used as an exponent in the computation of the exponentially decayed connection times load factor of the currently running dynamic FastCGI applications. Old values are scaled by (1 - gainValue), so making it smaller weights old values more than the current value (which is scaled by gainValue).

-idle-timeout n (30 seconds)

The number of seconds of FastCGI application inactivity allowed before the request is aborted and the event is logged (at the errorLogLevel). The inactivity timer applies only as long as a connection is pending with the FastCGI application. If a request is queued to an application, but the application doesn’t respond (by writing and flushing) within this period, the request will be aborted. If communication is complete with the application but incomplete with the client (the response is buffered), the timeout does not apply.

-initial-env name[=[value]] (none)

A name-value pair to be passed in the initial environment when instances of applications are spawned. To pass a variable from the Apache environment, don’t provide the “=” (if the variable isn’t actually in the environment, it will be defined without a value). To define a variable without a value, provide the “=” without any value. The option can be used repeatedly.

-init-start-delay n (1 second)

The minimum number of seconds between the spawning of instances of applications. This delay decreases the demand placed on the system at server initialization.

-killInterval n (300 seconds)

Determines how often the dynamic application instance killing policy is implemented within the process manager. Smaller numbers result in a more aggressive policy, larger numbers a less aggressive policy.

-listen-queue-depth n (100)

The depth of listen() queue (also known as the backlog) shared by all instances of applications. A deeper listen queue allows the server to cope with transient load fluctuations without rejecting requests; it does not increase throughput. Adding additional application instances may increase throughput/performance, depending upon the application and the host.

-maxClassProcesses n (10)

The maximum number of dynamic FastCGI application instances allowed to run for any one FastCGI application. It must be <= to -maxProcesses (this is not programmatically enforced).

-maxProcesses n (50)

The maximum total number of dynamic FastCGI application instances allowed to run at any one time. It must be >= to -maxClassProcesses (this is not programmatically enforced).

-min-server-life n (30)

The minimum number of seconds a dynamic FastCGI application must run for before its restart interval is increased to 600 seconds. The server will get 3 tries to run for at least this number of seconds.

-minProcesses n (5)

The minimum total number of dynamic FastCGI application instances allowed to run at any one time without being killed off by the process manager (due to lack of demand).

-multiThreshold n (50)

An integer between 0 and 100 used to determine whether any one instance of a FastCGI application should be terminated. If the application has more than one instance currently running, this attribute will be used to decide whether one of them should be terminated. If only one instance remains, singleThreshold is used instead.
For historic reasons the mis-spelling multiThreshhold is also accepted.

-pass-header header (none)

The name of an HTTP Request Header to be passed in the request environment. This option makes available the contents of headers which are normally not available (e.g. Authorization) to a CGI environment.

-priority n (0)

The process priority to be assigned to the application instances (using setpriority()).

-processSlack n (5)

If the sum of the number of all currently running dynamic FastCGI applications and processSlack exceeds maxProcesses, the process manager invokes the killing policy. This is to improve performance at higher loads by killing some of the most inactive application instances before reaching maxProcesses.

The minimum number of seconds between the respawning of failed instances of applications. This delay prevents a broken application from soaking up too much of the system.

-singleThreshold n (0)

An integer between 0 and 100 used to determine whether the last instance of a FastCGI application can be terminated. If the process manager computed load factor for the application is lower than the specified threshold, the last instance is terminated. In order to make your executables run in the “idle” mode for the long time, you would specify a value closer to 1, however if memory or CPU time is of primary concern, a value closer to 100 would be more applicable. A value of 0 will prevent the last instance of an application from being terminated; this is the default value, changing it is not recommended (especially if -appConnTimeout is set).
For historic reasons the mis-spelling singleThreshhold is also accepted.

-startDelay n (3 seconds)

The number of seconds the web server waits patiently while trying to connect to a dynamic FastCGI application. If the interval expires, the process manager is notified with hope it will start another instance of the application. The startDelay must be less than appConnTimeout to be effective.

-updateInterval n (300 seconds)

The updateInterval determines how often statistical analysis is performed to determine the fate of dynamic FastCGI applications.

(link) Adaptec AAR 1200, 1210, 1210SA, 1205SA, 2047600 (2-port) series PCI cards — fakeraid. This turns out to be a Silicon Image 3112-variant or 3112A-variant. Works with a patched version of libata’s sata_sil subdriver (2003-12).

(link) Addonics CardBus PCMCIA cards — fakeraid. Model ADCB2SA-E is a 2-port eSATA-I CardBus card. Model ADCBSA2 is a 2-port SATA-I CardBus card. I so far have no information on their chipsets: This entry is a placeholder.

(link) Broadcom SATA-II cards — fakeraid. As of 2005-09, new cards are expected based on Broadcom’s BCM5773 chip supporting 8-port PCI-X or PCI-Express SATA-II with Broadcom’s XelCore fakeraid. This entry is a placeholder.

(link) HighPoint RocketRAID 1540/1542/1544/1640 & 454 (HPT374 chipset), RocketRAID 1520 (HPT372, HPT372N, or HPT372A chipset), and Rocket 1520 (HPT302N chipset — non-RAID) PCI cards — fakeraid. Supported by drivers/ide’s hpt36x driver, by at latest 2.4.21-pre5. No libata driver exists for these, but Alan Cox is working on one (as of 2006-01). Note: Some recent HighPoint cards use Marvell 88SX50xx chips (for which see separate driver info). Problematic proprietary Linux i386 binary drivers for HighPoint fakeraid (release 2.0 of which is reported to malfunction or even fail to compile on later 2.6 kernels ranging, at least, from 2.6.8 through 2.6.14) are available, but, as usual, you’re better off using Linux’s own open-source “md” software-RAID driver. (Warning: You’ll need to load the proprietary driver only into kernels lacking the conflicting drivers/ide htp36x driver, in the presence of which your system will seize up, at boot time.)

(link) HighPoint RocketRAID 2240 (16-port SATA-II PCI-X), 2220 (8-port SATA-II PCI-X), 2320 (8-port SATA-II PCI Express), 2224 (4-port SATA-II PCI-X) cards — fakeraid. Proprietary binary drivers (2240, 2220, 2320, 2224) can be downloaded from the manufacturer. Correspondent Berkley Shands notes that these cards and proprietary drivers are quite CPU-intensive, even pushing a quad-Opteron system a bit. He also recommended tweaking hpt_reset routine to fix IRQ spinlocks, on 2.6.14/2.6.15 kernels. He achieved a maximum initial read speed of 870MB/sec. on RAID0, using 50% of CPU power. Note that models 2220 and 2240 both try to use (different) proprietary drivers named “hptmv6”. Use command-line rather than GUI RAID setup utility, if there will be more than 8 drives per array. Shands adds: “Just FYI, to get those nice performance numbers, you must set the read-ahead value for the drive and use the POSIX_WILL_NEED function of fadvise(). The default read-ahead is 8 sectors. I use 1024; otherwise, you won’t come anywhere near those numbers.”

(link) HighPoint RocketRAID 2320 (8-port SATA-II PCI Express card) — fakeraid. An proprietary, high-performance “rr232x” driver (source code wrapper around binary-only proprietary core libraries, deceptively claimed to be “open source”) is available from the manufacturer.Garzik mentions that newer HighPoint cards (those that aren’t based on Marvell 88SX50xx chips) pretend they are SCSI and are supported by the “hptiop” driver.

(link) IBM ServeRAID family, e.g. ServeRAID-7t, and 7k PCI and PCI-X cards — real hardware RAID. Prior to the ServeRAID-7 series, units probably worked with the same ips driver as for the SCSI predecessor cards in this family. More info. Somewhere around the ServeRAID 7t, IBM began applying the “ServeRAID” brand to Adaptec-oriented host adapters and Intel ICH-oriented fakeraid (so-called “HostRaid”) ones: E.g., the ServeRAID-7t and 7k are based on an Adaptec 2410SA chip; the ServeRAID-7e uses an Intel ICH5-R fakeraid chip (entries for which, please see). Oddly, support for IBM/Adaptec HostRAID fakeraid format (ServeRAID model 7e) is said to require Adaptec’s proprietary a320raid driver.

(link) ICP Vortex GDT8586RZ (4-port), GDT8546RZ (8-port) series PCI cards — real hardware RAID: Uses Intel 80303 I/O processor and hardware XOR engine dedicated coprocessor, and includes 128MB cache. Works with the kernel’s gdth driver version 3.04 or later. A file of hints on using the gdth driver with sundry distributions is available from ICP Vortex. (Adaptec acquired ICP Vortex — from Intel — in 2003.) One source says these cards are based on Silicon Image 3112 chips, which are probably not the system-facing chipsets, and so don’t determine driver support.

(link) Intel ICH5 / ICH5-R family chips — fakeraid. (See fakeraid support details under Intel ICH6.) Supported in 2.4.22 and later kernels using drivers/ide’s piix driver (but that driver locks up in many cases), and also (much more reliably) in libata’s ata_piix driver, production quality since 2004-02-25. Intel ICH5/ICH6 is an open-standard hardware spec. ICH7/8 usually can be set to be backwards-compatible. “Enhanced mode” or “SATA-only mode” may need to be set in BIOS.Intel produced GPLed patch sets for ICH5 in the 2.4.9 and 2.4.20 kernels of (respectively) Red Hat Advanced Server 2.1 and Red Hat Linux 8.0, available for download as part of its driver set for the 6300ESB I/O Controller Hub South Bridge on its E7520 and 875P motherboard chipsets.

Adaptec has released a proprietary “aarich” driver (source code wrapper surrounding a binary-only core library) for Intel ICH5-R and Silicon Image 3512. (The name is intended to be parsed as AAR-ICH, as it is intended for certain Adaptec AAR-series cards based on Intel ICH5 SATA-I chips.)

(link) Intel ICH6 / ICH6-R / ICH6-M family SATA-I chips — fakeraid. libata’s ata_piix driver support is now (2004-02-25) functional when the ICH6 is running in either ICH5-alike mode or (on ICH6-R or ICH6-M) the enhanced, much-faster, open-specification “AHCI” mode (entry for which, please see), as of 2004-07-08.i ICH6 and AHCI are both open-standard hardware specs. If your desired installation kernel lacks the “ahci” driver, you may be able to use ICH5-like fallback mode: Look in your BIOS Setup program for a “legacy” or “ATA” setting, e.g., as reported by Peter Knaggs for his Dell Dimension XPS Gen 3 Series / Intel 925X Express chipset motherboard.Note that as of 06/2004, Silicon Image chipsets have a bug in “lba48” addressing (of a few drives over 137GB, but not all of them), necessitating a patch that will, as a necessary consequence, limit performance on the drives affected (only).

(link) Intel 31244 4-port SATA-II PCI-X sub-board — this is based around a Vitesse VSC71714 chip (which please see). No RAID functionality, in itself: Sub-board can be embedded on a NAS controller card with a separate RAID chip.

(link) ITE Tech., Inc. IT8212 / IT8212F PCI Express card — real hardware RAID. GPLed “iteraid” driver by Mark Lu of ITE Tech., Inc. is available — which unfortunately is broken in 2.6.10 and later kernels, because it relies on the long-deprecated MOD_DEC_USE_COUNT and MOD_INC_USE_COUNT module-use-count macros removed from include/linux/module.h as of that kernel version. (2005-09-12 addendum: Donald Huang of ITE Tech. answered my query, and said that Jack Lee of ITE Tech. will undertake the necessary revision work, some time later.)Alternatively, Alan Cox’s series of -ac variant kernel source code trees include an “it8212” driver as Alan’s add-in to 2.6.9 and later kernels’ drivers/ide driver collections. (As of 2005-09-08, this patch isn’t in mainline kernels, however. Update: As of 2006-01, the new driver is said to be in mainline 2.6.14 kernels, at least.)

(link) LSI Logic MegaRAID SATA 150-4 (four ports) and 150-6 (six ports) Serial ATA RAID Host Adapters — real hardware RAID. Work with 2.4.x kernel’s megaraid2 driver (same one as for SCSI). Cards use an Intel GC80302 dedicated I/O processor. This chipset, under its former AMI brand name, has had a long and excellent history with SCSI gear. Optional battery backup unit is available for the model 150-6 card’s cache, for more reliable operation in the event of power loss, etc. These cards should not be confused with the low-end LSI Logic MegaRaid SATA 150-2 card (which please see).

As of May 2005’s v. 3.4.1, that driver changed from proprietary licensing to GPLv2; probably the best revised source code is now Carlos Vidal’s file tree, which also has precompiled kernels for Fedora Core and a HOWTO that should generalise well to other distributions. A patch may be necessary to run this driver properly on newer 2.6 kernels.

Supermicro’s ftp site offers proprietary drivers for Marvell 4-port and 8-part SATA chips, written by Adaptec.

(link) Promise SX8 PCI-X card — fakeraid. Per the 2004-09-15 libata report, a separate block driver, “sx8” (not part of libata), has been written for this hardware. (However, Garzik later wrote that it may be rolled into libata, after all, to make possible ATAPI support.)

(link) Promise PDC20579-chip-based SATAII150 579 SATA-II chipset — fakeraid. libata’s sata_promise driver can support it using a patch to the 2004-10 libata development code and a 2.6 kernel, or by using the manufacturer’s GPLed driver code.

(link) Promise PDC20518-chip-based SATAII150 TX4 SATA-II card — fakeraid. libata’s sata_promise driver can support it using a patch to the kernel 2.6.10 libata code. Garzik posted his own patch on 2005-02-06 to support this device; the code will be included in kernel 2.6.11. Alternatively, use the manufacturer’s GPLed driver code.Kristoffer Winther Sørensen has posted a guide to retrofitting Garzik’s sata_promise patch to the current SUSE Linux installer.

(link) Promise PDC20575-chip-based SATAII150 TX2plus SATA-II chip — fakeraid. Garzik posted a patch on 2005-02-06 to support this device; the code will be included in kernel 2.6.11. Alternatively, use the manufacturer’s GPLed driver code.

(link) Promise FastTrak TX2300/TX2200 (2-port) and TX4300/TX4200 (4-port) RAID SATA-II PCI cards — fakeraid. I gather that these have a programming interface differing from that of their sata_promise-compatible predecessors, but have no chip information so far: This entry is a placeholder.Promise offers a “ftsata2” proprietary driver (open-source wrapper around a binary-only, proprietary core library). Warning: Correspondent Andreas Thienemann warns that this driver works on Linux 2.4.x kernels only, and cannot be built to function on 2.6.x because it uses deprecated interfaces and references missing headers.

ataraid support for SiI’s Medley fakeraid is available from 2.4.21 or later’s silraid (Arjan van de Ven’s) subdriver or its superior 2.4.26 and later replacement, medley (by Thomas Horsten). Note: So far, medley supports only Medley’s RAID0 “striped” mode, and not its RAID1 “mirrored” or RAID1+0 (AKA “RAID10”) modes. Alternatively, you can use Linux’s “md” software-RAID driver.

Adaptec has released a proprietary “aarich” driver (source code wrapper surrounding a binary-only core library) for Intel ICH5-R and Silicon Image 3512. (The name is intended to be parsed as AAR-ICH, as it is intended for Adaptec AAR-series cards based on Intel ICH5 SATA-I chips.)

(link) SiS 964 South Bridge, SiS 180 card — fakeraid. Supports hotplug and port multipliers. Is now (2004-03-01) supported in libata using driver “sata_sis” contributed by Uwe Koziolek. The 2.6.6 kernel added this driver a/o 2004-05-09. Driver is now production quality.Note that newer SIS chipsets have switched to the AHCI open standard.

(link) SiS 965L South Bridge — fakeraid. No known open-source drivers. Manufacturer’s propriatary, binary only SiSE 18x card driver also supports SiS 965L, but at present (2005-09), you need this in the modules.pcimap file to furnish the missing PCI ID: “sata_sis 0x00001039 0x00000182 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0”. I’d speculate that libata’s “sata_sis” driver might work to the same degree, but do not have confirmation.Note that newer SIS chipsets have switched to the AHCI open standard.

(link) VIA Technologies, Inc. VT8251 PCI Express South Bridge chipset — fakeraid. This 4-port SATA-II chipset (used in some new a/o 2005-11 motherboards such as the ASUS A7V-MX) is claimed to use the standard AHCI driver interface, though one correspondent had no luck a/o 2005-11-15 — possible just a PCI ID problem? Uniquely (to my knowledge) for a fakeraid adapter, it supports RAID 5 along with RAID levels 0 and 1.

(link) Vitesse Semiconductor Corp. VSC7174 Serial ATA chip — libata’s sata_vsc (by Jeremy Higdon) was added as of the 2.6.5 kernel. Driver is now production quality. No RAID functionality, in itself: Chip can be embedded on a NAS controller card with a separate RAID chip. Supports hotplug and port multipliers.