On Jul 15, 2021, at 9:25 PM, Theodore Y. Ts'o <tytso(a)mit.edu> wrote:
I remember a friendly rivalry that I had with Bruce D. Evans in
Australia, who was working on the serial driver for FreeBSD, where we
would exchange tips and techniques for making the serial driver on our
respective OS's more CPU efficient. (The metric was to see who could
most reduce the system overhead of the serial interrupt and tty layers
when running a C-Kermit file transfer over a pair of RS-232 ports
connected via a loopback cable.) It was a lot of fun, and we both
gained a lot from the exchange of ideas, but finally, I came up with
an idea (flip buffers) that really reduced Linux's serial/tty
overhead, but which Bruce couldn't match in FreeBSD, because the
FreeBSD core team thought that clists were handed down from Mount
Olympus by the Gods of BSD, and making that kind of change in the tty
layer was tantamount to heresy. Heh.
Dave Yost wrote the serial driver for our 4 port serial card @ Fortune
(1981-82). Later chips like NS16550 had 16 char on chip buffers but we
back then we used a Moto SIO chip that had only one char buffer. IIRC,
he used two tricks. One was "partially evaluated" xmit/recv handlers so
that each port got its own xmit/recv functions, with hand-crafted
instructions (in hex, no less!) just right for a given port and all the
interry t handler . The do was transfer a char from/to the buffer it
(lready knew about. The other was he increased the cblock size from 8 to 128
(what a clist points to). He says he described this design to dmr who said
why not?! With this design Yost's code was able to handle 4 full-duplex
9600 baud streams at full-speed. Not bad for a 5.6Mhz clock machine!