cpu vs CPUTYPE

1 view
Skip to first unread message

Jan Stary

unread,
Jun 6, 2026, 3:17:25 PMJun 6
to freebsd-...@freebsd.org
Dear all,

I just installed 15.0-RELEASE on this HP EliteBook 820 (dmesg below).
It seems to be running fine; as a test of stability, I would like
to recompile GENERIC as is. Without any make.conf or src.conf,
'time make -j4 buildkernel' works and the installed kernel boots.

Now, as a first step, I would like to recompile again, taking advantage
of the optimizations when a specific cpu is set. It seems there are
two places where I can specify that:

the KERNCONF (= GENERIC) says 'cpu HAMMER'
and make.conf has the CPUTYPE variable.

What is the relation of the two?

My actual cpu is an Intel(R) Core(TM) i7-4600U;
that's not HAMMER, about which NOTES says

cpu HAMMER # aka K8, aka Opteron & Athlon64

and the closest CPUTYPE out of

# (Intel CPUs) alderlake, sapphirerapids, tigerlake, cooperlake,
# cascadelake, tremont, goldmont-plus, icelake-server,
# icelake-client, cannonlake, knm, skylake-avx512, knl,
# goldmont, skylake, broadwell, haswell, ivybridge,
# sandybridge, westmere, nehalem, silvermont, bonnell,
# core2, core, nocona, pentium4m, pentium4, prescott,
# pentium3m, pentium3, pentium-m, pentium2, pentiumpro,
# pentium-mmx, pentium, i486

listed in the example make.conf seems to be 'core' (right?)

So let's say I keep 'cpu HAMMER' but specify 'CPUTYPE = core'?
Which one takes precedence? Does one override the other?
Or do they somehow work together?

Is there a list of the possible 'cpu' values in KERNCONF
(like there is a list of CPUTYPE values for make.conf)?

Thank you

Jan


