295
© The Author(s) 2020
S. Scargall, Programming Persistent Memory, https://doi.org/10.1007/978-1-4842-4932-1_15
CHAPTER 15
Profiling and Performance
Introduction
This chapter first discusses the general concepts for analyzing memory and storage
performance and how to identify opportunities for using persistent memory for both
high-performance persistent storage and high-capacity volatile memory. We then
describe the tools and techniques that can help you optimize your code to achieve the
best performance.
Performance analysis requires tools to collect specific data and metrics about
application, system, and hardware performance. In this chapter, we describe how to
collect this data using Intel VTune Profiler. Many other data collection options are
available; the techniques we describe are relevant regardless of how the data is collected.
Performance Analysis Concepts
Most concepts for performance analysis of persistent memory are similar to those
already established for performance analysis of shared memory programs or storage
bottlenecks. This section outlines several important performance considerations you
should understand to profile and optimize persistent memory performance and defines
the terms and situations we use in this chapter.
Compute-Bound vs. Memory-Bound
Performance optimization largely involves identifying the current performance bottleneck
and improving it. The performance of compute-bound workloads is generally limited by
the number of instructions the CPU can process per cycle. For example, an application
doing a large number of calculations on very compact data without many dependencies
is usually compute-bound. This type of workload would run faster if the CPU were faster.
Compute-bound applications usually have high CPU utilization, close to 100%.
© The Author(s) 2020
S. Scargall, Programming Persistent Memory, https://doi.org/10.1007/978-1-4842-4932-1_15
CHAPTER 15
Profiling and Performance
Introduction
This chapter first discusses the general concepts for analyzing memory and storage
performance and how to identify opportunities for using persistent memory for both
high-performance persistent storage and high-capacity volatile memory. We then
describe the tools and techniques that can help you optimize your code to achieve the
best performance.
Performance analysis requires tools to collect specific data and metrics about
application, system, and hardware performance. In this chapter, we describe how to
collect this data using Intel VTune Profiler. Many other data collection options are
available; the techniques we describe are relevant regardless of how the data is collected.
Performance Analysis Concepts
Most concepts for performance analysis of persistent memory are similar to those
already established for performance analysis of shared memory programs or storage
bottlenecks. This section outlines several important performance considerations you
should understand to profile and optimize persistent memory performance and defines
the terms and situations we use in this chapter.
Compute-Bound vs. Memory-Bound
Performance optimization largely involves identifying the current performance bottleneck
and improving it. The performance of compute-bound workloads is generally limited by
the number of instructions the CPU can process per cycle. For example, an application
doing a large number of calculations on very compact data without many dependencies
is usually compute-bound. This type of workload would run faster if the CPU were faster.
Compute-bound applications usually have high CPU utilization, close to 100%.
