[bug-pcl] /dev/random delays in pcl6 on AIX 5.2
Henry Stiles
henrys at indra.com
Thu Jul 1 22:50:01 PDT 2004
Thanks we'll pass this along to the ghostscript folks since it affects
code pcl borrows directly from ghostscript. They have a pretty long
list of problems and commercial users are helped before free users so
I don't know when it will get addressed.
Could you post your AIX makefile for building PCL to the mailing
list for other users? Thanks.
Paul Lechnar writes:
> Hi guys.
>
> The following is a description of a delay problem in pcl6, which has
> been solved. My solution is at the end. Discussion follows:
>
> We've been using pcl6 in an AIX 5.2 production environment successfully
> for about 3 months now. Just recently, however, we've started to create
> about 10 pdf's from source PCL files in rapid succession. This led to
> behavior in pcl6 I hadn't noticed before:
>
> 1. The first pcl file is converted in less than 1 second.
> 2. Subsequent runs of pcl6 take between 50-60 seconds to complete
> 3. If you wait 2 minutes and then run pcl6 it will finish immediately.
>
> So, I investigated using the wonderful "truss" tool in AIX. This tool
> is similar to "strace" in linux, which will allow you to follow system
> calls made by a program as it runs. You use it like:
>
> $ truss pcl6 <args>
>
> Output is VERY verbose, so you can redirect to a file like
>
> $ truss -o output.txt pcl6 <args>
>
> Anyway, truss showed that the delay occured just after an fopen() on the
> /dev/random file. This is a psuedo-random number generator (PRNG) in
> AIX and many other UNIX operating systems. Looks like pcl6 is trying to
> get some random binary data to use for some function or other, and the
> first time it runs there is some data ready to be read, but subsequent
> calls have a significant delay before more random stuff is ready to be read.
>
> In AIX, the /dev/random PRNG is "cryptographically strong", which has
> the side effect of being easily exhausted and slow to replenish. There
> is another device file, /dev/urandom (with a "u" in front) which provide
> a steady stream of data. I know this file also exists in linux, it may
> be in other UNIXes too. I decided to change what pcl6 uses as a random
> number source and see if the problem goes away.
>
> FIX:
> A search of the ghostpcl source tree located 2 references to
> /dev/random, both in the directory gs/src. They are "gdevpdf.c" and
> "gdevpdf2.c". There is a short fread() of some data around line 505, to
> populate the pdev->random_offset structure. I Changed the fopen()
> system call to use /dev/urandom in 1 place in each file and recompiled.
>
> This new pcl6 binary works flawlessly with up to 100 consecutive runs.
> I don't think I'll be running it more continuously than that.
>
> Based on comments in the source code, I don't think the random data has
> to be crypto-grade strong, so using urandom shouldn't compromise the
> program's operation (there is reference to using the system date if
> /dev/random is not available).
>
> Hope this helps anyone else experiencing delays
>
> Paul
>
> _______________________________________________
> bug-pcl mailing list
> bug-pcl at ghostscript.com
> http://www.ghostscript.com/mailman/listinfo/bug-pcl
--
./Henry
Artifex Software
More information about the bug-pcl
mailing list