A custom PC configuration guide. © 2000,2001,2002 by Jef Poskanzer.
The essence of a computer system is moving data around. If you don't have enough bandwidth at some point along the path you need to move your data, you'll have a bottleneck, a limit on your system's performance. To avoid such bottlenecks you have to understand your system's bandwidth capabilities.
The following table shows the maximum bandwidths for a bunch of different interfaces that might be in your system, sorted by speed. These bandwidths are theoretical - the actual data transfer rates will be somewhat lower. In particular, memory typically transfers at maybe half its interface speed, and disk drives generally don't even come close to their interface bandwidth. To get the actual transfer rates you have to do benchmarking, which is hard. Still, the theoretical numbers are useful for rough estimates.
| Key: |
|
| Interface | Width | Frequency | Bytes/Sec | Bits/Sec |
|---|---|---|---|---|
| 4-way interleaved PC1600 (DDR200) SDRAM | 4 x 64bits | 100MHz DDR | 6.4 GB/s | 51 Gbps |
| Pentium 4 "533MHz" FSB | 64bits | 133MHz QDR | 4.3 GB/s | 34 Gbps |
| 2-channel PC1066 RDRAM | 2 x 16bits | 533MHz DDR | 4.3 GB/s | 34 Gbps |
| Pentium 4 "400MHz" FSB | 64bits | 100MHz QDR | 3.2 GB/s | 25.6 Gbps |
| 2-channel PC800 RDRAM | 2 x 16bits | 400MHz DDR | 3.2 GB/s | 25.6 Gbps |
| 2-way interleaved PC1600 (DDR200) SDRAM | 2 x 64bits | 100MHz DDR | 3.2 GB/s | 25.6 Gbps |
| PC2700 (DDR333) SDRAM | 64bits | 167MHz DDR | 2.7 GB/s | 21 Gbps |
| PC2100 (DDR266) SDRAM | 64bits | 133MHz DDR | 2.1 GB/s | 17 Gbps |
| EV6 bus (Athlon/Duron FSB) | 64bits | 100MHz DDR | 1.6 GB/s | 13 Gbps |
| PC1600 (DDR200) SDRAM | 64bits | 100MHz DDR | 1.6 GB/s | 13 Gbps |
| PC800 RDRAM | 16bits | 400MHz DDR | 1.6 GB/s | 13 Gbps |
| PC150 SDRAM | 64bits | 150MHz | 1.3 GB/s | 10.2 Gbps |
| 10 gigabit ethernet | serial | 10GHz | 1.25 GB/s | 10 Gbps |
| 133MHz FSB | 64bits | 133MHz | 1.06 GB/s | 8.5 Gbps |
| PC133 SDRAM | 64bits | 133MHz | 1.06 GB/s | 8.5 Gbps |
| AGP 4x | 32bits | 266MHz | 1.06 GB/s | 8.5 Gbps |
| PCI-X | 64bits | 133MHz | 1.06 GB/s | 8.5 Gbps |
| 100MHz FSB | 64bits | 100MHz | 800 MB/s | 6.4 Gbps |
| PC100 SDRAM | 64bits | 100MHz | 800 MB/s | 6.4 Gbps |
| PC66 SDRAM | 64bits | 66MHz | 533 MB/s | 4.3 Gbps |
| fast/wide PCI | 64bits | 66MHz | 533 MB/s | 4.3 Gbps |
| AGP 2x | 32bits | 133MHz | 533 MB/s | 4.3 Gbps |
| Ultra-320 SCSI | 16bits | 160MHz | 320 MB/s | 2.6 Gbps |
| AGP | 32bits | 66MHz | 266 MB/s | 2.1 Gbps |
| Serial ATA/1500 disk | serial | 1.5GHz | 187 MB/s | 1.5 Gbps |
| Ultra-160 SCSI | 16bits | 80MHz | 160 MB/s | 1.3 Gbps |
| PCI | 32bits | 33MHz | 133 MB/s | 1.06 Gbps |
| ATA/133 disk | 8bits | 66MHz DDR | 133 MB/s | 1.06 Gbps |
| gigabit ethernet | serial | 1GHz | 125 MB/s | 1 Gbps |
| ATA/100 disk | 8bits | 50MHz DDR | 100 MB/s | 800 Mbps |
| IEEE 1394b | serial | 800 MHz | 100 MB/s | 800 Mbps |
| Ultra-2 Wide SCSI | 16bits | 40MHz | 80 MB/s | 640 Mbps |
| OC-12 network | serial | 622 MHz | 77.7 MB/s | 622.08 Mbps |
| ATA/66 disk | 8bits | 33MHz DDR | 66 MB/s | 533 Mbps |
| USB-2 | serial | 480 MHz | 60 MB/s | 480 Mbps |
| IEEE 1394 | serial | 400MHz | 50 MB/s | 400 Mbps |
| Ultra Wide SCSI | 16bits | 20MHz | 40 MB/s | 320 Mbps |
| ATA/33 disk | 8bits | 16.6MHz DDR | 33 MB/s | 266 Mbps |
| Fast Wide SCSI | 16bits | 10MHz | 20 MB/s | 160 Mbps |
| OC-3 network | serial | 155 MHz | 19.4 MB/s | 155.52 Mbps |
| 100baseT ethernet | serial | 100MHz | 12.5 MB/s | 100 Mbps |
| T-3 network | serial | 45MHz | 5.6 MB/s | 44.736 Mbps |
| USB | serial | 12MHz | 1.5 MB/s | 12 Mbps |
| 10baseT ethernet | serial | 10MHz | 1.25 MB/s | 10 Mbps |
| IrDA-2 | serial | 4MHz | 500 KB/s | 4 Mbps |
| T-1 network | serial | 1.5MHz | 193 KB/s | 1.544 Mbps |
| Key: |
|
Data transfers are mostly between memory and CPU or peripheral devices, so I've colored the table accordingly. You can use this table to spot possible bandwidth bottlenecks. For instance, if you're planning a high-end web server with a gigabit ethernet interface, your transfers will be from disk through PCI to memory, and from memory through PCI to ethernet. If you give the system enough memory, the disk to memory transfers will be minimized, so most of your data will be going memory->PCI->ethernet. You can easily see that memory bandwidth will not be a bottleneck; however, regular PCI has just barely more bandwidth than gigabit ethernet, so that could be a problem. If possible, you should configure your system with 64-bit 66MHz PCI, and be sure your gigabit NIC supports it too.
The number of bits of an interface is relevant because the cost of manufacture goes up with the number of pins or wires. Also on crowded motherboards it's easier to fit narrower interfaces. This is why there are dual-channel RDRAM boards but few or no dual-channel SDRAM boards.
The frequency of an interface is relevant because chip and signalling technology imposes an upper limit. For signals on a circuit board, the 400MHz of PC800 RDRAM is probably the maximum. For cables from a motherboard to a peripheral, the 80MHz of Ultra-160 SCSI is probably the maximum. DDR (double data rate) is a hack that sends bits on both the rising and falling transitions of the clock, and can be used to increase the data rate without increasing the clock frequency. I've heard QDR - quad data rate - mentioned, but I don't see how that could work!