Back to PDQ
PDQ Software Distribution
This page was last updated on Apr 9, 2006
|Languages:||C, Perl, Python|
|Compiled:||gcc v3.3.1 20041026 (Apple Computer, Inc. build 4061)|
|Maintainers:||Neil Gunther and Peter Harding|
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:
- Java version of PDQ (by Peter Harding)
- PHP version of PDQ (by Italian student Samuel Zallocco)
- Threaded-server model and errata corrections (by Neil Gunther)
- Better organization of the
Perl and Python models
Stay tuned! Better yet, get notified! :-)
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.
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:
- Change to the /pdq subdirectory (cd pdq)
- Change to the perl5 directory: cd perl5
- Run the setup script: ./setup.sh
- 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. INSTALLATION: 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 //download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe. 3. Run Perl makefile.pl. 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": PSDK-FULL.6.cab and PSDK-FULL.7.cab. (Also get PSDK-FULL.15.cab for a later step below.) The contents can be extracted with WINZIP. Extract from the two files above: PSDK-SDK_Core_BLD-commom.0.cab, PSDK-SDK_Core_BLD-commom.1.cab, PSDK-SDK_Core_BLD-commom.2.cab. 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: BaseTsd.h Guiddef.h Imm.h Mcx.h PopPack.h PshPack1.h PshPack2.h PshPack4.h PshPack8.h Reason.h specstrings.h StrAlign.h Tvout.h winbase.h WinCon.h WinDef.h windows.h WinError.h WinGDI.h WinNetWk.h WinNls.h WinNT.h WinReg.h WinSock.h WinSvc.h WinUser.h WinVer.h 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__, ##args) 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 PSDK-FULL.15.cab this file: PSDK-SDK_MAC_BLD_X86-common.o.cab. 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 PSDK-SDK_Core_BLD-commom.0.cab, PSDK-SDK_Core_BLD-commom.1.cab, PSDK-SDK_Core_BLD-commom.2.cab) and move the following to ..\perl5: AdvAPI32.Lib ComDlg32.Lib Gdi32.Lib Mpr.Lib NetAPI32.Lib Ole32.Lib OleAut32.Lib Shell32.Lib User32.Lib Uuid.Lib Version.Lib WinMM.Lib WinSpool.Lib WSock32.Lib 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 above. 11. Ran nmake. 12. Ran nmake install. 13. Ran the test.pl 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.
- Minor maintenance release only. Major revisions and cleanup will happen after the new book
manuscript is submitted for publication (very soon now).
- Some documented functionality was not being exported through the libary interface.
- The online PDQ Manual now has hyperlinks aid navigation and is also included in your local PDQ200x directory.
- The following nodal functions are available:
- PDQ_GetQueueLength(node, ...)
- PDQ_GetUtilization(node, ...)
- PDQ_GetResidenceTime(node, ...)
The following system level functions are available:
- PDQ_GetQueueLength(node, ...)
New versions of PDQ are released periodically. Please fill out this form if you would like to notified by email.