Skip to content

SP7: Surface Pro 7 does not thermal throttle correctly #221

@QuadPiece

Description

@QuadPiece

My Surface Pro 7 has erratic thermal throttling behavior under Linux. The CPU will run fine at roughly 2.4GHz for a while when pushed. But will drop to a mere 200MHz. After it cools down a bit it will run at 2+ GHz again. This loop continues indefinitely until you let the machine properly cool down.

This is not much of an issue during regular use as the "initial heat up" requires a few minutes of continued max load. But if one attempts to do anything which pushes the CPU/iGPU for an extended period of time, it can make the SP7 nigh unusable. For example if you try to enjoy most modern 3D video games, or if you are encoding video files in the background.

The SP7 (Especially i5 model) seems to rely very heavily on software-controlled thermal throttling to sustain a usable state under load.

Under Windows

This appears to be a hardware "emergency throttle" when the CPU gets too hot. As the same behavior can be found in Windows, but not in the factory install, only on a fresh copy of the OS. With a fresh Windows 10 2004 install, the machine will start cycling between 2+ GHz and 200MHz after heating up just like Linux does.

However, once you install the Surface Pro driver pack (found here) the throttling behavior changes. Rather than switching between high performance and 200MHz, once the machine heats up it will gradually throttle down. After having Windows push the system for a while it tends to settle in at a sustained frequency between 700MHz and 900MHz, depending on ambient temperature.

Environment

  • Hardware model: Surface Pro 7 (i5, 8GB, 128GB)
  • Kernel version: Linux suika 5.7.5-surface #1 SMP Wed Jun 24 15:46:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • Distribution: Ubuntu 20.04

I suspect this is an issue that mostly affects the i5 model of the SP7, as:

  • The i3 model features a weaker dual-core plus regular UHD graphics, and likely generates less heat
  • The i7 model features a fan to help dissipate heat. Unlike the i3 and i5 models, which are fanless

If i3 or i7 users could confirm whether their devices exhibit this issue, that would be excellent.

`dmesg` output

The following is a snippet of dmesg taken after leaving Dragon Quest XI running for a while.
I do not know if the "unhandled power event" messages are related, or caused by something else.