---<<BOOT>>---
Copyright (c) 1992-2025 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC amd64
FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
VT(efifb): resolution 1024x768
CPU: Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz (2693.86-MHz K8-class CPU)
Origin="GenuineIntel" Id=0x40651 Family=0x6 Model=0x45 Stepping=1
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Features2=0x7ffafbff<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,TSCDLT,AESNI,XSAVE,OSXSAVE,AVX,F16C,RDRAND>
AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
AMD Features2=0x21<LAHF,ABM>
Structured Extended Features=0x27ab<FSGSBASE,TSCADJ,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,NFPUSG>
Structured Extended Features3=0x9c000600<MCUOPT,MD_CLEAR,IBPB,STIBP,L1DFL,SSBD>
XSAVE Features=0x1<XSAVEOPT>
VT-x: (disabled in BIOS) PAT,HLT,MTF,PAUSE,EPT,UG,VPID
TSC: P-state invariant, performance statistics
real memory = 10737418240 (10240 MB)
avail memory = 9791574016 (9337 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: <HPQOEM 1991 >
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s) x 2 hardware threads
random: registering fast source Intel Secure Key RNG
random: fast provider: "Intel Secure Key RNG"
random: unblocking device.
ioapic0 <Version 2.0> irqs 0-39
Launching APs: 1 3 2
random: entropy device external interface
kbd1 at kbdmux0
efirtc0: <EFI Realtime Clock>
efirtc0: registered as a time-of-day clock, resolution 1.000000s
smbios0: <System Management BIOS> at iomem 0x9d333218-0x9d333236
smbios0: Entry point: v2.1 (32-bit), Version: 2.7, BCD Revision: 2.7
aesni0: <AES-CBC,AES-CCM,AES-GCM,AES-ICM,AES-XTS>
acpi0: <HPQOEM SLIC-MPC>
acpi0: Power Button (fixed)
cpu0: <ACPI CPU> on acpi0
hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 950
Event timer "HPET" frequency 14318180 Hz quality 550
Event timer "HPET1" frequency 14318180 Hz quality 440
Event timer "HPET2" frequency 14318180 Hz quality 440
Event timer "HPET3" frequency 14318180 Hz quality 440
Event timer "HPET4" frequency 14318180 Hz quality 440
atrtc0: <AT realtime clock> port 0x70-0x77 irq 8 on acpi0
atrtc0: Warning: Couldn't map I/O.
atrtc0: registered as a time-of-day clock, resolution 1.000000s
Event timer "RTC" frequency 32768 Hz quality 0
attimer0: <AT timer> port 0x40-0x43,0x50-0x53 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1808-0x180b on acpi0
acpi_ec0: <Embedded Controller: GPE 0x6> port 0x62,0x66 on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> port 0x3000-0x303f mem 0xd0000000-0xd03fffff,0xc0000000-0xcfffffff at device 2.0 on pci0
vgapci0: Boot video device
hdac0: <Intel Haswell HDA Controller> mem 0xd0730000-0xd0733fff at device 3.0 on pci0
xhci0: <Intel Panther Point USB 3.0 controller> mem 0xd0720000-0xd072ffff at device 20.0 on pci0
xhci0: 32 bytes context size, 64-bit DMA
xhci0: xECP capabilities <PROTO,PROTO,VEND(c1),VEND(c0),LEGACY,DEBUG>
usbus0: waiting for BIOS to give up control
usbus0: timed out waiting for BIOS
xhci0: Port routing mask set to 0xffffffff
usbus0 on xhci0
usbus0: 5.0Gbps Super Speed USB v3.0
pci0: <simple comms> at device 22.0 (no driver attached)
uart2: <Intel Lynx Point-LP HECI KT> port 0x30b0-0x30b7 mem 0xd073f000-0xd073ffff at device 22.3 on pci0
uart2: Using 1 MSI message
em0: <Intel(R) I218-LM LPTLP> port 0x3080-0x309f mem 0xd0700000-0xd071ffff,0xd073e000-0xd073efff at device 25.0 on pci0
em0: EEPROM V0.3-4
em0: Using 1024 TX descriptors and 1024 RX descriptors
em0: Using an MSI interrupt
em0: Ethernet address: 30:8d:99:15:01:20
em0: netmap queues/slots: TX 1/1024, RX 1/1024
hdac1: <Intel Lynx Point-LP HDA Controller> mem 0xd0734000-0xd0737fff at device 27.0 on pci0
pcib1: <ACPI PCI-PCI bridge> at device 28.0 on pci0
pci1: <ACPI PCI bus> on pcib1
pcib2: <ACPI PCI-PCI bridge> at device 28.3 on pci0
pci2: <ACPI PCI bus> on pcib2
pci2: <network> at device 0.0 (no driver attached)
pcib3: <ACPI PCI-PCI bridge> at device 28.5 on pci0
pci3: <ACPI PCI bus> on pcib3
pci3: <unknown> at device 0.0 (no driver attached)
ehci0: <Intel Lynx Point-LP USB 2.0 controller> mem 0xd073d000-0xd073d3ff at device 29.0 on pci0
usbus1: EHCI version 1.0
usbus1 on ehci0
usbus1: 480Mbps High Speed USB v2.0
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
ahci0: <Intel Lynx Point-LP AHCI SATA controller> port 0x30a8-0x30af,0x30bc-0x30bf,0x30a0-0x30a7,0x30b8-0x30bb,0x3060-0x307f mem 0xd073c000-0xd073c7ff at device 31.2 on pci0
ahci0: AHCI v1.30 with 2 6Gbps ports, Port Multiplier not supported
ahcich0: <AHCI channel> at channel 0 on ahci0
battery0: <ACPI Control Method Battery> on acpi0
acpi_acad0: <AC Adapter> on acpi0
acpi_button0: <Sleep Button> on acpi0
acpi_lid0: <Control Method Lid Switch> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
acpi_tz1: <Thermal Zone> on acpi0
acpi_tz2: <Thermal Zone> on acpi0
acpi_tz3: <Thermal Zone> on acpi0
acpi_tz4: <Thermal Zone> on acpi0
acpi_tz5: <Thermal Zone> on acpi0
acpi_tz6: <Thermal Zone> on acpi0
acpi_tz7: <Thermal Zone> on acpi0
acpi_syscontainer0: <System Container> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
WARNING: Device "psm" is Giant locked and may be deleted before FreeBSD 16.0.
psm0: model Synaptics Touchpad, device ID 0
est0: <Enhanced SpeedStep Frequency Control> on cpu0
cpufreq0: <CPU frequency control> on cpu0
cpufreq1: <CPU frequency control> on cpu1
cpufreq2: <CPU frequency control> on cpu2
cpufreq3: <CPU frequency control> on cpu3
Timecounter "TSC-low" frequency 1346881967 Hz quality 1000
Timecounters tick every 1.000 msec
ugen1.1: <Intel EHCI root HUB> at usbus1
ugen0.1: <Intel XHCI root HUB> at usbus0
uhub0 on usbus1
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
uhub1 on usbus0
uhub1: <Intel XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)
hdacc0: <Intel Haswell HDA CODEC> at cad 0 on hdac0
hdaa0: <Intel Haswell Audio Function Group> at nid 1 on hdacc0
pcm0: <Intel Haswell (HDMI/DP 8ch)> at nid 3 on hdaa0
hdacc1: <IDT 92HD91BXX HDA CODEC> at cad 0 on hdac1
hdaa1: <IDT 92HD91BXX Audio Function Group> at nid 1 on hdacc1
pcm1: <IDT 92HD91BXX (Analog 2.0+HP/2.0)> at nid 13,11 and 12,15 on hdaa1
pcm2: <IDT 92HD91BXX (Analog)> at nid 10 and 17 on hdaa1
Trying to mount root from zfs:zroot/ROOT/default []...
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <TOSHIBA Q300. SAFM12.3> ACS-2 ATA SATA 3.x device
ada0: Serial Number 36PB3465K1PU
ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 457862MB (937703088 512 byte sectors)
uhub1: 13 ports with 13 removable, self powered
ugen0.2: <SMSC USB2134B> at usbus0
uhub2 on uhub1
uhub2: <SMSC USB2134B, class 9/0, rev 2.10/50.00, addr 1> on usbus0
uhub2: MTT enabled
Root mount waiting for: usbus0 usbus1
uhub0: 3 ports with 3 removable, self powered
uhub2: 3 ports with 2 removable, self powered
ugen1.2: <vendor 0x8087 product 0x8000> at usbus1
uhub3 on uhub0
uhub3: <vendor 0x8087 product 0x8000, class 9/0, rev 2.00/0.04, addr 2> on usbus1
ugen0.3: <SMSC USB5534B> at usbus0
uhub4 on uhub1
uhub4: <SMSC USB5534B, class 9/0, rev 3.00/50.00, addr 2> on usbus0
Root mount waiting for: usbus0 usbus1
uhub3: 8 ports with 8 removable, self powered
uhub4: 3 ports with 2 removable, self powered
ichsmb0: <Intel Lynx Point-LP SMBus controller> port 0xef80-0xef9f mem 0xd0738000-0xd07380ff at device 31.3 on pci0
smbus0: <System Management Bus> on ichsmb0
iwm0: <Intel(R) Dual Band Wireless AC 7260> mem 0xd0500000-0xd0501fff at device 0.0 on pci2
iwm7260fw: could not load firmware image, error 8
iwm0: hw rev 0x140, fw ver 17.352738.0, address ac:fd:ce:75:8f:fa
rtsx0: <2.1g Realtek RTS5227 PCIe SD Card Reader> mem 0xd0400000-0xd0400fff at device 0.0 on pci3
rtsx0: A card is detected
mmc0: <MMC/SD bus> on rtsx0
rtsx0: Controller timeout for CMD8
rtsx0: Controller timeout for CMD8
rtsx0: Controller timeout for CMD8
rtsx0: Controller timeout for CMD8
rtsx0: Controller timeout for CMD55
rtsx0: Controller timeout for CMD55
rtsx0: Controller timeout for CMD55
rtsx0: Controller timeout for CMD55
rtsx0: Controller timeout for CMD1
rtsx0: Controller timeout for CMD1
rtsx0: Controller timeout for CMD1
rtsx0: Controller timeout for CMD1
mmc0: No compatible cards found on bus
acpi_wmi0: <ACPI-WMI mapping> on acpi0
acpi_wmi0: Embedded MOF found
wlan0: Ethernet address: ac:fd:ce:75:8f:fa
em0: link state changed to UP
lo0: link state changed to UP
em0: link state changed to DOWN
em0: link state changed to UP

Dewayne Geraghty

unread,
Jun 6, 2026, 7:31:37 PMJun 6
to ques...@freebsd.org
Hi Jan,
I use these in my make.conf for an older xeon,
ARCH= amd64
ARCHLEVEL= x86-64-v3
CPUTYPE?= haswell
TARGET= amd64
TARGET_ARCH= amd64
TARGET_CPUTYPE= ${CPUTYPE}

and for Oracle VirtualBox on a Windows10 i7 platform, I use
ARCH= amd64
ARCHLEVEL= x86-64-v2
CPUTYPE?= nehalem
TARGET= amd64
TARGET_ARCH= amd64
TARGET_CPUTYPE= ${CPUTYPE}

I'm explicit with ARCH because I also cross build.

Hope that this provides a clue. :)

PS I haven't had time to see if the virtualBox can run the haswell or
better.

Jin Guojun[VFF]

unread,
Jun 8, 2026, 1:15:44 AMJun 8
to ques...@freebsd.org
The Intel Core i7-4600U (4th Gen) official architectural code name is
Haswell, which should be the CPUTYPE.

Core Ultra (Series 1 & 2): Meteor Lake and Arrow Lake

14th/13th Gen: Raptor Lake
12th Gen: Alder Lake
11th Gen: Rocket Lake
10th Gen: Comet Lake / Ice Lake
9th/8th Gen: Coffee Lake
7th Gen: Kaby Lake
6th Gen: Skylake
Older (1st-5th Gen): Broadwell, Haswell, Ivy Bridge, Sandy Bridge,
Westmere, and Nehalem.

-Jin



Jan Stary

