Hylafax Mailing List Archives

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: AW: Problems submitting very large Number of jobs sequen tial ly



Hi,

On Mon, Jul 27, 1998 at 02:42:19AM +0000, Didier Gautheron wrote:
> Hi
> 
> Christoph Stotz wrote:
> > The theory of too many files donīt seem to me to be the solution.
> Yes but a 1500-5000 files in a directory is a problem on all OS. and

[only those that use a linked list for directories; those that use btrees
 are much happier with big directories.]

> here you have 4 to 5 dirs :
> info
> sendq
> doneq
> docq

I've got a patch that puts the info files in subdirectories under info,
although I don't think that will help here as (AFAIU) as the numbers 
being called are in a small subset of all possible numbers.   (as opposed to
the tpc cell I see which reached a totally stupid info directory size with
~30,000 entries)

> > Is it possible to tell hylafax to call a batch-file if the number
> > of jobs in queue is smaller than the number of free modemlines
> > avaible ?
> I don't think you could do this out of the box.
> But you could use some trick on xferlog and or faxwatch to get a tick
> each time a fax is sent.

This is probably the approach I'd take; prep the queue with the number 
of modems + 1 or two; run sendfax everytime a line gets written which 
matches /""$/ or something.

> The text below is over simplified but I hope there's no big mistake.
> 
> The delay is coming from the faxq's scheduler : it's a multi threads prg
> using fork and exec to achieve its goals.
> The main thread (faxq) is waiting in a loop for events:
> events are coming from:
> fifo : 
> - hfaxq submiting job
> - faxgetty
> - faxsend (not sendfax , faxsend is the prg which actually sends the
> fax)
> child's dead:
> - mainly faxsend
> timeout
> - mainly from jobs waiting queue
> 
> Of course when faxq is not in its waiting loop it doesn't see other
> events coming, they are waiting in system's buffers.
> 
> faxq is shooting itself in the foot and it's pushing your computer in
> the red zone with big queue :
> runScheduler in faxd/faxQueueApp.c++ is processing all the jobs in the
> run gueue even if no modems are in READY state. So in your case the main
> thread is reading 1500 and up files (jobs status file) for nothing - if
> the main goal of hylafax is sending faxes, not trashing out of
> delay,tries or whatever faxes, of course - And runSheduler is called
> many times: each time you add a job, each time a job finished, and so
> on.
> 
> It's easy to change this ie : change assignModem behavior so
> runScheduler will return when there's no more modems available . I tried
> and yes now with a 10000 run queue, sendfax takes the same time. 
> But side effects are unknow, after all it's just faxq's main routines
> :).

Perhaps it would be better to change:

while (getnextentryinqueue() != NULL) {
...

to:

while (getnextentryinqueue() != NULL && ++counter < QUEUE_TOO_BIG) {
...

[or whatever]

That will help cut faxq down to size when it's deciding which fax to send
as well; when the queue has 9,000,000 entries it's probably less important 
to weight each entry and ponder on the relative merits of each one.  
QUEUE_TOO_BIG 	should probably be at least a compile time, probably better
as run time, tweakable.  It should be different on a 386 with a shonky modem
compared to a dual P-II 400 with a bank of 256 modems. :-)

-- 
"Virgin Trains: It's quicker by balloon."
	-- Peter Corlett



Home
Report any problems to webmaster@hylafax.org

HylaFAX is a trademark of Silicon Graphics Corporation.
Internet connectivity for hylafax.org is provided by:
VirtuALL Private Host Services