Performance by Design: Computer Capacity Planning by Example / Edition 1

Hardcover (Print)
Used and New from Other Sellers
Used and New from Other Sellers
from $48.74
Usually ships in 1-2 business days
(Save 18%)
Other sellers (Hardcover)
  • All (9) from $48.74   
  • New (7) from $49.26   
  • Used (2) from $48.74   

Overview

Practical systems modeling: planning performance, availability, security, and more

Computing systems must meet increasingly strict Quality of Service (QoS) requirements for performance, availability, security, and maintainability. To achieve these goals, designers, analysts, and capacity planners need a far more thorough understanding of QoS issues, and the implications of their decisions. Now, three leading experts present a complete, application-driven framework for understanding and estimating performance. You'll learn exactly how to map real-life systems to accurate performance models, and use those models to make better decisions--both up front and throughout the entire system lifecycle. Coverage includes:

  • State-of-the-art quantitative analysis techniques, supported by extensive numerical examples and exercises
  • QoS issues in requirements analysis, specification, design, development, testing, deployment, operation, and system evolution
  • Specific scenarios, including e-Business and database services, servers, clusters, and data centers
  • Techniques for identifying potential congestion at both software and hardware levels
  • Performance Engineering concepts and tools
  • Detailed solution techniques including exact and approximate MVA and Markov Chains
  • Modeling of software contention, fork-and-join, service rate variability, and priority
About the Web Site

The accompanying Web site provides companion Excel workbooks that implement many of the book's algorithms and numerical examples.

Read More Show Less

Product Details

  • ISBN-13: 9780130906731
  • Publisher: Prentice Hall
  • Publication date: 1/5/2004
  • Edition description: New Edition
  • Edition number: 1
  • Pages: 552
  • Product dimensions: 7.16 (w) x 9.44 (h) x 1.18 (d)

Read an Excerpt

Goal, Theme, and Approach

The idea of writing this book originated from our observation that some of the most fundamental concepts and methods related to performance modeling and analysis are largely unknown to most Information Technology (IT) practitioners. As a result, many IT systems are designed and built without sufficient consideration given to their non-functional requirements such as performance, availability, and reliability. More often than not, performance is an afterthought. Performance testing is done when a system is nearing completion. At that late stage, it may be necessary to conduct a major redesign to correct eventual performance problems. This approach is inefficient, expensive, time consuming, and professionally irresponsible.

A major goal of this book is to provide to those involved in designing and building computer systems a performance engineering framework to be applied throughout a computer system's life cycle. This framework is quantitative, rigorous, and based on the theory of queuing networks. Some of our readers may not be interested in the details behind the models. For that reason, we divided the book into two parts: the practice of performance engineering (Part I) and the theory of performance engineering (Part II).

Part I brings many examples and case studies supported by algorithms implemented in Visual Basic modules attached to the various MS Excel workbooks provided with the book. Five complete case studies are inspired in real-world problems: a database service sizing, a Web service capacity planning situation, a data center's cost and availability analysis, the sizing of an e-business service, and the performance engineering of a future help desk application. After reading Part I, the reader should be able to 1) identify the sources of potential performance problems of a computer system and 2) build and solve performance models to answer what-if questions regarding competing hardware and software alternatives. The models that you build can be solved with the tools provided with the book.

Part II presents the theory of performance engineering in an intuitive, example-driven manner. Before the algorithms and methods are formalized, the basic ideas are derived from first principles applied to examples. The readers of part II are exposed to the most important techniques for solving 1) Markov models, 2) open and closed multiclass queuing networks using exact and approximate methods, and 3) non-product form queuing networks that represent software contention, blocking, high service time variability, priority scheduling, and fork and join systems.

Throughout Part I, references to specific techniques and methods of Part II provide a nice integration between the two components of this text.

Who Should Read This Book

Information technology professionals must ensure that the systems under their management provide an acceptable quality of service to their users. Managers must avoid the pitfalls of inadequate capacity and meet users' performance expectations in a cost-effective manner. Performance engineers, system administrators, software engineers, network administrators, capacity planners and analysts, managers, consultants, and other IT professionals will benefit from reading parts or the entire book. Its practical, yet sound and formal, approach provides the basis for understanding modern and complex networked environments.

