Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 beta 3/9/83; site uthub.UUCP Path: utzoo!utcsrgv!utai!uthub!thomson From: thomson@uthub.UUCP (Brian Thomson) Newsgroups: net.bugs.4bsd,net.unix-wizards Subject: ptcread() throughput sextupling Message-ID: <168@uthub.UUCP> Date: Tue, 19-Jun-84 10:42:42 EDT Article-I.D.: uthub.168 Posted: Tue Jun 19 10:42:42 1984 Date-Received: Tue, 19-Jun-84 14:26:50 EDT Organization: CSRG, University of Toronto Lines: 110 Index: /sys/sys/tty_pty.c 4.2BSD Fix Description: Oink oink! That is the sound that data makes as it travels through 4.2BSD's pseudo-tty driver. Even in the high-volume direction (slave to controller) there is a great deal of code executed per-character. On our otherwise idle 750 I measured the maximum pty throughput at 5K chars/sec.; after applying the following mods it reached 30K chars/sec. If your machine is often accessed through rlogin(1c) this can mean considerable savings in system-state CPU time. Repeat-By: Run this program and use iostat(1) to see what your character rate is. #include char buf[1024]; int wsize = 1024; main() { int csock, dsock, i; for(i=0 ; it_outq.c_cc && uio->uio_resid > 0) if (ureadc(getc(&tp->t_outq), uio) < 0) { error = EFAULT; break; } to be while(uio->uio_resid > 0 && error == 0) { int cc = q_to_b(&tp->t_outq, ptc_rdbuf, MIN(uio->uio_resid, BUFSIZ)); if(cc == 0) break; error = uiomove(ptc_rdbuf, cc, UIO_READ, uio); } We have been using this code for 4 months. You may not experience quite as great an improvement as we did, because we also improved the performance of q_to_b(). -- Brian Thomson, CSRG Univ. of Toronto {linus,ihnp4,uw-beaver,floyd,utzoo}!utcsrgv!uthub!thomson