Intel 64 and IA-32 Architectures Software Developers Manual Volume 3B, System Programming Guide Part 2

Table Of Contents
18-20 Vol. 3
DEBUGGING AND PERFORMANCE MONITORING
18.6 LAST BRANCH, INTERRUPT, AND EXCEPTION
RECORDING (INTEL
®
CORE
I7 PROCESSOR FAMILY)
The Intel Core i7 processor family and Intel Xeon processors based on Intel microar-
chitecture (Nehalem) support last branch interrupt and exception recording. These
capabilities are similar to those found in Intel Core 2 processors and adds additional
capabilities:
Debug Trace and Branch Recording Control — The IA32_DEBUGCTL MSR
provides bit fields for software to configure mechanisms related to debug trace,
branch recording, branch trace store, and performance counter operations. See
Section 18.5.1.
Last branch record (LBR) stack — There are 16 MSR pairs that store the
source and destination addresses related to recently executed branches. See
Section 18.5.2 and Section 18.6.1.
Monitoring and single-stepping of branches, exceptions, and interrupts
See Section 18.7.4 and Section 18.7.5. In addition, the ability to freeze the
LBR stack on a PMI request is available.
Branch trace messages — The IA32_DEBUGCTL MSR provides bit fields for
software to enable each logical processor to generate branch trace messages.
See Section 18.7.6. However, not all BTM messages are observable using the QPI
link.
Last exception records — See Section 18.7.7.
Branch trace store and CPL-qualified BTS — See Section 18.5.3 and Section
18.7.8.
Processors based on Intel microarchitecture (Nehalem) provide additional capabili-
ties:
Independent control of uncore PMI — The IA32_DEBUGCTL MSR provides a
bit field (see Figure 18-5) for software to enable each logical processor to receive
an uncore counter overflow interrupt.
LBR filtering — In addition to CPL-based filtering of BTS, processors based on
Intel microarchitecture (Nehalem) support filtering of LBR and BTS based on
combination of CPL and branch type conditions. When LBR filtering is enabled,
the LBR stack only captures the subset of branches that are specified by
MSR_LBR_SELECT.