This book can also be used as a textbook for senior undergraduate and graduate courses in Computer Science and Computer Engineering. Exercises are provided at the end of all fifteen chapters. At the undergraduate level, the book is a good starting point to motivate students to learn the important implications and solutions to performance problems. An undergraduate course would concentrate on the first part of the book, i.e., the practice of performance engineering. At the graduate level, it can be used in System Performance Evaluation courses. This book offers a theoretical and practical foundation in performance modeling. The book can also be used as a supplement for systems courses, including Operating Systems, Distributed Systems, and Networking, both at the undergraduate and graduate levels.

Book Organization Part I: The Practice of Performance Engineering

Chapter 1 introduces several properties and metrics used to assess the quality of IT systems. Such metrics include response time, throughput, availability, reliability, security, scalability, and extensibility. The chapter also discusses the various phases of the life cycle of a computer system and shows the importance of addressing QoS issues early on in the design stage as opposed to after the system is deployed.

Chapter 2 presents the qualitative aspects of the performance engineering framework used in this book. The framework is based on queuing networks. The chapter uses examples of practical systems to introduce the various aspects of such queuing networks.

Chapter 3 focuses on the quantitative aspects of the queuing network framework and introduces the input parameters and performance metrics that can be obtained from these models. The notions of service times, arrival rates, service demands, utilization, queue lengths, response time, throughput, and waiting time are discussed. The chapter also introduces Operational Analysis, a set of basic quantitative relationships between performance quantities.

Chapter 4 presents a practical performance engineering methodology and describes its steps: specification of the system's performance goals, understanding the current environment, characterization of the workload, development of a performance model, validation of the performance and workload models, workload forecasting, and cost × performance analysis of competing alternatives.

Chapter 5 uses a complete case study of a database service sizing to introduce the issue of obtaining input parameters to performance models from measurement data. The chapter also discusses various types of software monitors and their use in the data collection process.

Chapter 6 uses a Web server capacity planning case study to introduce several important concepts in performance engineering, including the determination of confidence intervals, the computation of service demands from the results of experiments, the use of linear regression, and comparison of alternatives through analytic modeling and through experimentation.

Chapter 7 applies performance modeling techniques to address the issue of properly sizing a data center. This sizing is part of the system design process and focuses on the number of machines and the number and skill level of maintenance personnel to achieve desired levels of availability.

Chapter 8 shows, through an online auction site case study, how performance models are used to analyze the scalability of multi-tiered e-business services. The workload of these services is characterized at the user level. User models are used to characterize the way customers navigate through the various e-business functions during a typical visit to an e-commerce site. This user-level characterization is mapped to a request-level characterization used by queuing network models. The models are used for capacity planning and performance prediction of various what-if scenarios.

Chapter 9 discusses Software Performance Engineering through a complete case study of the development and sizing of a new help desk application. The chapter explains how parameters for performance models can be estimated at various stages of a system's life cycle. The solutions of these models provide valuable feedback to developers at the early stages of a new application under development.

Part II: The Theory of Performance Engineering

Chapter 10 presents a basic, practical, and working knowledge of Markov models through easy-to-understand examples. Then, the general solution to birth-death Markov chains is presented.

Chapter 11 discusses the most important results in single queuing stations systems. The results presented include M/M/1, M/G/1, M/G/1 with server vacation, M/G/1 with non-preemptive priority, M/G/1 with preemptive resume priority, G/G/1 approximation, and G/G/c approximation. Computer and network related examples illustrate the use of the results.

Chapter 12 reconstructs single class Mean Value Analysis (MVA) from first principles and illustrates the use of the technique through a detailed example. The special case of balanced systems is discussed.

Chapter 13 generalizes the results of chapter 12 to the case of multiclass queuing networks. Results and algorithms for open, closed, and mixed queuing networks are presented. Both exact and approximate techniques are discussed.

