Back to PDQ

PDQ Software Distribution

This page was last updated on Apr 9, 2006

Current Distribution

Version: 3.0
Build: 111904
Languages: C, Perl, Python
Compiled: gcc v3.3.1 20041026 (Apple Computer, Inc. build 4061)
Maintainers: Neil Gunther and Peter Harding

Lastest News

It's been about 15 months since the last release of PDQ (Build 111904). This whole effort is entirely voluntary (we still have "day jobs"), so we do appreciate your patience. The good news is that we are now preparing to release version 4.0 very shortly. Here's some of the new things you can expect:

  1. Java version of PDQ (by Peter Harding)

  2. PHP version of PDQ (by Italian student Samuel Zallocco)

  3. Threaded-server model and errata corrections (by Neil Gunther)

  4. Better organization of the Perl and Python models

Stay tuned! Better yet, get notified! :-)

Email Notification

If you would like to be notified by email about future PDQ updates, please fill out the online form with your correct email address and select the heading Notify for PDQ updates. The same applies if you have changed your email address (e.g., changed employer).

Where's Waldo? (Anyone C-een him?)

A number of people have asked me for the C-language version of PDQ, especially those using my 1998/2000 book The Practical Performance Analyst. The C-code of those PDQ models can be found in the directory examples/ppa_1998/. The Perl and Python PDQ models for my 2005 book Analyzing Computer System Performance with Perl::PDQ, can be found in the directory examples/sv_2004/. A detailed synopsis of how to use the Perl version of PDQ can be found in Chapter 6 of that book. It's all there. Trust me.


The latest PDQ tarball can be downloaded by clicking on the word downloaded.

After downloading the tarball pdq.tar.gz, you unzip it: gunzip pdq.tar.gz to produce the file named pdq.tar. Then you untar it: tar -xvf pdq.tar to produce the directory named pdq/.

Those of you running in a Microsoft Windows 2K or XP environment, might want to consider running a Linux style bash shell.

This is not an emulation (in the sense of requiring a separate interpreter). All commands are .exe's and run directly under the Windows O/S. Of course, you can also write integrated windows code using Windows .dll's or Tcl, etc. Try it, you might like it.


The following section assumes you are using a UNIX or Linux-type environment. Otherwise, your results may vary. In particular, if you are using ActiveState Perl under a Windows O/S, see the next section.

UNIX-like Environments

The Perl interpreter needed to run Perl-PDQ is available on a wide variety of platforms, and is already installed on most UNIX and Linux platforms. The Perl-PDQ module can be built and installed by issuing a make command in the top-level /pdq directory.

Alternatively, it may be built manually by as follows:

  1. Change to the /pdq subdirectory (cd pdq)

  2. Change to the perl5 directory: cd perl5

  3. Run the setup script: ./

  4. Go back up to the pdq directory: cd ..

Now, you should be able to run the code examples provided.

In case there is a problem compiling, perform the following diagnostic steps:

  • Check the PDQ version. Run the command ./Getversion to confirm that you have the same version number as above.

  • Go into the /lib subdirectory and make sure you are using the appropriate Makefile or you may need to create your own---depending on your environment.

Example Makefiles are already provided in that directory for the common operating systems. In some cases, you may need the help of a system administrator to get the files to compile correctly.
The basic goal is to generate a correct libpdq.a archive because it is used by everything.

Windows with ActiveState Perl

The following extensive notes were kindly provided by Tom Becker (Hartford Insurance), who undertook a Herculean effort to get Perl::PDQ working under ActiveState Perl on Windows XP. Reading this makes realize why I use cygwin on my Windows laptop (sonyXPress). But if you must use Active Perl, this is the place to start. Thanks Tom!

This is my experience getting Perl::PDQ running in Windows XP. I have no C
skills, no UNIX skills, very limited Perl skills and am a PC user, not a
developer. All my information was gathered via Google and I hobbled together
all the required bits and pieces. All software used were free downloads.
Hopefully someone can drastically streamline my steps described below. 

ENVIRONMENT: Windows XP Pro with SP1, Pentium 4 CPU, ActiveState Perl 5.8.3
(mswin32-x86-multi-thread) binary build 809 with 8 patches.

	1.	Installed the PDQ_Perl package as recommended. My main
working folder was D:\pdq_perl\perl5\pdq\perl5. A lot of work was done in a
DOS window.

	2.	Downloaded NMAKE15 from Microsoft. This is version 1.5 of
