How to Inspect CPU Core and Cache Topology in Ubuntu Terminal Using lscpu -e

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:

  1. Open the Terminal on Ubuntu (press Ctrl + Alt + T).
  2. Execute the extended flag command:
    lscpu -e
  3. 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, and sysfs).
  • NODE: The NUMA node identifier. Systems with a single memory controller display 0 across 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 0 and CORE 1 share 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

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.