Chapter 14 extends the results of chapter 13 for the case of load-dependent devices. These extended model address situations where a device's service rate varies with the queue size.

Chapter 15 discusses approximations to the Mean Value Analysis technique to deal with blocking, high variability of service times, priority scheduling, software contention, and fork and join.

Acknowledgments

Daniel Menasce would like to thank his students and colleagues at George Mason University for providing a stimulating work environment. He would also like to thank his mother and late father for their love and guidance in life. Special recognition goes to his wife, Gilda, a very special person, whose love and companionship makes all the difference in the world. His children Flavio and Juliana have tremendously enriched his life from the moment they were born.

Virgilio Almeida would like to thank his colleagues and students at UFMG. He would also like to thank CNPq (the Brazilian Council for Scientific Research and Development), which provided partial support for his research work. Virgilio would also like to express his gratitude to his family, parents (in memoriam), brothers, and many relatives and friends. His wife Rejane and sons Pedro and Andre have always been a source of continuous encouragement and inspiration.

Larry Dowdy would like to gratefully thank the students and faculty at the University of Leeds, England, particularly David Dubas-Fisher, Jonathan Galliano, Michael Harwood, and Gurpreet Sohal for their feedback, support, and insights. In addition, the Vanderbilt students in CS284 provided many constructive and insightful comments.

We hope that you will enjoy reading this book as much as we enjoyed writing it! Daniel Menasce, Virgilio Almeida, and Larry Dowdy

Read More Show Less

Table of Contents

I. THE PRACTICE OF PERFORMANCE ENGINEERING.

1. Computer System Lifecycle.

Introduction.

QoS in IT Systems.

Response Time.

Throughput.

Availability.

Reliability.

Security.

Scalability.

Extensibility.

System Life Cycle.

Requirements Analysis and Speci.cation.

System Design.

System Development.

System Testing.

System Deployment.

System Operation.

System Evolution.

A Reference Model for IT Systems.

Concluding Remarks.

Exercises.

Bibliography.

2. From Systems to Descriptive Models.

Introduction.

Modeling.

A Simple Database Server Example.

The Database Server Example: Multiple Classes.

The Database Server Example: Open and Closed Classes.

The Database Server Example: a Mixed Model.

The Database Server Example: Types of Resources.

The Database Server Example: Blocking.

The Database Server Example: Software Contention.

Database Example: Simultaneous Resource Possession.

Database Example: Class Switching.

Database Example: Queuing Disciplines.

QN Models.

Concluding Remarks.

Exercises.

Bibliography.

3. Quantifying Performance Models.

Introduction.

Basic Performance Results.

Utilization Law.

Service Demand Law.

The Forced Flow Law.

Little's Law.

Interactive Response Time Law.

Bounds on Performance.

Using QN Models.

Concluding Remarks.

Exercises.

Bibliography.

4. Performance Engineering Methodology.

Introduction.

Performance Engineering.

Motivating Example.

A Model-based Methodology.

Workload Model.

Types of Workload Models.

Clustering Analysis.

Performance Models.

Specifying Performance Objectives.

Specifying a Service Level Agreement.

Specifying Response Time.

Specifying Cost.

Concluding Remarks.

Exercises.

Bibliography.

5. Case Study I: A Database Service.

Introduction.

Database Service Example.

Preliminary Analysis of the Workload.

Workload Clustering.

Building a Performance Model.

Apportioning Total Utilization to Individual Classes.

Computing Service Demands.

Using the Model.

Adding a Third Disk.

Using a Dual CPU System.

Using Faster Disks.

Moving to a 4-CPU System.

Monitoring Tools.

Hardware Monitors.

Software Monitors.

Hybrid Monitors.

Event-trace Monitoring.

Sampling Monitoring.

Measurements Techniques.

Obtaining Input Parameters.

Measuring CPU Utilization.

Overhead Representation.

Arrival Rate.

Concurrency Level.

Number of Active Terminals and Think Time.

CPU Service Demand.

I/O Service Demands.

Concluding Remarks.

Exercises.

Bibliography.

6. Case Study II: A Web Server.

