Modern microprocessors—from consumer hybrid processors with Performance and Efficient cores to enterprise multi-socket server platforms—feature complex architectures consisting of Non-Uniform Memory Access (NUMA) domains, shared Level 3 (L3) caches, and dedicated Level 1/Level 2 cache hierarchies. While running a generic lscpu command outputs aggregate hardware specifications, running lscpu -e (extended format) generates a comprehensive, column-based matrix detailing the exact topological relationship between every logical CPU thread, physical core, socket, and memory cache.
Why Extended CPU Topology Information Matters
Inspecting detailed CPU core assignment is critical for high-performance computing, database tuning, real-time audio processing, and virtualization:
- Thread Pinning & CPU Affinity: Identifying which logical processors share physical execution units (Hyper-Threading / SMT) enables administrators to pin latency-sensitive workloads or KVM virtual machines to isolated physical cores.
- NUMA Optimization: On dual-socket or chiplet-based AMD EPYC and Intel Xeon systems, understanding which cores attach directly to local memory channels prevents cross-socket interconnect latency penalties.
- Cache Hierarchy Auditing: Verifying how L1 data (L1d), L1 instruction (L1i), L2, and L3 caches are shared across sibling threads aids in compiler optimization and kernel scheduler analysis.
Running the lscpu -e Command
To generate the extended CPU topology table in Ubuntu:
- Open the Terminal on Ubuntu (press Ctrl + Alt + T).
- Execute the extended flag command:
lscpu -e - The terminal outputs a tabular report displaying standard core parameters:
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXFREQ MINFREQ 0 0 0 0 0:0:0:0 yes 4800.0000 800.0000 1 0 0 0 0:0:0:0 yes 4800.0000 800.0000 2 0 0 1 1:1:1:0 yes 4800.0000 800.0000 3 0 0 1 1:1:1:0 yes 4800.0000 800.0000 4 0 0 2 2:2:2:0 yes 4800.0000 800.0000 5 0 0 2 2:2:2:0 yes 4800.0000 800.0000
Interpreting the Matrix Columns
Each column represents an essential architectural boundary:
- CPU: The OS-assigned logical CPU number (used in tools like
taskset,htop, andsysfs). - NODE: The NUMA node identifier. Systems with a single memory controller display
0across all rows. - SOCKET: The physical CPU package installed on the motherboard (e.g., Socket 0 vs Socket 1).
- CORE: The physical processor core index. Notice how logical CPU 0 and CPU 1 share
CORE 0—this confirms they are two simultaneous multithreading (SMT) siblings executing on the same physical die. - L1d:L1i:L2:L3: The cache slice assignment. In the example above,
CORE 0andCORE 1share identical L1d, L1i, and L2 caches (slice 0), and also share the unified L3 pool (slice 0). - ONLINE: Shows whether the CPU is active (
yes) or has been hot-unplugged or disabled via kernel parameters (no).
Customising Columns with lscpu -e=[LIST]
The lscpu command allows you to specify custom column combinations using a comma-delimited argument list. To view all available columns, run lscpu --help.
For example, to display only the logical CPU ID, physical core ID, cache breakdown, and polarities:
lscpu -e=CPU,CORE,SOCKET,L1d:L1i:L2:L3,ONLINE
To inspect CPU clock throttle boundaries on laptops and mobile workstations, query frequency columns:
lscpu -e=CPU,CORE,MAXFREQ,MINFREQ