There is a neat command, lscpu, which is very handy to display CPU information on
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 32 On-line CPU(s) list: 0-31 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 2 ......
But unfortunately, the
BSD OSs lack this command, maybe one reason is
lscpu relies heavily on
/proc file system which
BSD don’t provide, :-). Take
OpenBSD as an example, if I want to know
dmesg should be one choice:
# dmesg | grep -i cpu cpu0 at mainbus0: apid 0 (boot processor) cpu0: Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz, 2527.35 MHz cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,XSAVE,NXE,LONG,LAHF,PERF,SENSOR cpu0: 3MB 64b/line 8-way L2 cache cpu0: apic clock running at 266MHz cpu0: mwait min=64, max=64, C-substates=0.2.2.2.2.1.3, IBE ......
But the output makes me feeling messy, not very clear. As for dmidecode, it used to be another option, but now can’t work out-of-box because it will access
/dev/mem which for security reason,
OpenBSD doesn’t allow by default (You can refer this discussion):
# ./dmidecode # dmidecode 3.1 Scanning /dev/mem for entry point. /dev/mem: Operation not permitted
Based on above situation, I want a specified command for showing
CPU information for my
BSD box. So in the past
2 weeks, I developed a
lscpu program for
OpenBSD/FreeBSD, or more accurately,
x86 architecture since I only have some
Intel processors at hand. The application gets
CPU metrics from
BSD OSs provide
sysctl interface which I can use to get general
CPU particulars, such as how many CPUs the system contains, the byte-order of CPU, etc.
CPUID instruction. For
x86 architecture, CPUID instruction can obtain very detail information of
CPU. This coding work is a little tedious and error-prone, not only because I need to reference both
AMD specifications since these
2 vendors have minor distinctions, but also I need to parse the bits of register values.
The code is here, and if you run
x86 processors, please try it. It will be better you can give some feedback or report the issues, and I appreciate it very much. In the future if I have other CPUs resource, such as
SPARC64, maybe I will enrich this small program.