Introduction.

The Web Server.

Preliminary Analysis of the Workload.

Building a Performance Model.

Computing Concurrency Levels.

Computing Service Demands.

Using the Model.

Secure Downloads.

Experimental Comparison of Two Servers.

Concluding Remarks.

Exercises.

Bibliography.

7. Case Study III: A Data Center.

Introduction.

The Data Center.

Building a Model.

Using the Model.

Another Modeling Approach.

A Cost Analysis.

Concluding Remarks.

Exercises.

Bibliography.

8. Case Study IV: An E-Business Service.

Introduction.

The E-Business Service.

The E-Business Workload.

Building a Performance Model.

Using the Performance Model.

Adding More Servers.

Concluding Remarks.

Exercises.

Bibliography.

9. Case Study V: A Help-Desk Service.

Introduction.

The Help Desk Service.

Workload Characterization.

Database Design.

Transaction Logic.

A Performance Model.

Estimating the Number of I/Os.

Estimating Service Demands.

Techniques for SPE.

Obtaining Data for SPE.

Concluding Remarks.

Exercises.

Bibliography.

II. THE THEORY OF PERFORMANCE ENGINEERING.

10. Markov Models.

Introduction.

Modeling Context.

Motivating Examples.

Model Construction.

Model Solution.

Model Interpretation.

Model Assumptions and Limitations.

Generalized Birth-Death Models.

Beyond the Basics.

Chapter Summary.

Exercises.

Bibliography.

11. Single Queue Systems.

Introduction.

Single-Line Single-Server Systems.

The M/M/1 Queue.

The M/G/1 Queue.

M/G/1 with Vacations.

M/G/1 with Priorities.

Non-Preemptive Priorities.

Preemptive Resume Priorities.

Approximation Results.

Concluding Remarks.

Exercises.

Bibliography.

12. Single Class MVA.

Introduction.

MVA Development.

The MVA Algorithm.

Balanced Systems.

MVA Extensions and Limitations.

Chapter Summary.

Exercises.

Bibliography.

13. Queuing Models with Multiple Classes.

Introduction.

The Need for Multiple-Class Models.

Simple Two-Class Model.

Notation and Assumptions.

Closed Models.

Exact Solution Algorithm.

Closed Models: Case Study.

Approximate Solution Algorithms.

Open Models.

Analysis of Multiclass Open Models.

Open Models: Case Study.

Mixed Models.

Concluding Remarks.

Exercises.

Bibliography.

14. Queuing Models with Load Dependent Devices.

Introduction.

Motivating Example.

Client-Server Performance.

Design Questions for a CS Application.

System and Workload Specification.

Single Class Models with LD Devices.

Multiclass Closed Models with LD Devices.

Multiclass Open Models with LD Devices.

Flow-Equivalent Server Method.

Concluding Remarks.

Exercises.

Bibliography.

15. Non Product-Form Queuing Models.

Introduction.

Modeling High Service Time Variability.

The Decomposition Approach.

New MVA-based Decomposition Approach.

Modeling Blocking Effects.

Single Class.

Multiple Classes.

Modeling Priority Scheduling.

Two-Priority Example.

SWIC Priority Algorithm.

Modeling Software Contention.

Single Class Algorithm.

Open QN at the Software Level.

The Multiclass Algorithm.

Modeling Fork/Join Queuing Networks.

Concluding Remarks.

Exercises.

Bibliography.

Subject Index.

Read More Show Less

Preface

Goal, Theme, and Approach

The idea of writing this book originated from our observation that some of the most fundamental concepts and methods related to performance modeling and analysis are largely unknown to most Information Technology (IT) practitioners. As a result, many IT systems are designed and built without sufficient consideration given to their non-functional requirements such as performance, availability, and reliability. More often than not, performance is an afterthought. Performance testing is done when a system is nearing completion. At that late stage, it may be necessary to conduct a major redesign to correct eventual performance problems. This approach is inefficient, expensive, time consuming, and professionally irresponsible.