[34524.668360] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34526.672545] surface_sam_sid_power: power event (cid = 0x53)
[34526.672545] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34540.701878] surface_sam_sid_power: power event (cid = 0x53)
[34540.701881] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34541.702336] surface_sam_sid_power: power event (cid = 0x53)
[34541.702338] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34544.707757] surface_sam_sid_power: power event (cid = 0x53)
[34544.707759] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34546.710120] surface_sam_sid_power: power event (cid = 0x53)
[34546.710122] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34547.711106] surface_sam_sid_power: power event (cid = 0x53)
[34547.711108] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34551.719068] surface_sam_sid_power: power event (cid = 0x53)
[34551.719071] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34554.630044] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x153a7bfde
[34565.751002] surface_sam_sid_power: power event (cid = 0x53)
[34565.751004] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34567.753952] surface_sam_sid_power: power event (cid = 0x53)
[34567.753953] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34568.164137] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148c91a77
[34568.252686] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14aa02d74
[34568.262764] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14aa02d74
[34568.526330] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x146bd7251
[34568.526461] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14861219f
[34568.535219] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14861219f
[34568.536401] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14861219f
[34568.536520] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148ddba19
[34568.546471] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14861219f
[34568.546584] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148ec4f9c
[34573.183919] split_lock_warn: 372 callbacks suppressed
[34573.183921] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148787028
[34573.216872] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x151e4b76e
[34573.266932] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x151df3683
[34573.284856] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x146019b68
[34573.286732] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14890a1a5
[34573.317054] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14890a1a5
[34573.455831] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x147a48216
[34573.523905] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14a66a2d0
[34573.619656] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14b4074e1
[34573.620165] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14c5da890
[34576.774907] surface_sam_sid_power: power event (cid = 0x53)
[34576.774908] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34579.833191] split_lock_warn: 1254 callbacks suppressed
[34579.833192] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x1514cb83e
[34579.893026] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x14f4b70f5
[34579.897390] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x15212a514
[34579.898945] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x1541b3106
[34579.899329] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x153237779
[34579.903159] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x15094b1ea
[34579.913255] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x153237779
[34579.914669] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x14a4ba467
[34580.201677] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x1541b3106
[34580.202743] x86/split lock detection: #AC: DRAGON QUEST XI/16085 took a split_lock trap at address: 0x14b71b09d
[34584.838305] split_lock_warn: 649 callbacks suppressed
[34584.838307] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x1505b7899
[34584.838334] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x14a816be5
[34584.838350] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x14a816be5
[34584.838402] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x14c32476e
[34584.838411] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x14945ebdf
[34584.838424] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x145b7520a
[34584.838489] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x14b6f92b6
[34584.838507] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x145b7520a
[34584.838517] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x145b7520a
[34584.838956] x86/split lock detection: #AC: DRAGON QUEST XI/15912 took a split_lock trap at address: 0x146be3e4d
[34600.584877] split_lock_warn: 585 callbacks suppressed
[34600.584878] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x146994e82
[34600.584902] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x147031a7f
[34600.584935] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x14b853284
[34600.584987] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x1483da1b0
[34600.587473] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x149ded1bd
[34600.591408] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x14b35034f
[34600.601449] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x146994e82
[34600.603769] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x151a9ad6c
[34600.606535] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x146994e82
[34600.607985] x86/split lock detection: #AC: DRAGON QUEST XI/15989 took a split_lock trap at address: 0x14cc02f74
[34607.842508] surface_sam_sid_power: power event (cid = 0x53)
[34607.842509] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34608.843166] surface_sam_sid_power: power event (cid = 0x53)
[34608.843167] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34612.250537] split_lock_warn: 62 callbacks suppressed
[34612.250538] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14a10c6df
[34612.252445] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x146b93d1d
[34612.252476] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14d2a5169
[34612.253516] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14d2a5169
[34612.260609] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14a10c6df
[34612.262627] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x144d5b4c2
[34612.263275] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x144d5b4c2
[34612.270765] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14a2cffa3
[34612.272723] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14eed4a65
[34612.280917] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148ddb9e8
[34612.849542] surface_sam_sid_power: power event (cid = 0x53)
[34612.849543] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34616.856376] surface_sam_sid_power: power event (cid = 0x53)
[34616.856377] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34621.990157] split_lock_warn: 25 callbacks suppressed
[34621.990159] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x151eb84a1
[34621.990412] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14f33fd95
[34621.991515] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x149d92b6b
[34621.992603] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14c89482e
[34621.993498] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14c89482e
[34621.993649] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14c89482e
[34621.993843] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14c89482e
[34621.993903] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14c89482e
[34622.001579] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x1468839a0
[34622.004536] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x14b85bd2b
[34624.871023] surface_sam_sid_power: power event (cid = 0x53)
[34624.871024] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34627.734553] split_lock_warn: 653 callbacks suppressed
[34627.734554] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x149d824a3
[34627.736964] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x149d824a3
[34627.743073] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x15090f800
[34627.744768] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x15090f800
[34627.744821] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x15090f800
[34627.749193] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x146d83628
[34627.754169] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x153b47b5d
[34627.754455] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148ff55a0
[34627.754486] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x148ff55a0
[34627.754910] x86/split lock detection: #AC: DRAGON QUEST XI/15825 took a split_lock trap at address: 0x146d83628
[34630.882706] surface_sam_sid_power: power event (cid = 0x53)
[34630.882707] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34669.958012] surface_sam_sid_power: power event (cid = 0x53)
[34669.958013] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34710.952166] surface_sam_sid_power: power event (cid = 0x53)
[34710.952167] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34763.353178] surface_sam_sid_power: power event (cid = 0x53)
[34763.353181] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34808.338239] surface_sam_sid_power: power event (cid = 0x53)
[34808.338242] surface_sam_sid_power: unhandled power event (cid = 0x53)
[34900.308094] surface_sam_sid_power: power event (cid = 0x53)
[34900.308096] surface_sam_sid_power: unhandled power event (cid = 0x53)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions