Solved Verify GPU setup

I decided to give FreeBSD a chance as not only my OS of choice for servers but also as a daily-driver desktop. So far I managed to get most things running without too much pain on an Lenovo Thinkpad X1 Carbon 3rd generation.

One thing I'm unsure about is the GPU. The laptop uses an i7-5500U which features an integrated HD 5500 GPU. There's no dedicated/other GPU in this machine.
Unlike most things with FreeBSD, I had troubles figuring out exactly what is needed to get the GPU running based on the documentation. What I did so far is installing the drm-kmod and adding kld_list="/boot/modules/i915kms.ko" to /etc/rc.conf.

Is this everything there is to it? How can I verify that the GPU drivers are loaded correctly and that the GPU is actually being used (by corresponding applications capable of doing so)? Is there a top for GPUs? Maybe specifically for Intel GPUs?
I feel like even basic imagemagick7 operations take way too long compared to other system's I'm working with - but that's just based on feeling and I'd like to know how to properly ensure that the GPU is being utilized.
How can I verify that the GPU drivers are loaded correctly and that the GPU is actually being used (by corresponding applications capable of doing so)?

glxgears -info from graphics/mesa-demos.

I feel like even basic imagemagick7 operations take way too long compared to other system's I'm working with - but that's just based on feeling and I'd like to know how to properly ensure that the GPU is being utilized.

ImageMagick runs entirely on the CPU. Or, at least, FreeBSD port does.


  • Use the kldstat command to verify that the i915kms module is really loaded.
  • Look at the boot messages stored in /var/run/dmesg.boot. Do they mention any error messages related to the GPU or the driver?
  • Take a closer look at the X server’s log file in /var/log/Xorg.0.log. It should tell you which driver it is using, if it is the intel driver, or if it fell back to the generic VESA driver (which would explain why it appears to be slow).
  • There are several packages that can be used to display information about the X server:
    • x11/xdpyinfo displays generic information about the X server, like resolution, supported color depths, server extensions etc.
    • x11/xdriinfo displays information about DRI (direct rendering interface) which is a driver interface for accelerated graphics rendering.
    • x11/xvinfo displays information about the X-Video extension that is used for hardware-accelerated video playback.
    • There is also the glxinfo command that is installed with the graphics/mesa-demos. It prints information about the GLX extension that is used for acclerated 3D graphics.
  • The above tools typical display several pages of information if supported, otherwise just one line with an error message is printed. In particular, the glxinfo is useful to find out if the graphics driver was loaded correctly and 3D hardware acceleration is available.
Thank you all for the information provided.

I think I managed to confirm the correct loading of the driver by examining the output of both kldstat and /var/run/dmesg.boot. However, glxgears -info reports Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2) as GL_RENDERER. To me this indicates that it is using the GPU but using the mesa driver instead of the Intel i915 one.

