[2362] in linux-net channel archive

home help back first fref pref prev next nref lref last post

Re: Internet Provider?

daemon@ATHENA.MIT.EDU (Doug Ledford)
Fri Apr 5 03:26:04 1996

Date: 	Thu, 4 Apr 1996 10:24:51 -0600 (CST)
From: Doug Ledford <dledford@dialnet.net>
To: Curtis Hays <hays@satcom.whit.org>
cc: Luis Felipe Balbinot <HADES@lapro4.unisinos.tche.br>,
        linux-net@vger.rutgers.edu
In-Reply-To: <Pine.3.89.9604030902.B2371-0100000@satcom.whit.org>

On Wed, 3 Apr 1996, Curtis Hays wrote:

> 
> Almost forgot, as far as setting up the serial ports for the modems, you 
> could use a cyclades card, which is supported in the Linux kernel. It 
> allows you to add up to two-hundred and something serial ports.

My recommendation, if you want to be able to dump a lot of serial ports 
on a single machine, then don't use Cyclades boards.  Why you ask?  Good 
question :)  It's simple, when checking into this very product some time 
ago, I discarded it for use in places where I might want to have more 
than 16 ports on any machine.  I discarded it because each ports has a 12 
byte FIFO.  Keep in mind gentlemen, this is 4 bytes less than a 16550AF 
UART.  At 115,200 baud, N81 line settings, it takes ten bits for every 
byte.  That translates to a maximum byte flow of 11,520 bytes per second.  
With a 12 byte FIFO, this flow of traffic would completely fill said FIFO 
exactly 960 times per second.  That is almost, but not quite one full 
FIFO every millisecond.  On a Pentium 100, one millisecond is 100,000 CPU 
cycles.  For 32 ports then, you would have to be able to

1)  Have interrupt latencies < 100 microseconds (approx.) to avoid a 
single byte overflow condition.

2)  Be able to get the data out of the FIFO before the 100 microseconds 
is up to enable further incoming recieves.  (This one is conditional on 
the Cirrus Logic UART, I don't know if it will allow you to pull just one 
byte out of the FIFO before the next comes in or if it wants the FIFO 
cleaned.  Either way, it's a very tight window of opportunity.)

3)  Be able to repeat steps one and two 32 times every millisecond.

Note above that on a Pentium 100, one millisecond is 100,000 CPU cycles.  
This means that in 100,000 cpu cycles you would have to be able to handle 
32 interrupts + other driver interrupts + handle the complexity of serial 
port processing on error conditions, line hangups, etc. + the normal 
system load.  In this case, you WILL run into a large number of tty 
overruns, which of course means TCP packet corruption and resends and 
that your overall performance in the eyes of the users will not be good :)

I personally recommend the Comtrol RocketPort serial cards.  They use a 
1023 byte recieve FIFO and a 255 byte transmit FIFO (according to the 
driver header files).  I have gotten great performance out of them 
myself, even under loads such as 48 simultaneous PPP connections running 
on a Pentium 100.  I have hacked a little code into the driver to give me 
some timing stats on CPU time used per instance of the polling routine as 
well as a high and low watermark for the polling routine over a ten 
minute time frame.  If anyone is interested in the stats, let me know.

*****************************************************************************
* Doug Ledford                      *   Unix, Novell, Dos, Windows 3.x,     *
* dledford@dialnet.net    873-DIAL  *     WfW, Windows 95 & NT Technician   *
*   PPP access $14.95/month         *****************************************
*   Springfield, MO and surrounding * Usenet news, e-mail and shell account.*
*   communities.  Sign-up online at * Web page creation and hosting, other  *
*   873-9000 V.34                   * services available, call for info.    *
*****************************************************************************



home help back first fref pref prev next nref lref last post