Basic performance metrics remain remarkably similar no matter what changes occur in the field of software development. This is a bit surprising in an age when the job of optimizing system performance has changed dramatically as modern applications are more likely to interact with containers like Docker rather than interacting directly with system hardware. Speed, reliability and efficiency always make the Top 5 list of most desirable characteristics for most organizations. Yet how developers achieve these goals tends to evolve dramatically with each advance in technology. Jeremy Eder, principle software eengineer at Red Hat, shared his insights into ways his company is working to remove barriers to top performance and how teams across the software industry might do the same by optimizing system performance.
Learn to navigate NUMA
Because most systems today use a NUMA (non-uniform memory access) configuration method, cores and memory have different access times. "They aren't equidistant from one another,” Eder said. “Depending on where your applications run, you can get different performance. Those swings can be in the 20to 30% range."
Developers would do well to consider configuration in the software design phase and take advantage of products that are engineered to automate NUMA balancing.
Capture the power of the CPU
Developers need to understand the underlying platform.
Jeremy Eder, principle software engineer at Red Hat
"Different CPU generations have different performance characteristics,” Eder said. “At a recent conference, one vendor showed different results based on implementing the latest instructions for INTEL's chips -- and performance went through the roof."
Currently, only the most advanced developers think about ways to take advantage of upgraded CPU technology. For optimizing system performance, Eder encouraged app developers to take this information into account.
"Developers need to understand the underlying platform," he said. "For example, containers have that information since they have raw access to container details. App developers should key off those pieces of information."
Use containers to save space
The advent of containers takes lightweight to a whole new level in terms of software design and resource allocation. One intelligent advance Eder’s team made in improving performance in the Docker stack was segregating debugging and performance analysis from the base OS and putting them in a debug container. "That way, it's not using up valuable resources when it's not needed."
Be an early adopter of futuristic optimization
As methods for optimizing system performance progress to keep pace with new hardware, infrastructure and workloads, smart tooling and automated solutions to capture maximum performance will become the norm. But even before such solutions are baked in, developer teams can use the strategies above to gain a competitive advantage for their software and their organization.
How are you optimizing the performance of your Docker infrastructure? Email us and let us know!