A major goal of this book is to provide to those involved in designing and building computer systems a performance engineering framework to be applied throughout a computer system’s life cycle. This framework is quantitative, rigorous, and based on the theory of queuing networks. Some of our readers may not be interested in the details behind the models. For that reason, we divided the book into two parts: the practice of performance engineering (Part I) and the theory of performance engineering (Part II).

Part I brings many examples and case studies supported by algorithms implemented in Visual Basic modules attached to the various MS Excel workbooks provided with the book. Five complete case studies are inspired in real-world problems: a database service sizing, a Web service capacity planning situation, a data center’s cost and availability analysis, the sizing of an e-business service, and the performance engineering of a future help desk application. After reading Part I, the reader should be able to 1) identify the sources of potential performance problems of a computer system and 2) build and solve performance models to answer what-if questions regarding competing hardware and software alternatives. The models that you build can be solved with the tools provided with the book.

Part II presents the theory of performance engineering in an intuitive, example-driven manner. Before the algorithms and methods are formalized, the basic ideas are derived from first principles applied to examples. The readers of part II are exposed to the most important techniques for solving 1) Markov models, 2) open and closed multiclass queuing networks using exact and approximate methods, and 3) non-product form queuing networks that represent software contention, blocking, high service time variability, priority scheduling, and fork and join systems.

Throughout Part I, references to specific techniques and methods of Part II provide a nice integration between the two components of this text.

Who Should Read This Book

Information technology professionals must ensure that the systems under their management provide an acceptable quality of service to their users. Managers must avoid the pitfalls of inadequate capacity and meet users’ performance expectations in a cost-effective manner. Performance engineers, system administrators, software engineers, network administrators, capacity planners and analysts, managers, consultants, and other IT professionals will benefit from reading parts or the entire book. Its practical, yet sound and formal, approach provides the basis for understanding modern and complex networked environments.

This book can also be used as a textbook for senior undergraduate and graduate courses in Computer Science and Computer Engineering. Exercises are provided at the end of all fifteen chapters. At the undergraduate level, the book is a good starting point to motivate students to learn the important implications and solutions to performance problems. An undergraduate course would concentrate on the first part of the book, i.e., the practice of performance engineering. At the graduate level, it can be used in System Performance Evaluation courses. This book offers a theoretical and practical foundation in performance modeling. The book can also be used as a supplement for systems courses, including Operating Systems, Distributed Systems, and Networking, both at the undergraduate and graduate levels.

Book Organization Part I: The Practice of Performance Engineering

Chapter 1 introduces several properties and metrics used to assess the quality of IT systems. Such metrics include response time, throughput, availability, reliability, security, scalability, and extensibility. The chapter also discusses the various phases of the life cycle of a computer system and shows the importance of addressing QoS issues early on in the design stage as opposed to after the system is deployed.

Chapter 2 presents the qualitative aspects of the performance engineering framework used in this book. The framework is based on queuing networks. The chapter uses examples of practical systems to introduce the various aspects of such queuing networks.

Chapter 3 focuses on the quantitative aspects of the queuing network framework and introduces the input parameters and performance metrics that can be obtained from these models. The notions of service times, arrival rates, service demands, utilization, queue lengths, response time, throughput, and waiting time are discussed. The chapter also introduces Operational Analysis, a set of basic quantitative relationships between performance quantities.

Chapter 4 presents a practical performance engineering methodology and describes its steps: specification of the system’s performance goals, understanding the current environment, characterization of the workload, development of a performance model, validation of the performance and workload models, workload forecasting, and cost × performance analysis of competing alternatives.

Chapter 5 uses a complete case study of a database service sizing to introduce the issue of obtaining input parameters to performance models from measurement data. The chapter also discusses various types of software monitors and their use in the data collection process.

Chapter 6 uses a Web server capacity planning case study to introduce several important concepts in performance engineering, including the determination of confidence intervals, the computation of service demands from the results of experiments, the use of linear regression, and comparison of alternatives through analytic modeling and through experimentation.

Chapter 7 applies performance modeling techniques to address the issue of properly sizing a data center. This sizing is part of the system design process and focuses on the number of machines and the number and skill level of maintenance personnel to achieve desired levels of availability.

