You are not logged in.

#1 2019-02-12 05:20:56

conohp
Member
Registered: 2019-02-12
Posts: 4

[SOLVED] MSI PS63 High CPU Load on Wake from Suspend

Hello, I just got a new MSI PS63 that has just released this year and decided to install a fresh Arch. Installation went smoothly, everything (touchpad, nvidia card, multimedia keys, etc.) just works out of the box. However, there is a particular and frustrating problem: after boot, the CPU when idle was normal (mostly 0% cpu load), then I closed the lid, opened again and noticed that the first CPU (CPU0) was doing something with around 40% load all the time which really throttle the battery lifetime.

Before anything else here's my system info:

uname -a

Linux resp 4.20.7-arch1-1-ARCH #1 SMP PREEMPT Wed Feb 6 18:42:40 UTC 2019 x86_64 GNU/Linux

lscpu

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       39 bits physical, 48 bits virtual
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               142
Model name:          Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
Stepping:            11
CPU MHz:             3600.012
CPU max MHz:         4600.0000
CPU min MHz:         400.0000
BogoMIPS:            3985.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            8192K
NUMA node0 CPU(s):   0-7
Flags:               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 ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp flush_l1d arch_capabilities

I inspected the problem using powertop and noticed that the process which handled IRQ suddenly generated high rate of events (around 200+ events/s) compared to before closing the lid which is around 50+ events/s.
The process is:

[PID 480] [irq/156-CUST000]

I also traced the IRQ number (156) in /proc/interrupts and found the following line:

156:    1101134          0        412          0          0          0          0          0  intel-gpio  274  CUST0001:00

CUST0001:00 is the touchpad peripheral (from xinput):

⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ CUST0001:00 06CB:CDAA Touchpad          	id=11	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Power Button                            	id=9	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=10	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=12	[slave  keyboard (3)]
    ↳ MSI WMI hotkeys                         	id=13	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Video Bus                               	id=8	[slave  keyboard (3)]

I've tried disabling the touchpad by executing:

xinput --disable 11

but the problem still persists.

I've also confirmed that the nvidia card is disabled:
cat /proc/acpi/bbswitch

0000:02:00.0 OFF

Nonetheless, stopping lightdm.service which I uses its greeter to log myself into i3wm returned me to the tty and the CPU returned to normal. It seems to be a problem with touchpad firmware or libinput. Is there a way to physically toggle the touchpad? The touchpad disabling key on the keyboard does not disable it in hardware level.

Thanks.

Edit:
Solved by blacklisting the following modules and reboot:

blacklist i801_smbus
blacklist i2c_i801
blacklist idma64
blacklist i2c
blacklist i2c_hid

Last edited by conohp (2019-02-12 10:47:26)

Offline

#2 2019-02-12 09:11:48

fdservices
Member
From: France
Registered: 2012-02-06
Posts: 413

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

In case it helps, here are my notes on disabling my touchpad:

Find devices:

$ xinput list

Find properties id:

$ xinput list-props "ImPS/2 Generic Wheel Mouse"
e.g.
Device 'ImPS/2 Generic Wheel Mouse':
        Device Enabled (127):   1
etc....

Disable Device:

$ xinput set-int-prop "ImPS/2 Logitech Wheel Mouse" 127 8 0

Andrew

Offline

#3 2019-02-12 09:52:59

conohp
Member
Registered: 2019-02-12
Posts: 4

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

fdservices wrote:

In case it helps, here are my notes on disabling my touchpad:

Find devices:

$ xinput list

Find properties id:

$ xinput list-props "ImPS/2 Generic Wheel Mouse"
e.g.
Device 'ImPS/2 Generic Wheel Mouse':
        Device Enabled (127):   1
etc....

Disable Device:

$ xinput set-int-prop "ImPS/2 Logitech Wheel Mouse" 127 8 0

Andrew

Tried that, didn't work. Maybe I need to disable the IRQ entirely by writing a kernel module sad

Offline