Here's the output of kldstat:
Id Refs Address                Size Name
1   65 0xffffffff80200000  2448f20 kernel
2    1 0xffffffff82649000     2ca0 coretemp.ko
3    1 0xffffffff8264c000   3a99a8 zfs.ko
4    2 0xffffffff829f6000     a5b8 opensolaris.ko
5    1 0xffffffff82a01000    2bc70 if_iwm.ko
6    1 0xffffffff82a2d000     80d0 acpi_ibm.ko
7    1 0xffffffff82a36000    fc050 iwm7265Dfw.ko
8    1 0xffffffff83a21000   12ccb0 i915kms.ko
9    1 0xffffffff83b4e000    76570 drm.ko
10    4 0xffffffff83bc5000    10eb0 linuxkpi.ko
11    3 0xffffffff83bd6000    12f30 linuxkpi_gplv2.ko
12    2 0xffffffff83be9000      6d0 debugfs.ko
13    1 0xffffffff83bea000     4260 ng_ubt.ko
14    6 0xffffffff83bef000     9e30 netgraph.ko
15    2 0xffffffff83bf9000     91b8 ng_hci.ko
16    3 0xffffffff83c03000      9c0 ng_bluetooth.ko
17    1 0xffffffff83c04000     cad0 ng_l2cap.ko
18    1 0xffffffff83c11000    1ba00 ng_btsocket.ko
19    1 0xffffffff83c2d000     21c0 ng_socket.ko
20    1 0xffffffff83c30000      acf mac_ntpd.ko
21    1 0xffffffff83c31000     88d8 tmpfs.ko
and the contents of /var/run/dmesg.boot:
Copyright (c) 1992-2019 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 12.1-RELEASE-p8 GENERIC amd64
FreeBSD clang version 8.0.1 (tags/RELEASE_801/final 366581) (based on LLVM 8.0.1)
VT(efifb): resolution 2560x1440
CPU: Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz (2394.52-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x306d4  Family=0x6  Model=0x3d  Stepping=4
  AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
  AMD Features2=0x121<LAHF,ABM,Prefetch>
  Structured Extended Features3=0x9c000600<MD_CLEAR,IBPB,STIBP,L1DFL,SSBD>
  XSAVE Features=0x1<XSAVEOPT>
  TSC: P-state invariant, performance statistics
real memory  = 8589934592 (8192 MB)
avail memory = 8138862592 (7761 MB)
Event timer "LAPIC" quality 600
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s) x 2 hardware threads
random: unblocking device.
ioapic0 <Version 2.0> irqs 0-39 on motherboard
Launching APs: 1 3 2
Timecounter "TSC-low" frequency 1197258236 Hz quality 1000
random: entropy device external interface
kbd1 at kbdmux0
000.000023 [4335] netmap_init               netmap: loaded module
[ath_hal] loaded
module_register_init: MOD_LOAD (vesa, 0xffffffff8112e0f0, 0) error 19
random: registering fast source Intel Secure Key RNG
random: fast provider: "Intel Secure Key RNG"
efirtc0: <EFI Realtime Clock> on motherboard
efirtc0: registered as a time-of-day clock, resolution 1.000000s
cryptosoft0: <software crypto> on motherboard
acpi0: <LENOVO TP-N14> on motherboard
acpi_ec0: <Embedded Controller: GPE 0x24, ECDT> port 0x62,0x66 on acpi0
acpi0: Power Button (fixed)
cpu0: <ACPI CPU> on acpi0
attimer0: <AT timer> port 0x40-0x43 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
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-0x71 irq 8 on acpi0
atrtc0: registered as a time-of-day clock, resolution 1.000000s
Event timer "RTC" frequency 32768 Hz quality 0
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1808-0x180b on acpi0
acpi_lid0: <Control Method Lid Switch> on acpi0
acpi_button0: <Sleep Button> 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 0xe0000000-0xe0ffffff,0xc0000000-0xdfffffff at device 2.0 on pci0
vgapci0: Boot video device
hdac0: <Intel Broadwell HDA Controller> mem 0xe1230000-0xe1233fff at device 3.0 on pci0
xhci0: <Broadwell Integrated PCH-LP chipset USB 3.0 controller> mem 0xe1220000-0xe122ffff at device 20.0 on pci0
xhci0: 32 bytes context size, 64-bit DMA
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)
em0: <Intel(R) PRO/1000 Network Connection> port 0x3060-0x307f mem 0xe1200000-0xe121ffff,0xe123d000-0xe123dfff at device 25.0 on pci0
em0: Using 1024 TX descriptors and 1024 RX descriptors
em0: Using an MSI interrupt
em0: Ethernet address: 54:ee:75:6b:cc:d0
em0: netmap queues/slots: TX 1/1024, RX 1/1024
hdac1: <Intel Broadwell HDA Controller> mem 0xe1234000-0xe1237fff at device 27.0 on pci0
pcib1: <ACPI PCI-PCI bridge> at device 28.0 on pci0
pcib2: <ACPI PCI-PCI bridge> at device 28.1 on pci0
pci1: <ACPI PCI bus> on pcib2
iwm0: <Intel(R) Dual Band Wireless AC 7265> mem 0xe1100000-0xe1101fff at device 0.0 on pci1
pcib3: <ACPI PCI-PCI bridge> at device 28.5 on pci0
pci2: <ACPI PCI bus> on pcib3
ahci0: <AHCI SATA controller> mem 0xe1000000-0xe1001fff at device 0.0 on pci2
ahci0: AHCI v1.30 with 1 6Gbps ports, Port Multiplier not supported
ahcich0: <AHCI channel> at channel 0 on ahci0
ehci0: <EHCI (generic) USB 2.0 controller> mem 0xe123c000-0xe123c3ff 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
acpi_tz0: <Thermal Zone> 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: model Synaptics Touchpad, device ID 0
battery0: <ACPI Control Method Battery> on acpi0
acpi_acad0: <AC Adapter> on acpi0
acpi_ibm0: <IBM ThinkPad ACPI Extras> on acpi0
acpi_ibm0: Firmware version is 0x100
coretemp0: <CPU On-Die Thermal Sensors> on cpu0
est0: <Enhanced SpeedStep Frequency Control> on cpu0
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)
Timecounters tick every 1.000 msec
hdacc0: <Intel Broadwell HDA CODEC> at cad 0 on hdac0
hdaa0: <Intel Broadwell Audio Function Group> at nid 1 on hdacc0
pcm0: <Intel Broadwell (HDMI/DP 8ch)> at nid 3 on hdaa0
hdacc1: <Realtek ALC292 HDA CODEC> at cad 0 on hdac1
hdaa1: <Realtek ALC292 Audio Function Group> at nid 1 on hdacc1
pcm1: <Realtek ALC292 (Analog 2.0+HP/2.0)> at nid 20,21 and 26 on hdaa1
pcm2: <Realtek ALC292 (Internal Analog Mic)> at nid 18 on hdaa1
ugen0.1: <0x8086 XHCI root HUB> at usbus0
ugen1.1: <Intel EHCI root HUB> at usbus1
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <SAMSUNG MZHPV512HDGL-000L1 BXW25L0Q> ACS-2 ATA SATA 3.x device
ada0: Serial Number S1WUNYAG701064
ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 488386MB (1000215216 512 byte sectors)
uhub0: <0x8086 XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
uhub1: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
iwm0: hw rev 0x210, fw ver 22.361476.0, address 4c:34:88:3f:47:fb
Trying to mount root from zfs:zroot/ROOT/default []...
Root mount waiting for: usbus1 usbus0
uhub0: 15 ports with 15 removable, self powered
Root mount waiting for: usbus1 usbus0
uhub1: 3 ports with 3 removable, self powered
ugen0.2: <vendor 0x138a product 0x0017> at usbus0
Root mount waiting for: usbus1 usbus0
ugen0.3: <vendor 0x8087 product 0x0a2a> at usbus0
ugen1.2: <vendor 0x8087 product 0x8001> at usbus1
uhub2 on uhub1
uhub2: <vendor 0x8087 product 0x8001, class 9/0, rev 2.00/0.03, addr 2> on usbus1
uhub2: 8 ports with 8 removable, self powered
ugen0.4: <Chicony Electronics Co.,Ltd. Integrated Camera> at usbus0
drmn0: <drmn> on vgapci0
vgapci0: child drmn0 requested pci_enable_io
vgapci0: child drmn0 requested pci_enable_io
[drm] Unable to create a private tmpfs mount, hugepage support will be disabled(-19).
Successfully added WC MTRR for [0xc0000000-0xdfffffff]: 0;
[drm] Got stolen memory base 0xae000000, size 0x2000000
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[drm] Driver supports precise vblank timestamp query.
[drm] Connector eDP-1: get mode from tunables:
[drm]   - kern.vt.fb.modes.eDP-1
[drm]   - kern.vt.fb.default_mode
[drm] Connector DP-1: get mode from tunables:
[drm]   - kern.vt.fb.modes.DP-1
[drm]   - kern.vt.fb.default_mode
[drm] Connector HDMI-A-1: get mode from tunables:
[drm]   - kern.vt.fb.modes.HDMI-A-1
[drm]   - kern.vt.fb.default_mode
[drm] Connector DP-2: get mode from tunables:
[drm]   - kern.vt.fb.modes.DP-2
[drm]   - kern.vt.fb.default_mode
[drm] Connector HDMI-A-2: get mode from tunables:
[drm]   - kern.vt.fb.modes.HDMI-A-2
[drm]   - kern.vt.fb.default_mode
[drm] Initialized i915 1.6.0 20171222 for drmn0 on minor 0
VT: Replacing driver "efifb" with new "fb".
start FB_INFO:
type=11 height=1440 width=2560 depth=32
cmsize=16 size=14745600
pbase=0xc0005000 vbase=0xfffff800c0005000
name=drmn0 flags=0x0 stride=10240 bpp=32
cmap[0]=0 cmap[1]=7f0000 cmap[2]=7f00 cmap[3]=c4a000
drmn0: fb0: inteldrmfb frame buffer device
wlan0: Ethernet address: 4c:34:88:3f:47:fb
lo0: link state changed to UP
[drm] Reducing the compressed framebuffer size. This may lead to less power savings than a non-reduced-size. Try to increase stolen memory size if available in BIOS.
iwm0: iwm_auth: failed to set multicast
iwm0: iwm_newstate: could not move to auth state: 35
wlan0: link state changed to UP
ubt0 on uhub0
ubt0: <vendor 0x8087 product 0x0a2a, class 224/1, rev 2.01/0.01, addr 2> on usbus0
WARNING: attempt to domain_add(bluetooth) after domainfinalize()
WARNING: attempt to domain_add(netgraph) after domainfinalize()
Can you also post:


I believe the Mesa driver is the correct one. What you don't want to see is the LLVMpipe software fallback anywhere.

What OpenGL support does it provide? 3.x, 4.5, etc? If your Thinkpad is the same as mine it should be 4.x. Sometimes that is a good way to tell if the driver has loaded correctly.
Yep, looks like the driver is working fine.

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2)

If it was using the software fallback, these would be VMware and LLVMpipe respectively.

You should be able to see that by running the following command:


This forces the software renderer (temporarily) whilst running glxinfo.