BILLY@VENERA.ISI.EDU (Billy Brackenridge) (05/16/88)
Last month my company, Information Presentation Technologies released the IPT-1000 Ethernet card for the Macintosh SE. It features the AMD7990 chipset and either 16K or 64K of dual ported memory. Earlier we designed and still use in house a nearly identical board for the IBM PC. Our primary product is uShare a Macintosh to Unix connectivity product. The PC Ethernet card didn't fit into our product line so we haven't yet manufactured it, but I have had experience helping design and program this card. As much as I'd like to write a glowing sales blurb for our products, I think it more educational for the PCIP list to give a historical account of how we came to the same conclusions about dual ported memory that others seem to be reaching in the ongoing discussion. As few people on this list are familiar with the Macintosh and Apple's protocols, let me define some terms. LocalTalk refers to the physical 225Kbps network hardware built into all Macintosh computers. AppleTalk refers to Apple's proprietary (but well documented) software protocols. Two years ago the hardware was called AppleTalk as well, but this changed when Apple defined the terms LocalTalk and EtherTalk. EtherTalk refers to sending AppleTalk packets over EtherNet. Like Humpty Dumpty, protocol designers get to make words mean what ever they want them to mean. Both our Ethernet cards were based on our earlier experience (When the company was named Lutsky Baird Associates) building LocalTalk cards for various 68000 unix boxes. We discovered early in the networking game that dual ported memory has many advantages over the traditional DMA interface. The AppleTalk protocol suite has at the transport layer: ATP, for Apple Transaction Protocol. It is a mini version of Dave Clark's NETBLIT. You send a one packet request and you get back up to 8 large packets in reply. You then send a bit mapped ACK indicating which of the 8 packets you got. This works fine when dedicated Macintoshes are talking to each other. Despite LocalTalk's slow speed of 225Kbps, transactions clip right along. Our AppleShare file servers and print spoolers run under Unix. Unix interrupt latency leaves a lot to be desired. When a half dozen Macintoshes start firing 8 packets as fast as their little 68000s will go, the lights dim all over Unix land. We found with small buffers we were losing too many packets as Unix was frequently busy doing something else it deemed more important than fetching AppleTalk packets. We found that moving to 64K of dual ported buffers was about the right "impedance match" for this speed network. After this experience building LocalTalk hardware, it seemed natural to build our Ethernet cards the same way. We expect to use them in client machines, servers, and gateway devices. These machines will run various operating systems that have differing latency characteristics. How much dual ported memory is enough? We found that 16K wasn't enough for servers. If 64K isn't enough you have serious problems somewhere else. If you put your Ethernet chip in promiscuous mode on a busy Ethernet and your processor isn't fast enough to look at all the packets, no amount of buffer memory will help. John Romkey pointed out that deciding where to map dual ported memory can be very exciting due to conflicts with mapped memory and other devices. This isn't an issue on the Macintosh, but on the AT we got around this by making the dual ported memory location programmable on any 64K memory boundary in the AT's 24 bit address space. As with any PC product the number of service calls you get is directly proportional to the number of jumpers the customer can scramble. Karl Auerbach mentioned the I/O ready line doesn't work on many AT clones. We don't use this line as Static RAM runs at AT bus speeds of the fastest CPUs on the market. As both our PC and Macintosh cards have 16 bit data paths you have your choice of 16K memory or 64K memory. Static RAM chips come in 8x8K or 8x32K varieties. We recommend 64K for server machines and 16K for user machines. For this size memory static RAM is cheaper than dynamic RAM as you don't need memory refresh circuitry. In order to protect the dual ported memories from simultaneous access our card acts as if it is doing DMA. When starting the card you tell the AT DMA controller the card is in "Cascaded" mode. IBM DMA has always been a black art but someone told me the right I/O instruction, and I have never had a problem. Whenever the AMD7990 reads or writes memory it locks out the AT CPU even though it never transfers data over the AT bus. The Macintosh card uses a similar mechanism. Our LocalTalk cards have a Z80 CPU so the memory allocation is done on a per packet basis and the 64K buffer space is efficiently used. The AMD 7990 and the National chip in the Western Digital card demand that packet buffers be statically allocated. If a packet arrives larger than these buffers it will be split across two buffers. For a gateway application I allocated buffers 1518 bytes long (maximum ethernet packet size). This is wasteful of space but it makes it easy to write C code to process the packets without moving them. You need at least 16K of dual ported RAM to get away with this sort of extravagance. Billy Brackenridge Information Presentation Technologies 23801 Calabasas road, Suite 2011 Calabasas, CA 91302 (818)347-7791 -------