CPU - I recommend a 100 MHz class platform for up to 30 feeds, and a 200 MHz class platform for up to 100 feeds. A single-cpu platform will work just fine. A 200 MHz class cpu will be around 50% idle with 70 feeds, but we never want to saturate the cpu on a news box if we can help it because it will mess up the interactive latency for various other operations. You will almost certainly hit a disk I/O limits before you hit cpu limits, so single-cpu boards are plenty sufficient.
MEMORY - I recommend a minimum of 96MB and a nominal 128MB to handle up to 40 feeds. 192MB for up to 70 feeds, and 256MB for up to 100 feeds. You can make do with less, but may have a slower recovery rate if news gets behind. The machine should not do any major paging, i.e. it should page out idle processes only. There should be at sufficient memory free at all times for a good sized buffer cache. Keep in mind that adding memory will reduce disk I/O due to caching. If you find your disks saturated, try adding more memory first.
DISK - I recommend three 4G disks for up to 70 feeds. The first would house the system partitions plus a 2 GB /news partition. The other two would be striped together to make a single 8G news spool. I recommend a stripe size of between 2048 and 8192 sectors to avoid splitting related transactions while at the same time promoting disk balancing. If you intend to scale beyond 70 feeds, The dhistory file lookups and appends will start to bottleneck, requiring more memory for disk caching but also possibly requiring that you stripe the /news partition across two physical disks. In this case, two 2G disks striped together with a medium 1024 to 2048 sector stripe size should suffice. You may want to start off with two 2G and two 4G drives right off the bat rather then start with three 4G drives so you do not have to change your configuration later on. I recommend that you use only Seagate drives, which virtually guarentee that only a sector or two is lost from a hard crash during a write (like if the power gets pulled). Seagate drives also have the best SCSI firmware on the market.
DISK CONTROLLER - I recommend an ultra-wide controller and fast ultra-wide disks. I recommend the UW controller over others not so much because of the available bandwidth, which no news machine will ever be able to approach, but instead because of the high transaction rate UW controllers and drives are capable of.
SWAP - I recommend that you configure at least as much sawp as you have main memory, and that you configure a swap partition on EVERY physical drive to balance any paging I/O. With the recommended memory configuration, Diablo will never have to swap, but when you start accumulating feeds you often wind up in the situation where a percentage of the processes on the system stand idle, and you want the system to be able to swapout those processes to free up that much more core memory for disdk caching.
PARTTION FLAGS - Mounting the partitions async is not required and will probably not result in a noticeable increase in performance. However, mounting the partitions 'noatime', i.e. telling the system to not bother to update the access time for the file on reference will make a difference.
DISK CACHING AND OTHER OS PARAMETERS - If your OS requires the buffer cache to be manually specified, I recommend that you reserve at least 1/4 of your memory to the disk cache and possibly even more. If you can configure the size of the VNode cache, I recommend 8192 to 16384 VNodes.. it is NOT a critical parameter, however. Diablo eats file descriptors for lunch, so you should configure at least 4096 file descriptors for the system as a whole, and at least 512 per process. Diablo will also fork a lot of processes... around 2.5 x the number of feeds you have, so make sure the OS doesn't barf. On FreeBSD machines, also make sure the resource limits set in /etc/login.conf are generously set to infinity for most items. Make doubly sure that the 'daemon' user is set generously because this is what /etc/rc uses. Don't skimp, this is a dedicated machine for you. Nominally, your outgoing feeds will be caught up thus mostly synchronized with each other. If something on the USENET blows up and you get into catch-up mode with some of your feeds, synchronization will be lost and may blow you disk cache, resulting in a significant disk I/O burden. You should not run your spool disks close to the edge for this reason... nominal utilization should be around 70% to allow enough margin to recover from such situations..
NETWORK - A single switched 10BaseT is sufficient to handle any number of incoming feeds and up to around 50 full outgoing feeds before it saturates. Once you get past 50 outgoing feeds, I recommend either a second 10BaseT or a 100BaseT. All ethernet connections must go to a switch rather then a hub, because news generates a large packet rate and hub'ing it will result in too many collisions. When using two 10BaseT ethernet interfaces, you only really care about the outgoing feeds. Diablo allows you to bind dnewslink processes to particular interface addresses and no fancy routing should be necessary. When using 10/100BaseT-capable cards, set the media type manually on both the UNIX box and the switch. Do not allow either end to auto-select the ethernet port speed!!!!. If your ethernet card and the switch is capable of 100BaseTX (i.e. full-duplex operation), then I suggest taking the time to make that work. 100BaseT[X] is much more sensitive to bad crimps and bad cables then 10BaseT and should always be life-tested to ensure that there is no packet loss. Packet loss can result in backed-up feeds due to exponential TCP backoff.
TYPICAL CONFIGURATION - Here is a typical configuration. This particular platform is a pentium-pro 200 with 128MB of standard SIMM parity memory and the BIOS is configured with ECC turned on. Note that PPro cpu's are twice as fast as normal pentiums. However, the newer higher-speed Pentium II's are getting good. If you use a P-II based motherboard the size of the secondary cache is more important then the cpu speed. Use the largest cache that fits your costing model. As of June 1998 I would recommend a 300MHz or better class Pentium II motherboard with at least 1MB of cache. An AMD K6 would also work well here. However, whatever motherboard you get it *MUST* be able to do ECC with parity memory. This is absolutely critical. I know that Pentium Pro and Pentium II boards have this ability. I do not know about K6 boards. Avoid celleron or cirix boards, they usually do not have the necessary performance.
The system below is running FREEBSD 2.2.x. FreeBSD is an excellent operating system to run on a PC. It is fast, robust, stable, and more secure then most vendor supplied operating systems. See http://www.freebsd.org for more information. FreeBSD (and most other UNIX operating systems) will tend to 9 break down under two conditions: First, with directories containing tens of thousands of files. Diablo does not generate tens of thousands of files so this is not a problem. Second, with in-kernel filesystem locks when many processes are operating on the same file descriptor. Diablo does tend to hit this bottleneck on the dhistory file under very heavy loads. The solution is usually more memory for the buffer cache. Both the FreeBSD-stable and FreeBSD-current releases will work great. Note that I have a few quantum's in there... this is a legacy issue. I do not recommend the use of quantum drives.
/kernel: Copyright (c) 1992-1997 FreeBSD Inc. /kernel: Copyright (c) 1982, 1986, 1989, 1991, 1993 /kernel: The Regents of the University of California. All rights reserved. /kernel: /kernel: FreeBSD 2.2-STABLE #0: Tue Jun 24 16:18:37 PDT 1997 /kernel: dima@tick.best.net:/src/src/sys/compile/BEST /kernel: CPU: Pentium Pro (199.31-MHz 686-class CPU) /kernel: Origin = "GenuineIntel" Id = 0x617 Stepping=7 /kernel: Features=0xf9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,<b11>,MTRR,PGE,MCA,CMOV> /kernel: real memory = 134217728 (131072K bytes) /kernel: Physical memory hole(s): /kernel: avail memory = 122191872 (119328K bytes) /kernel: Probing for devices on PCI bus 0: /kernel: chip0 <Intel 82440FX (Natoma) PCI and memory controller> rev 2 on pci0:0 /kernel: chip1 <Intel 82371SB PCI-ISA bridge> rev 1 on pci0:1:0 /kernel: chip2 <Intel 82371SB IDE interface> rev 0 on pci0:1:1 /kernel: pci0:1:2: Intel Corporation, device=0x7020, class=0x0c, subclass=0x03 int d irq 15 [no driver assigned] /kernel: ahc0 <Adaptec 2940 Ultra SCSI host adapter> rev 0 int a irq 9 on pci0:10 /kernel: ahc0: aic7880 Wide Channel, SCSI Id=7, 16 SCBs /kernel: ahc0 waiting for scsi devices to settle /kernel: ahc0: target 0 Tagged Queuing Device /kernel: (ahc0:0:0): "Quantum XP34300W L915" type 0 fixed SCSI 2 /kernel: sd0(ahc0:0:0): Direct-Access 4101MB (8399520 512 byte sectors) /kernel: sd0(ahc0:0:0): with 3907 cyls, 20 heads, and an average 107 sectors/track /kernel: ahc0: target 1 Tagged Queuing Device /kernel: (ahc0:1:0): "Quantum XP34300W L915" type 0 fixed SCSI 2 /kernel: sd1(ahc0:1:0): Direct-Access 4101MB (8399520 512 byte sectors) /kernel: sd1(ahc0:1:0): with 3907 cyls, 20 heads, and an average 107 sectors/track /kernel: ahc0: target 2 Tagged Queuing Device /kernel: (ahc0:2:0): "SEAGATE ST34371W 0338" type 0 fixed SCSI 2 /kernel: sd2(ahc0:2:0): Direct-Access 4148MB (8496960 512 byte sectors) /kernel: sd2(ahc0:2:0): with 5168 cyls, 10 heads, and an average 164 sectors/track /kernel: de0 <Digital 21140 Fast Ethernet> rev 18 int a irq 12 on pci0:11 /kernel: de0: SMC 9332 21140 [10-100Mb/s] pass 1.2 /kernel: de0: address 00:00:c0:b1:7d:e4 /kernel: de0: enabling 10baseT port /kernel: vga0 <VGA-compatible display device> rev 227 int a irq 11 on pci0:12 /kernel: Probing for devices on the ISA bus: /kernel: sc0 at 0x60-0x6f irq 1 on motherboard /kernel: sc0: VGA color <16 virtual consoles, flags=0x0> /kernel: sio0 at 0x3f8-0x3ff irq 4 on isa /kernel: sio0: type 16550A /kernel: sio1 at 0x2f8-0x2ff irq 3 on isa /kernel: sio1: type 16550A /kernel: lpt0 at 0x378-0x37f irq 7 on isa /kernel: lpt0: Interrupt-driven port /kernel: lp0: TCP/IP capable interface /kernel: fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa /kernel: fdc0: NEC 72065B /kernel: fd0: 1.44MB 3.5in /kernel: npx0 on motherboard /kernel: npx0: INT 16 interface /kernel: ccd0: Concatenated disk driver