[2362] in linux-net channel archive
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. *
*****************************************************************************