This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Also available in other formats.
Register your product to gain access to bonus material or receive a coupon.
Listen to Dick discuss the book and concepts on Software Engineering Radio.
Watch Dick's Stanford lecture and listen for comments from Donald Knuth in attendance.
An Expert Guide to Software Performance Optimization
From mobile and cloud apps to video games to driverless vehicle control, more and more software is time-constrained: It must deliver reliable results seamlessly, consistently, and virtually instantaneously. If it doesn't, customers are unhappy--and sometimes lives are put at risk. When complex software underperforms or fails, software engineers need to identify and address the root causes. This is difficult and, historically, few tools have been available to help.
In Understanding Software Dynamics, performance expert Richard L. Sites tackles the problem head on, offering expert methods and advanced tools for understanding complex, time-constrained software dynamics, improving reliability and troubleshooting challenging performance problems.
Sites draws on several decades of experience pioneering software performance optimization, as well as extensive experience teaching graduate-level developers. He introduces principles and techniques for use in any environment, from embedded devices to datacenters, illuminating them with examples based on x86 or ARM processors running Linux and linked by Ethernet. He also guides readers through building and applying a powerful, new, extremely low-overhead open-source software tool, KUtrace, to precisely trace executions on every CPU core. Using insights gleaned from this tool, readers can apply nuanced solutions--not merely brute-force techniques such as turning off caches or cores.
Download the sample pages (includes Chapter 6)
Foreword xix
Preface xxi
Acknowledgments xxv
About the Author xxvii
Part I: Measurement 1
Chapter 1: My Program Is Too Slow 3
Chapter 2: Measuring CPUs 15
Chapter 3: Measuring Memory 31
Chapter 4: CPU and Memory Interaction 49
Chapter 5: Measuring Disk/SSD 61
Chapter 6: Measuring Networks 85
Chapter 7: Disk and Network Database Interaction 111
Part II: Observation 131
Chapter 8: Logging 133
Chapter 9: Aggregate Measures 141
Chapter 10: Dashboards 157
Chapter 11: Other Existing Tools 167
Chapter 12: Traces 193
Chapter 13: Observation Tool Design Principles 209
Part III: Kernel-User Trace 217
Chapter 14: KUtrace: Goals, Design, Implementation 219
Chapter 15: KUtrace: Linux Kernel Patches 227
Chapter 16: KUtrace: Linux Loadable Module 239
Chapter 17: KUtrace: User-Mode Runtime Control 245
Chapter 18: KUtrace: Postprocessing 249
Chapter 19: KUtrace: Display of Software Dynamics 257
Part IV: Reasoning 267
Chapter 20: What to Look For 269
Chapter 21: Executing Too Much 271
Chapter 22: Executing Slowly 279
Chapter 23: Waiting for CPU 289
Chapter 24: Waiting for Memory 299
Chapter 25: Waiting for Disk 307
Chapter 26: Waiting for Network 319
Chapter 27: Waiting for Locks 337
Chapter 28: Waiting for Time 357
Chapter 29: Waiting for Queues 361
Chapter 30: Recap 383
Appendix A: Sample Servers 387
Appendix B: Trace Entries 391
Glossary 397
References 405
Index 415
We've made every effort to ensure the accuracy of this book and its companion content. Any errors that have been confirmed since this book was published can be downloaded below.
Download the errata (20 KB .docx)