I'm familiar with lshw, /proc/cpuinfo, etc. But is there a method for getting at a CPU's CPUID opcode?

up vote 11 down vote accepted

There's a tool called cpuid that one can use to query for much more detailed information than is typically present in lshw or /proc/cpuinfo. On my Fedora 19 system I was able to install the package with the following command:

$ sudo yum install cpuid

Once installed, cpuid is a treasure trove of details about ones underlying CPU.

Multiple versions

There are at least 2 versions of a tool called cpuid. On Debian/Ubuntu:

$ dpkg -p cpuid
Package: cpuid
Priority: optional
Section: admin
Installed-Size: 68
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: amd64
Version: 3.3-9
Depends: libc6 (>= 2.5-0ubuntu1)
Size: 11044
Description: Intel and AMD x86 CPUID display program
 This program displays the vendor ID, the processor specific features,
 the processor name string, different kinds of instruction set
 extensions present, L1/L2 Cache information, and so on for the
 processor on which it is running.
 .
  Homepage: http://www.ka9q.net/code/cpuid/
Original-Maintainer: Aurélien GÉRÔME <ag@roxor.cx>

While on CentOS/Fedora/RHEL:

$ rpm -qi cpuid
Name        : cpuid
Version     : 20130610
Release     : 1.fc19
Architecture: x86_64
Install Date: Wed 29 Jan 2014 09:48:17 PM EST
Group       : System Environment/Base
Size        : 253725
License     : MIT
Signature   : RSA/SHA256, Sun 16 Jun 2013 12:30:11 PM EDT, Key ID 07477e65fb4b18e6
Source RPM  : cpuid-20130610-1.fc19.src.rpm
Build Date  : Sun 16 Jun 2013 05:39:24 AM EDT
Build Host  : buildvm-13.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://www.etallen.com/cpuid.html
Summary     : Dumps information about the CPU(s)
Description :
cpuid dumps detailed information about x86 CPU(s) gathered from the CPUID
instruction, and also determines the exact model of CPU(s). It supports Intel,
AMD, and VIA CPUs, as well as older Transmeta, Cyrix, UMC, NexGen, and Rise
CPUs.

NOTE: The output below will focus exclusively on Todd Allen's implementation of cpuid, i.e. the Fedora packaged one.

Example

The upper section is pretty standard stuff.

$ cpuid -1 | less
CPU:
   vendor_id = "GenuineIntel"
   version information (1/eax):
      processor type  = primary processor (0)
      family          = Intel Pentium Pro/II/III/Celeron/Core/Core 2/Atom, AMD Athlon/Duron, Cyrix M2, VIA C3 (6)
      model           = 0x5 (5)
      stepping id     = 0x5 (5)
      extended family = 0x0 (0)
      extended model  = 0x2 (2)
      (simple synth)  = Intel Core i3 / i5 / i7  (Clarkdale K0) / Pentium U5000 Mobile / Pentium P4505 / U3405 / Celeron Mobile P4000 / U3000 (Arrandale K0), 32nm
   miscellaneous (1/ebx):
      process local APIC physical ID = 0x1 (1)
      cpu count                      = 0x10 (16)
      CLFLUSH line size              = 0x8 (8)
      brand index                    = 0x0 (0)
   brand id = 0x00 (0): unknown

But the lower sections are much more enlightening.

  feature information (1/edx):
      x87 FPU on chip                        = true
      virtual-8086 mode enhancement          = true
      debugging extensions                   = true
      page size extensions                   = true
      time stamp counter                     = true
      RDMSR and WRMSR support                = true
      physical address extensions            = true
      machine check exception                = true
      CMPXCHG8B inst.                        = true
      APIC on chip                           = true
      SYSENTER and SYSEXIT                   = true
      memory type range registers            = true
      PTE global bit                         = true
      machine check architecture             = true
      conditional move/compare instruction   = true
      page attribute table                   = true
      page size extension                    = true
      processor serial number                = false
      CLFLUSH instruction                    = true
      debug store                            = true
      thermal monitor and clock ctrl         = true
      MMX Technology                         = true
      FXSAVE/FXRSTOR                         = true
      SSE extensions                         = true
      SSE2 extensions                        = true
      self snoop                             = true
      hyper-threading / multi-core supported = true
      therm. monitor                         = true
      IA64                                   = false
      pending break event                    = true

