[comp.unix.questions] loadsharing printers

csrobe@icase.arpa (Charles S. Roberson) (07/11/87)

I help administer a SUN 3 system with 14 workstations running SUN release
3.3 of BSD 4.2 UNIX.  We do a quite a bit of document preparation.
(Mostly TeX and troff stuff).  Anyway we just purchased a second
laser writer and are in the process of integrating it into our system.

What we would like to do is provide some form of loadsharing
mechanism for our two printers.  The two printers are identical
so we can make them transparent to the applications.  What experiences
has anyone had with doing this.  We have considered a sharing load
based on accumulated page counts for both printers and also based
on current queue size.

The quickest way we can think of is to use a shell around lpr to
determine which printer to use.  Has anyone tried having one queue
serve more than one printer?  How were the daemons handled?

Thanks in advance.

Chip Roberson

csrobe@icase.arpa
...seismo!gmu90x!wmcs!csrobe

eirik@tekcrl.TEK.COM (Eirik Fuller) (07/12/87)

In article <8258@brl-adm.ARPA> csrobe@icase.arpa (Charles S. Roberson) writes:
>
>I help administer a SUN 3 system with 14 workstations running SUN release
> ...
>What we would like to do is provide some form of loadsharing
>mechanism for our two printers.  The two printers are identical
>so we can make them transparent to the applications.  What experiences
>has anyone had with doing this.  We have considered a sharing load
>based on accumulated page counts for both printers and also based
>on current queue size.
>
>The quickest way we can think of is to use a shell around lpr to
>determine which printer to use.  Has anyone tried having one queue
>serve more than one printer?  How were the daemons handled?
> ...

Given that you have Suns, I doubt this will help you, unless Sun does
this for you (I'm assuming you have no sources), but it may be
interesting anyway.

We are in the process of cleaning up a quick hack to lpd that does
most of what you describe.  The hack was done locally, and the
cleanup is still more local, whatever that means.

The net result of this cleaned up hack, so to speak, is a line
printer daemon that understands a printcap with more than one device
in a queue (:lp=/dev/lw0|/dev/lw1:).  When handling print requests,
the daemon forks one child per device, and each child scans the queue
for the oldest job that isn't yet printing.  Thus jobs get printed
more or less in chronological order; the algorithm is essentially the
same one banks use when there is one line feeding multiple tellers.
Some day  we might add some heuristics whereby the available printer
gets only jobs below a certain size, so that long jobs tie up one
printer and small ones get through on the other.  With two printers
going, that has rarely been "necessary" (whatever impatient users
take that to mean :-).

I suppose I should also mention that mdqs is likely a better way to
solve your problem, particularly if you don't have lpd sources.  I'll
leave it to the net.experts to fill you in on where mdqs can be
obtained, since I plead ignorance on this count.  The only sources I
have found have been modified to the extent that they won't compile
under 4BSD any more (don't ask).

Good luck.

dpk@sem.ARPA (Doug Kingston <dpk>) (07/26/87)

MDQS (Multi Device Queueing System) handles roundrobin scheduling
of resouces and many other things.  The current version of MDQS
is 2.11.  It is available for anonymous FTP over the ARPA/MILNET
from host vgr.brl.mil in the subdirectory "arch".  It is also available
by sending mail to the following address if you are a U.S. site.
The procedure for foreign sites is far more convoluted.  Send mail
for details.

Requests by mail should be addressed as follows:

	Advanced Computer Systems Team
	MDQS Distributions
	Ballistics Research Lab
	Attn:  AMXBR-SECAD (ACST)
	Aberdeen Proving Grounds, MD. 21005

Cheers,
	-Doug-

PS.  For those that care, I am leaving BRL for New York.  dpk@brl.arpa
     will work for the forseeable future.