Chapter 8 shows, through an online auction site case study, how performance models are used to analyze the scalability of multi-tiered e-business services. The workload of these services is characterized at the user level. User models are used to characterize the way customers navigate through the various e-business functions during a typical visit to an e-commerce site. This user-level characterization is mapped to a request-level characterization used by queuing network models. The models are used for capacity planning and performance prediction of various what-if scenarios.

Chapter 9 discusses Software Performance Engineering through a complete case study of the development and sizing of a new help desk application. The chapter explains how parameters for performance models can be estimated at various stages of a system’s life cycle. The solutions of these models provide valuable feedback to developers at the early stages of a new application under development.

Part II: The Theory of Performance Engineering

Chapter 10 presents a basic, practical, and working knowledge of Markov models through easy-to-understand examples. Then, the general solution to birth-death Markov chains is presented.

Chapter 11 discusses the most important results in single queuing stations systems. The results presented include M/M/1, M/G/1, M/G/1 with server vacation, M/G/1 with non-preemptive priority, M/G/1 with preemptive resume priority, G/G/1 approximation, and G/G/c approximation. Computer and network related examples illustrate the use of the results.

Chapter 12 reconstructs single class Mean Value Analysis (MVA) from first principles and illustrates the use of the technique through a detailed example. The special case of balanced systems is discussed.

Chapter 13 generalizes the results of chapter 12 to the case of multiclass queuing networks. Results and algorithms for open, closed, and mixed queuing networks are presented. Both exact and approximate techniques are discussed.

Chapter 14 extends the results of chapter 13 for the case of load-dependent devices. These extended model address situations where a device’s service rate varies with the queue size.

Chapter 15 discusses approximations to the Mean Value Analysis technique to deal with blocking, high variability of service times, priority scheduling, software contention, and fork and join.

Acknowledgments

Daniel Menasce would like to thank his students and colleagues at George Mason University for providing a stimulating work environment. He would also like to thank his mother and late father for their love and guidance in life. Special recognition goes to his wife, Gilda, a very special person, whose love and companionship makes all the difference in the world. His children Flavio and Juliana have tremendously enriched his life from the moment they were born.

Virgilio Almeida would like to thank his colleagues and students at UFMG. He would also like to thank CNPq (the Brazilian Council for Scientific Research and Development), which provided partial support for his research work. Virgilio would also like to express his gratitude to his family, parents (in memoriam), brothers, and many relatives and friends. His wife Rejane and sons Pedro and Andre have always been a source of continuous encouragement and inspiration.

Larry Dowdy would like to gratefully thank the students and faculty at the University of Leeds, England, particularly David Dubas-Fisher, Jonathan Galliano, Michael Harwood, and Gurpreet Sohal for their feedback, support, and insights. In addition, the Vanderbilt students in CS284 provided many constructive and insightful comments.

We hope that you will enjoy reading this book as much as we enjoyed writing it! Daniel Menasce, Virgilio Almeida, and Larry Dowdy

Read More Show Less

Customer Reviews

Average Rating 5
( 1 )
Rating Distribution

5 Star

(1)

4 Star

(0)

3 Star

(0)

2 Star

(0)

1 Star

(0)

Your Rating:

Your Name: Create a Pen Name or

Barnes & Noble.com Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & Noble.com that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & Noble.com does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at BN.com or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation

Reminder:

  • - By submitting a review, you grant to Barnes & Noble.com and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Noble.com Terms of Use.
  • - Barnes & Noble.com reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & Noble.com also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on BN.com. It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

 
Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously
Sort by: Showing 1 Customer Reviews
  • Posted June 12, 2013

    I¿m loving McDonalds for fast food... MyDeals247 for the best de

    I’m loving McDonalds for fast food... MyDeals247 for the best deals;))

    Was this review helpful? Yes  No   Report this review
Sort by: Showing 1 Customer Reviews

If you find inappropriate content, please report it to Barnes & Noble
Why is this product inappropriate?
Comments (optional)