Scratch
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html> <meta name="GENERATOR" content="TtH 3.38">
<style type="text/css"> div.p { margin-top: 7pt;}</style> <style type="text/css"></style>
<link rel=stylesheet href="http://www.perfdynamics.com/Tools/pdq.css" type="text/css"></link>
<title> PDQ Software Distribution</title>
PDQ Software Distribution
This page was last updated on May 4, 2007
Current Distribution
Version: | 4.2 |
Build: | 20070228 |
Languages: | C, Java, Perl, PHP, Python |
Compiled: | gcc version 4.0.0 20041026 (Apple, Inc. build 4061) |
Maintainers: | Neil Gunther and Peter Harding |
Please note that the PDQ function CreateMultiNode,
defined in Section 6.6.2 (p. 226) of the <A HREF="http://www.perfdynamics.com/iBook/ppa_new.html">Perl::PDQ book</A>, is not available in this release. See Section <a href="#sec:news">2</a> for the lastest developments regarding this topic. |
Contents
<a href="#tth_sEc1"
>1 Downloading</a>
<a href="#tth_sEc2"
>2 News</a>
<a href="#tth_sEc3"
>3 Installing</a>
<a href="#tth_sEc3.1"
>3.1 UNIX Environments</a>
<a href="#tth_sEc3.2"
>3.2 UNIX Installation Gotchas</a>
<a href="#tth_sEc3.3"
>3.3 WINDOWS with ActiveState Perl</a>
<a href="#tth_sEc3.3.1"
>3.3.1 Tom Becker's Notes</a>
<a href="#tth_sEc3.3.2"
>3.3.2 Christof Schmalenbach's Notes</a>
<a href="#tth_sEc4"
>4 Get Notified About Updates</a>
<a href="#tth_sEc5"
>5 Where's Waldo? (Anyone C-een him?)</a>
<a href="#tth_sEc6"
>6 User Guide</a>
<a href="#tth_sEc7"
>7 Feedback</a>
<a name="tth_sEc1"> 1</a> Downloading
Major new features in the current <A HREF="http://www.perfdynamics.com/Tools/pdq.tar.gz">download</A> include:
- Java version of PDQ developed by Peter Harding
- PHP version of PDQ developed by Italian student Samuel Zallocco
- Threaded-server model and errata corrections developed by Neil Gunther
- Better organization of the
<A HREF="http://www.perfdynamics.com/Tools/PDQperl.html">Perl</A>
and
<A HREF="http://www.perfdynamics.com/Tools/PDQpython.html">Python</A>
model directories
NOTE: The PHP version has not been tested by us and is released as is with no guarantees.
<a name="tth_sEc2"> 2</a> News
<a name="sec:news">
</a>
- MSQ nodes:
- I have implemented multiserver queues in the PDQ C-language only library,
and it is now in beta test.
The goal is to allow you to create OPEN-circuit models (initially) by defining any sequence of M/M/m queues. Instead of introducing a completely new procedure, like PDQ_CreateMultiNode (or PDQ::CreateMultiNode described in Chapter 6 of the Perl::PDQ book), I have come up with a simpler idea. You will call PDQ_CreateNode() in the usual way but, by asserting a new MSQ flag to tell PDQ the node is multi-server queue, you then specify the integer number of servers (m) for that node. For example, an m = 10 multiserver PDQ node named "mserver" would be instantiated using the standard CreateNode procedure with the following arguments:
PDQ_CreateNode("mserver", 10, MSQ).
The PDQ generic report has also been altered to include the new MSQ node.
More details will be forthcoming as the implementation unfolds.
Stay tuned. - Create functions becoming procedures:
-
Currently, the functions CreateOpen(), CreateClosed()
each return an integer value corresponding to the
total number of PDQ streams of work and CreateNode() returns an
integer value corresponding to the total number of PDQ queueing nodes
created. These returns are unnecessary and are also causing problems for porting.
In the next major release (PDQ 5.0 ?), the PDQ Create functions will become procedures i.e.,
they will no longer return a value. In ANSI parlance, they will become voids. To determine the count of PDQ streams or PDQ nodes, you will need to actively call two new functions:
- int streams = ... GetStreamsCount();
- int nodes = ... GetNodesCount();
Although most of you probably don't use these values, this is a heads-up to start planning for
the change now. - int streams = ... GetStreamsCount();
<a name="tth_sEc3"> 3</a> Installing
After downloading the tarball pdq.tar.gz, you should 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/ (or similar).
In a Microsoft Windows 2K or XP environment, might want to consider running a Linux style <A HREF="http://www.cygwin.com/mirrors.html"">bash shell</A>. 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 Section <a href="#sec:activeperl">3.3</a>.
<a name="tth_sEc3.1"> 3.1</a> UNIX 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:
- 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.
<a name="tth_sEc3.2"> 3.2</a> UNIX Installation Gotchas
The following items are typical of the installation problems that can prevent Perl PDQ models from executing.
- Line termination problems.
Check the CR/LF conventions used in text files in your environment. - Permissions problems.
If you don't have root privileges, you will need to install the PERL module to a lib/ directory that is local to you. - Pathing problems.
The Perl interpreter has to be able to find the pdq.pm module. If it can't, the typical error message begins"Can't locate pdq.pm in ( contains: ...."
To facilitate finding it on my MacOS X G4, for example, I had to export the UNIX environment variable PERL5LIB using the shell command:
setenv PERL5LIB /Users/njg///lib/perl5/site_perl/5.8.6/darwin-.../
You should then include this env var in your .cshrc or whatever login profile you use.
Check this variable using the shell command:
echo $PERL5LIB
See the README file in the Perl5/ directory of this distribution for more details about installation setup and debugging.
<a name="tth_sEc3.3"> 3.3</a> WINDOWS with ActiveState Perl
<a name="sec:activeperl">
</a> I have now received two sets of instructions for installing ActivePerl by:
- Tom Becker - See Section <a href="#sec:tom">3.3.1</a>
- Christof Schmalenbach - See Section <a href="#sec:christof">3.3.2</a>
I don't know anything about ActivePerl (and I don't want to know), but I am very grateful to these users for providing their installation instructions which may be helpful to other ActivePerl users.
<a name="tth_sEc3.3.1"> 3.3.1</a> Tom Becker's Notes
<a name="sec:tom">
</a> The following extensive notes were kindly provided by Tom Becker
who undertook a Herculean effort to get Perl::PDQ working under ActiveState Perl on Windows XP. Reading this makes realize why I use <A HREF="http://cygwin.com/">cygwin</A> 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.
<a name="tth_sEc3.3.2"> 3.3.2</a> Christof Schmalenbach's Notes
<a name="sec:christof">
</a> I (CS) use ActivePerl, but not cygwin. After some experiments I found a way of installation of Perl::PDQ under win32 without extensive use of MS Tools. Here is my approach:
1. Download nmake as descriped by Tom Becker 2. Download MinGW - Minimalist GNU for Windows (www.mingw.org) and install it 3. Open a DOS Shell and extend your path env variable so that mingw\bin is in front of perl. set path=d:\programs\MinGW\mingw32\bin;d:\programs\MinGW\bin;D:\programs\perl\bin in my environment 4. change to the pdq\lib directory 5. use gcc (from mingw) to compile pdq c files to object files (for example MVA_Approx.o..) 6. copy or move the object files to the ..\pdq\perl5 directory 7. call perl MakeFile.PL 8. call nmake MakeFile 9. after a while this creates ..pdq\perl5\blib\arch\auto\pdq\pdq.dll With this dll I can use Perl::PDQ without problems. IMPORTANT: If mingw\bin is not in the path, perl MakeFile.PL will create cl.exe calls (as Tom remarked). But if Mingw\bin is in the path, the gcc compiler is used instead of MS. So in general there is not a lot of difference between linux/cygwin and win32 for c-calls from perl. BTW, there is a document (perlxstut.html) in the activeperl distribution, which explains the general approach for Perl extensions.
Once you are successful (or while waiting for your sys admin to set it up) you might care to review the <A HREF="http://www.perfdynamics.com/Tools/PDQ.html">basic concepts</A> behind PDQ.
<a name="tth_sEc4"> 4</a> Get Notified About Updates
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 <A HREF="http://www.perfdynamics.com/emailform.html">Notify for PDQ updates</A>. The same applies if you have changed your email address (e.g., changed employer).
<a name="tth_sEc5"> 5</a> 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 <A HREF="http://www.perfdynamics.com/iBook/ppa.html">The Practical Performance Analyst</A>. The C-code of those PDQ models can be found in the directory examples/ppa_1998/. The Perl scripts for the PDQ models discussed my 2005 book
<A HREF="http://www.perfdynamics.com/books.html">Analyzing Computer System Performance with Perl::PDQ</A>, can now be found in the directory examples/ppdq_2005/. A detailed synopsis of the PDQ functions in Perl is presented in Chapter 6.
<a name="tth_sEc6"> 6</a> User Guide
The online <A HREF="http://www.perfdynamics.com/Tools/PDQman.html">PDQ Manual</A> for the C version of PDQ is now hyperlinked for easier navigation and supercedes Appendix A in the
<A HREF="http://www.perfdynamics.com/books.html">The Practical Performance Analyst</A>.
<a name="tth_sEc7"> 7</a> Feedback
New versions of PDQ are released periodically. Please fill out this <A HREF="http://www.perfdynamics.com/emailform.html">form</A> if you would like to notified by email.
File translated from
TEX by <a href="http://hutchinson.belmont.ma.us/tth/">
TTH</a>,
version 3.38.
On 4 May 2007, 07:13.
</html>