Skip to content
/ pdq Public

PDQ is an open-source library for modeling and analyzing the performance and capacity of computer, manufacturing, and network systems using queueing theory.

License

Notifications You must be signed in to change notification settings

vnvo/pdq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDQ: Pretty Damn Quick

PDQ is an open-source library for modeling and analyzing the performance and capacity of computer, manufacturing, and network systems using queueing theory. It helps developers, engineers, and researchers quickly build and solve queueing-network models across multiple programming languages. Learn more: What is PDQ?

📑 Table of Contents


📌 What is PDQ?

PDQ is a library of functions for solving queueing-network models of systems such as:

  • Distributed computer systems
  • Manufacturing systems
  • Packet networks

PDQ models can be written in a variety of conventional programming languages.

The book Analyzing Computer System Performance with Perl::PDQ presents example applications for computer system performance analysis written in Perl.
An additional example in Python is provided below.

Overview: What is PDQ?


🛠 Supported Languages

C

R

Python 3

  • Python 3 support has been added and follows the R interface.
  • Examples are available here.
  • Refer to the Python Readme for more details.

Perl

  • Perl PDQ maintenance officially ended with PDQ release 6.2.0.
  • This ensures compatibility with the 2nd edition of the Perl PDQ book (2011).

💻 Supported Platforms

  • Linux
  • macOS
  • Windows

👥 Maintainers

  • Neil Gunther
  • Paul Puglia
  • Vahid Negahdari

🤝 Contributors

  • Denny Chen
  • Phil Feller
  • Neil Gunther
  • Peter Harding
  • Paul Puglia
  • Sam Zallocco
  • Vahid Negahdari

📄 License

PDQ is distributed as OSS under the MIT license.


📚 Documentation


🖥 Example (R)

The following PDQ model, written in R, simulates an AWS cloud application using the CreateMultiNode function along with the MSC option for modeling a multiserver queue that services a finite number of user requests.

For background, see:
Linux-Tomcat Application Performance on Amazon AWS

library(pdq)

requests <- 400   # user load
threads  <- 300   # tomcat threads
stime    <- 0.444 # measured service time

Init("AWS Tomcat Model")
CreateClosed("Requests", BATCH, requests, 0.0)
CreateMultiNode(threads, "Threads", MSC, FCFS)
SetDemand("Threads", "Requests", stime)
SetWUnit("Reqs")
Solve(EXACT)
Report()

This would procude an output like this:

                        PRETTY DAMN QUICK REPORT         
               ==========================================
               ***  on   Tue Nov 24 08:10:59 2020     ***
               ***  for  AWS Tomcat Model             ***
               ***  PDQ  Version 7.0.0 Build 112420   ***
               ==========================================

               ==========================================
               ********      PDQ Model INPUTS    ********
               ==========================================

Queueing Network Parameters

Node Sched Resource   Workload   Class    Service time
---- ----- --------   --------   -----    ------------
MSC  FCFS  Threads    Requests   BATCH        0.444000

Network type:        CLOSED
Workload streams:    1
Queueing nodes:      1

Workload       Jobs        R minimum
--------       ----        ----------
Requests     400.00        0.4440


               ==========================================
               ********     PDQ Model OUTPUTS    ********
               ==========================================

Solution method: EXACT

               ********   SYSTEM Performance     ********

Metric                   Value      Unit
------                  -------     ----
Workload: "Requests"
Mean concurrency        400.0000    Reqs
Mean throughput         675.6757    Reqs/Sec
Response time             0.5920    Sec
Stretch factor            1.3333

Bounds Analysis:
Max throughput          675.6757    Reqs/Sec
Min response              0.4440    Sec
Max demand                0.0015    Sec
Total demand              0.4440    Sec
Optimal jobs            300.0000    Jobs


               ********   RESOURCE Performance   ********

Metric          Resource     Work               Value    Unit
------          --------     ----              -------   ----
Capacity        Threads      Requests              300   Servers
Throughput      Threads      Requests         675.6757   Reqs/Sec
In service      Threads      Requests         300.0000   Reqs
Utilization     Threads      Requests         100.0000   Percent
Queue length    Threads      Requests         400.0000   Reqs
Waiting line    Threads      Requests         100.0000   Reqs
Waiting time    Threads      Requests           0.1480   Sec
Residence time  Threads      Requests           0.5920   Sec

About

PDQ is an open-source library for modeling and analyzing the performance and capacity of computer, manufacturing, and network systems using queueing theory.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published