#4 2019-02-12 10:02:55

fdservices
Member
From: France
Registered: 2012-02-06
Posts: 413

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

Hmm - it works on all my laptops. What do you get from the command?

$  xinput list-props "CUST0001:00 06CB:CDAA Touchpad"

Andrew

Offline

#5 2019-02-12 10:41:40

conohp
Member
Registered: 2019-02-12
Posts: 4

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

fdservices wrote:

Hmm - it works on all my laptops. What do you get from the command?

$  xinput list-props "CUST0001:00 06CB:CDAA Touchpad"

Andrew

The command does disable the touchpad, but the hardware itself still spams i2c signals. After messing with kernel modules, I eventually found the solution. Blacklisting all i2c-related kernel modules except i2c_algo_bit then reboot solved the problem.
/etc/modprobe.d/i2c.conf

blacklist i801_smbus
blacklist i2c_i801
blacklist idma64
blacklist i2c
blacklist i2c_hid

Anyway, thanks for your help! big_smile

Offline

#6 2019-09-09 18:58:23

pixelou
Member
Registered: 2011-03-30
Posts: 16

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

Hi, I just bought this laptop without paying too much attention for linux support... In my case the touchpad stops working after sleep but I haven't noticed any cpu load. Is there any update on this issue?

Offline

#7 2019-09-09 19:47:55

pixelou
Member
Registered: 2011-03-30
Posts: 16

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

Ok I have found a hack around. It appears you can reset the i2c bus quite simply:

echo -n "i2c_designware.0" > /sys/bus/platform/drivers/i2c_designware/unbind 
echo -n "i2c_designware.0" > /sys/bus/platform/drivers/i2c_designware/bind

And this restarts whatever manages the touchpad.

I know this is off-topic, but do your fans spin all the time too? Even on windows they do spin relatively often with silent mode set the creator center. Also the laptop sits around 40°C when idle while my older HP is closer to 35°C ...

Offline

#8 2019-09-28 09:46:14

WFH
Member
Registered: 2019-09-28
Posts: 1

Re: [SOLVED] MSI PS63 High CPU Load on Wake from Suspend

conohp wrote:

/etc/modprobe.d/i2c.conf

blacklist i801_smbus
blacklist i2c_i801
blacklist idma64
blacklist i2c
blacklist i2c_hid

I've been using this workaround for several months now, however it is plagued (at least on my machine) with several major issues:
- The cursor is super slow and does not seem to react to acceleration profiles
- Since libinput 1.14, scrolling is hit-and-miss (80% success rate) and multitouch gestures are barely usable with libinput-gestures (50% success rate for 3 finger swipes, 4 finger gestures tend to break 3 finger gestures, swipes detected as pinches etc.)

This all made for a very frustrating experience.



pixelou wrote:
echo -n "i2c_designware.0" > /sys/bus/platform/drivers/i2c_designware/unbind 
echo -n "i2c_designware.0" > /sys/bus/platform/drivers/i2c_designware/bind

This works perfectly! My trackpad is now 100% functional without having to blacklist anything, and the reliability of the multitouch gestures is great.

I've automated it by adding a script for systemd :

/lib/systemd/system-sleep/restart_trackpad

#!/bin/sh
case "$1" in
        post)
                echo -n "i2c_designware.0" > /sys/bus/platform/drivers/i2c_designware/unbind
                echo -n "i2c_designware.0" > /sys/bus/platform/drivers/i2c_designware/bind
        ;;
esac

Now the binding will be reset each time the laptop wakes up.

The only issue now is that it breaks libinput-gestures. I haven't found a way yet to restart it automatically after wake, so i've bound the following command to a keyboard shortcut:

libinput-gestures-setup restart




Off topic:
Do you have a discrete nVidia GPU? These are known for being a thermal nightmare in such a slim case.
I chose mine without a GPU because for my usage, it's more trouble than its worth, and it's currently sitting perfectly silent @ 35°C.

Offline

Board footer

Powered by FluxBB