unread,
Jun 9, 2026, 5:50:25 AMJun 9
to ques...@freebsd.org
On Jun 07 09:29:50, dew...@heuristicsystems.com.au wrote:
> I use these in my make.conf for an older xeon,
> ARCH= amd64
> ARCHLEVEL= x86-64-v3
> CPUTYPE?= haswell
> TARGET= amd64
> TARGET_ARCH= amd64
> TARGET_CPUTYPE= ${CPUTYPE}
> I'm explicit with ARCH because I also cross build.

I don't see any of these in either the example make.conf
or the make.conf(5) manpage - but I don't cross compile,
so that reduces it to: how did you come up with "haswell"
being the right choice for your older Xeon? Is that
documented somewhere?

Looking at /usr/share/bsd.cpu.mk, I see that my naive choice
of "core" (as in Intel Core) is an alias for "prescott",
which on amd64 is an alias for "nocona" (listed in the
example make.conf).

Reading the buildkernel log, it seems that setting
CPUTYPE ?= core traslates to -march=nocona in CFLAGS.
I suppose this leaves it to the compiler to utilize
the appropriate optimizations.

I took a random line from the kernel build
(the compilation of scsi_pass.o) and went through
all the options, without any CPUTYPE and with
CPUTYPE ?= core; indeed, the only difference
is -march=nocona being added to the cc calls.

The only mention on nocona in /usr/share/mk (besides
the aliases above) is MACHINE_CPU = sse3; is that expected?
Should I be seeing sse3 in the cc lines of buildkernel
or is MACHINE_CPU only used internaly somehow?


Anyway, back to my original question:
when you set CPUTYPE ?= haswell for your Xeon (why?),
what do you set as "cpu" in your KERCONF and why?
And how are the two related?


Also note that make.conf talks about GCC settings,
referring to gcc.gnu.org for details; does that mean
that it is supposed to be the same for clang,
which is now the compiler (on amd64 at least)?


Jan



Jan Stary

unread,
Jun 9, 2026, 6:18:32 AMJun 9
to freebsd-...@freebsd.org
On Jun 07 22:15:41, jgu...@gmail.com wrote:
> The Intel Core i7-4600U (4th Gen) official architectural code name is
> Haswell, which should be the CPUTYPE.

Thanks. Reading at the lists of Intel code names
sorted out CPUTYPE for me on a few amd64 machines.

Now, what is the relation of CPUTYPE in make.conf
to the "cpu" setting in KERNCONF?

Jan


Dag-Erling Smørgrav

unread,
Jun 9, 2026, 6:51:46 AMJun 9
to Jan Stary, ques...@freebsd.org
Jan Stary <ha...@stare.cz> writes:
> I don't see any of these in either the example make.conf
> or the make.conf(5) manpage [...]

That's the wrong manual page. You should read build(7), arch(7), and
src.conf(5) instead. I'll look into removing the kernel and world
sections from make.conf(5).

DES
--
Dag-Erling Smørgrav - d...@FreeBSD.org

Edward Sanford Sutton, III

unread,
Jun 9, 2026, 6:56:56 PM (14 days ago) Jun 9
to ques...@freebsd.org
On 6/9/26 03:51, Dag-Erling Smørgrav wrote:
> Jan Stary <ha...@stare.cz> writes:
>> I don't see any of these in either the example make.conf
>> or the make.conf(5) manpage [...]
>
> That's the wrong manual page. You should read build(7), arch(7), and
> src.conf(5) instead. I'll look into removing the kernel and world
> sections from make.conf(5).

A section briefly explaining to use the other files or see the other
documents to adjust the build properties for only base/kernel and not
impact ports and other external builds would be good. When to use vs not
use seems to cause confusion among those learning.
> DES


Shane Ambler

unread,
Jun 10, 2026, 11:39:47 PM (13 days ago) Jun 10
to Jan Stary, freebsd-...@freebsd.org
On 9/6/26 19:48, Jan Stary wrote:
> On Jun 07 22:15:41, jgu...@gmail.com wrote:
>> The Intel Core i7-4600U (4th Gen) official architectural code name is
>> Haswell, which should be the CPUTYPE.
>
> Thanks. Reading at the lists of Intel code names
> sorted out CPUTYPE for me on a few amd64 machines.

I think the important point is that CPUTYPE is sent to the compiler, so
it has to be a value accepted by the compiler and be same as or earlier
than the host cpu.

Use `clang --print-supported-cpus` to get a list of supported values,
then the trick is linking that list to user visible model numbers.

You can use llc to get the cpu type of the host machine

% llc --version
...
Host CPU: sandybridge
...

You need to buildworld with WITH_CLANG_EXTRAS=yes to get llc in base, so
install the llvm pkg and add the version - eg. llc21


--
FreeBSD - the place to B...Software Developing

Shane Ambler

Reply all
Reply to author
Forward
0 new messages