Happy Friday AskPerf! We’ve had a few questions in the past about guidelines for application design in a faster computing environment. Now, I make absolutely no claims whatsoever to being any sort of a code guru, and so I wasn’t about to try to pass myself off as an expert in that area! Thankfully, after doing some research, it turns out that a fellow Microsoft Blogger (Rick Vacik) has already done so!
Below are some excerpts from Rick’s three-part series on Designing Applications for High Performance.
Designing Applications for High Performance – Part I: Now that processors won’t be getting dramatically faster each year, application developers must learn how to design their applications for scalability and efficiency on multiple processor systems. I have spent the last 20 years in SQL Server development and the Windows Server Performance Group looking into multi-processor performance and scalability problems. Over the years, I have encountered a number of recurring patterns that I would like to get designers to avoid. In this three part series, I will go over these inefficiencies and provide suggestions to avoid them in order to improve application scalability and efficiency. The guidelines are oriented towards server applications, but the basic principles apply to all applications.
Designing Applications for High Performance – Part II: The second part of this series covers Data Structures and Locks. I will provide general guidance on which data structures to use under certain circumstances and how to use locks without having a negative impact on performance. Finally, there will be examples covering common problems/solutions and a simple cookbook detailing functional requirements and recommendations when using data structures and locks.
Designing Applications for High Performance – Part III: The third, and final, part of this series covers I/O Completions and Memory Management techniques. I will go through the different ways to handle I/O completions with some recommendations and optimizations introduced in Vista and later releases of Windows. I will also cover tradeoffs associated with designing single and multiple process applications. Finally, I will go through memory fragmentation, heap management, and provide a list of the new and expanded NUMA topology APIs.
Enjoy your weekend everyone! Until next time …