nmake (the equivalent of the UNIX make command). Unzip this into the
..\perl5 folder referenced above. It will add nmake.exe and nmake.err. See

	3.	Run Perl

	4.	ActiveState Perl calls for the cl compiler (Microsoft's C++
compiler). I downloaded a free copy of the Microsoft Visual C++ Toolkit
2003. Installed it and ran VCVARS32.BAT to set up the environmental
variables of LIB, PATH and INCLUDE.

         5.  Downloaded the Windows Server 2003 SP1 Platform SDK Full
Download and picked out windows.h and all associated include header files
and put them in the \Perl\lib\CORE folder. I did not install this product.
The full download is 400MB and has 16 separate 25MB files. A short cut is to
download two cab files from "Windows Server 2003 SP1 Platform SDK Full
Download": and (Also get
for a later step below.) The contents can be extracted with WINZIP. Extract
from the two files above:,, Extract all
the contents of the above three files to one folder. Then sort by file name.
Copy and rename 27 header files to \perl\lib\core folder. Example:
windows_h.95CE7D7B_A68D_11D2_A852_00C04FC2A854 renamed to windows.h. Extract
the following:


	6.	Modified  d:\pdq_perl\perl5\pdq\lib\debug.h to remove the
three periods (...) in this statement:
	 	#define g_debugf(fmt, args...) \
			fprintf(stderr, "%s:%d " fmt, __FILE__, __LINE__,

	7.	Compiled all the c files in d:\pdq_perl\perl5\pdq\lib and
moved the .obj files to ..\perl5. There will be a warning message compiling
PDQ_Utils due to the modification to debug.h above.

	8.	Extract from this file: From this file extract ODBC32.lib and
ODBCCP32.lib and move to ..\perl5.

	9.	Copy from the folder created in step 5 above (the extraction
of,, and move the following to ..\perl5:

	10.	Downloaded and installed Microsoft .NET Framework SDK
Version 1.1 to get msvcrt.lib even though there was a copy of it in the
Windows Server 2003 SP1 Platform SDK ; it was for AMD64 and would not link.
After installation msvcrt.lib is found in \Program Files\Microsoft visual
Studio .NET\VC7\lib folder. Moved it to ...\perl5 with the other libs from

	11.	Ran nmake.

	12.	Ran nmake install.

	13.	Ran the PDQ file to a successful completion.

RECOMMENDATIONS: (For the next pioneer):
1. Investigate why ActiveState Perl call for the cl.exe compiler (MS C++) in
the makefile. Perhaps a simpler compiler can be used.

2. Find out where all the Activestate Perl libs are that are displayed with
the perl -V command. It lists all the libs I had to search for, but were not
on my PC. So how does Activestate Perl use them?

3. Try to install the entire Windows Server 2003 SP1 Platform SDK FULL
DOWNLOAD. Maybe I overlooked msvcrt.lib for x86. However, I did inspect the
x86.msi file and it did reference the AMD64 file, which I tried but was
rejected by the link program. It will also simplify extracting all the
header files. But it is a 400MB download.

4. Get Microsoft to allow the redistribution of the headers and libs, rather
than forcing a download of the products I needed. 

Once you are successful (or waiting for your sys admin to fix it) it might be worthwhile reviewing the basic concepts behind PDQ.


Both Perl and Python versions of PDQ are available in this release. (For real, this time.)

Previous Revisions

  1. Minor maintenance release only. Major revisions and cleanup will happen after the new book manuscript is submitted for publication (very soon now).

  2. Some documented functionality was not being exported through the libary interface.

  3. The online PDQ Manual now has hyperlinks aid navigation and is also included in your local PDQ200x directory.

  4. The following nodal functions are available:
    • PDQ_GetQueueLength(node, ...)

    • PDQ_GetUtilization(node, ...)

    • PDQ_GetResidenceTime(node, ...)

    The following system level functions are available:

    • PDQ_GetThruput()

    • PDQ_GetResponse()

    • PDQ_GetLoadOpt()

    See the online PDQ Manual for the relevant synopsis and example usage.

User Guide

The online PDQ Manual for the C version of PDQ is now hyperlinked for easier navigation and supercedes Appendix A in the " The Practical Performance Analyst.


New versions of PDQ are released periodically. Please fill out this form if you would like to notified by email.

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.