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).
- 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.
- 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.
- 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.
- 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:
- Cost: the bus should be as inexpensive as possible
- 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.
- Intelligence: it's extremely helpful to the software if
a device can be plugged into a bus, and self-identify.
- 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.
- 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.
- 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.
- 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