It'll show you details about your cache structure:

  cache and TLB information (2):
      0x5a: data TLB: 2M/4M pages, 4-way, 32 entries
      0x03: data TLB: 4K pages, 4-way, 64 entries
      0x55: instruction TLB: 2M/4M pages, fully, 7 entries
      0xdd: L3 cache: 3M, 12-way, 64 byte lines
      0xb2: instruction TLB: 4K, 4-way, 64 entries
      0xf0: 64 byte prefetching
      0x2c: L1 data cache: 32K, 8-way, 64 byte lines
      0x21: L2 cache: 256K MLC, 8-way, 64 byte lines
      0xca: L2 TLB: 4K, 4-way, 512 entries
      0x09: L1 instruction cache: 32K, 4-way, 64-byte lines

Even more details about your CPU's cache:

   deterministic cache parameters (4):
      --- cache 0 ---
      cache type                           = data cache (1)
      cache level                          = 0x1 (1)
      self-initializing cache level        = true
      fully associative cache              = false
      extra threads sharing this cache     = 0x1 (1)
      extra processor cores on this die    = 0x7 (7)
      system coherency line size           = 0x3f (63)
      physical line partitions             = 0x0 (0)
      ways of associativity                = 0x7 (7)
      WBINVD/INVD behavior on lower caches = false
      inclusive to lower caches            = false
      complex cache indexing               = false
      number of sets - 1 (s)               = 63

The list goes on.

References

  • In recent versions of Debian (e.g. V9) the package appears to now be from the same souce as the Fedora one. – Michael Firth May 18 at 12:04

On Ubuntu, the package is the same name (cpuid). It shows a serial number, but I don't know if it is actually correct.

Processor serial: 0003-06A9-0000-0000-0000-0000

(looks a bit fishy to me, but there is a wealth of info to go with it)

Extended brand string: "       Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz"
CLFLUSH instruction cache line size: 8
Initial APIC ID: 1
Hyper threading siblings: 16

Feature flags bfebfbff:
FPU    Floating Point Unit
VME    Virtual 8086 Mode Enhancements
DE     Debugging Extensions
PSE    Page Size Extensions
TSC    Time Stamp Counter
MSR    Model Specific Registers
PAE    Physical Address Extension
MCE    Machine Check Exception
CX8    COMPXCHG8B Instruction
APIC   On-chip Advanced Programmable Interrupt Controller present and enabled
SEP    Fast System Call
MTRR   Memory Type Range Registers
PGE    PTE Global Flag
MCA    Machine Check Architecture
CMOV   Conditional Move and Compare Instructions
FGPAT  Page Attribute Table
PSE-36 36-bit Page Size Extension
CLFSH  CFLUSH instruction
DS     Debug store
ACPI   Thermal Monitor and Clock Ctrl
MMX    MMX instruction set
FXSR   Fast FP/MMX Streaming SIMD Extensions save/restore
SSE    Streaming SIMD Extensions instruction set
SSE2   SSE2 extensions
SS     Self Snoop
HT     Hyper Threading
TM     Thermal monitor
31     reserved

TLB and cache info:
5a: unknown TLB/cache descriptor
03: Data TLB: 4KB pages, 4-way set assoc, 64 entries
76: unknown TLB/cache descriptor
ff: unknown TLB/cache descriptor
b2: unknown TLB/cache descriptor
f0: unknown TLB/cache descriptor
ca: unknown TLB/cache descriptor
  • This is actually a different version of the tool. ka9q.net/code/cpuid. It's also much older on my Ubuntu 12.10 system it's from 2006. – slm Jan 30 '14 at 4:55
  • same here on Xenial, CPUID ver20151017-1, 0003-06C3-0000-0000-0000-0000 – kevinf May 15 '17 at 14:19

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.