Date: Wed, 21 May 1997 15:16:17 +1000 From: Bruce Evans <bde@zeta.org.au> To: brett@lariat.org, HARDWARE@FreeBSD.ORG, rberndt@nething.com, WELCHDW@wofford.edu Subject: Re: isa bus and boca multiport boards Message-ID: <199705210516.PAA05401@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>>Since the entire set of ports must be scanned whenever an interrupt occurs, >>maybe there is too much delay in getting to the upper ports. Something gets >>locked up if they overflow. I left several messages, but no one could >>figure it out. Probably not. Scanning all (inactive) ports takes about 1/4 as long as handing one fully active 16550 port. Scanning 16 fully active ports at 115200 bops takes too long for the default (unconfigurable :-() fifo trigger level. However, having 16 fully active ports is rare. >Maybe the sio driver should be recoded in optimized ASM. I can see some >major C inefficiencies in it, including lots of repeated pointer >dereferences and control structures that the compiler would probably >optimize poorly. I've generated super-tight assembler for serial I/O. Nope. There are only some minor C inefficiencies in the important parts of the driver. The code is within 50% of best possible generic i386 assembler code by static instruction counts, but this is unimportant with modern CPUs. On a P5/133, about 300 pointer dereferences can be done in the time it takes to do one i/o instruction. On a 386/20, only about 6 pointer dereferences can be done in the time it takes to do one i/o instruction. There are some major C inefficiencies in tty layers outside the driver. The pppd line discipline interface and implementation is particularly inefficient. On a 486/33, it takes slightly longer than all i/o and interrupt handling. This problem is "fixed" by using a modern CPU to speed up the non-i/o parts. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199705210516.PAA05401>