Busses

A bus is used to communicate between components in a computer system. They are typically specialized, with (for instance) a memory bus having different characteristics from an IO bus. Communications used in networks are different again.

An important distinction to be drawn early is that between a bus and a point-to-point network. A bus has a single wire, or connection of wires with multiple sources and destinations. A point-to-point network has some sort of interconnection scheme between sources and destinations in which the nodes are endpoints. In general a bus is cheaper and slower than other network topologies; there is a shift in progress in some areas from busses to point-to-point networks; this is most noticeable in high-speed ethernet and in AMD's multiprocessor system ``busses.''

Bus operations should be thought of in terms of transactions. A bus transaction is an operation on the bus; for instance, a memory read, or an interrupt service, or an IO write. A bus transaction is initiated by a bus master who requests that some operation take place; a slave will respond to the transaction appropriately. Different busses support different sets of transactions.

Bus Components

Busses typically have several components in common. In general, dedicated groups of wires are used for the different components (but see multiplexing, below).

  1. Data: this is the whole purpose of the bus - to transmit data. Ordinarily, when you talk about the ``width'' of a bus (8-bit bus, 32-bit bus, etc), you're talking about how many wires are used for data.
  2. Address: this is how the components on the bus recognize that data on the bus is intended for them. Ordinarily, whenever a bus transaction takes place, an address is put on the bus... recipient can tell who it's for. Memory and IO busses don't normally put a source address on; that's either implicit in the transaction or irrelevant. Networks, on the other hand, usually do.
  3. Control: these wires contain a variety of information about the transaction, for instance what type of transaction it is (read, write, interrupt request, etc). Most parallel busses may also have a global clock, which would be a control line as well. A serial bus can't very well do that, so the clock has to be carried with the data somehow.
  4. Power and Ground: the bus has to have a ground wire, so the different components have a common voltage reference (they'll normally have lots of ground wires, for electrical immunity!). Also, all the cards in the bus need to get power from somewhere, so the bus itself is a convenient place to distribute it.

Tradeoffs

In designing a bus, compromises need to be reached between several goals:

  1. Cost: the bus should be as inexpensive as possible
  2. Performance: the bus should transmit as much data as possible. This has too components: latency (the time to get anything across at all) and bandwidth (the amount of data that can be sent across). Fault tolerance is also nice; some busses allow various forms of error detection and correction to be sent with the data in order to ensure the data was received correctly.
  3. Intelligence: it's extremely helpful to the software if a device can be plugged into a bus, and self-identify.
  4. Hot Pluggability: an aspect which is being see as more and more important recently is being able to hot-plug devices in a bus, so it's possible to insert and remove devices without taking the machine down. This isn't one of the traditional tradeoffs, but I wanted to mention it.

To these ends, a number of options are provided.

  1. Speed: the faster the clock, the faster the bus. This, of course, increases the cost. At some point the bus may actually be faster than the devices on it; when this happens, the idea of a split transaction becomes useful. In a bus supporting split transactions, read operations are divided into a request and a response. These are treated as separate transactions, so the device can wait a while between getting the request and giving the response.
  2. Multiplexing: while all the different bus lines are logically separate, it may be useful to have some of the lines share a wire and use several cycles for a bus transaction. It is very common to multiplex address and data lines; in this case, a write transaction requires one cycle to send the address and a second cycle to send the data. In some cases, the data may be multiplexed as well, so more than one cycle is required to send the data (the original IBM PC bus multiplexed data). In extreme cases everything can be multiplexed onto a single wire, as in USB (intended as a replacement for computer serial and parallel ports, and capable of networking), CAN (actually a network protocol, the Controller Area Network, rapidly becoming the standard for automobiles), and Dallas Semiconductor's 1-wire protocol. Multiplexing reduces cost, at the price of performance.
  3. Distribution of Intelligence: the work required for I/O can be offloaded from the processor, depending on how ``intelligent'' the devices are. Intel has had some interesting chips for DMA and interrupt controlling, moving the intelligence for these functions to a specialized device rather than either the CPU or the IO device.

The relative importance of these considerations in different environments leads to a huge variety of bus designs. For a network of computers, cost is the dominant consideration; as a result, nearly all networks use ethernet, which is serial. Specialized networks may require much higher speeds; witness the department's Beuwolf cluster, in which 32 processors communicate over a 2GB/Sec network Myrinet network from Myricom. Myricom doesn't recommend that technology for new implementations (they've moved on to fiber), but the extent to which performance was emphasized over cost is shown by the prices: a new Myrinet 2GB NIC costs between $995 and $1,595, and a 16-port switch is $4,825. The cables run $100 for a 1-foot cable, up to $190 for a ten foot cable (prices as of 11/14/01).


Last modified: Mon Dec 2 09:17:08 MST 2002