Skip to content

Low‐End gaming on surface pro go lineup

ECO1AI edited this page Apr 22, 2024 · 4 revisions

important:

this section is not only for surface pro/go , but for any low end device where the aim is longer battery life. this section will help getting longer play time while keeping device temperature low.

it is important to note than this will not magically make your device faster. it will reduce game impact on device performance, but this comes at cost or scarifies.

software needed:

performance tweaks:

FPS reduction:

using GOverlay go to performance tab, then change VSYNC options:

for Vulkan set to on

for OpenGL set to -N-

then in frame limiter section:

change FPS limit to custom, then write the desired FPS.

for the FPS aim for value between 20 and 30 FPS, 30 being more responsive and smooth and 20 being battery saving (but guttry) with 24 being recommended. less than 20 is not recommended.

as shown in the image: image

GameMode tune:

copy the following code to ~/.config/gamemode.ini:

[general]
; The reaper thread will check every 5 seconds for exited clients, for config file changes, and for the CPU/iGPU power balance
reaper_freq=10

; The desired governor is used when entering GameMode instead of "performance"
desiredgov=powersave
; The default governor is used when leaving GameMode instead of restoring the original value
;defaultgov=powersave

; The iGPU desired governor is used when the integrated GPU is under heavy load
igpu_desiredgov=powersave
; Threshold to use to decide when the integrated GPU is under heavy load.
; This is a ratio of iGPU Watts / CPU Watts which is used to determine when the
; integraged GPU is under heavy enough load to justify switching to
; igpu_desiredgov.  Set this to -1 to disable all iGPU checking and always
; use desiredgov for games.
igpu_power_threshold=-1

; GameMode can change the scheduler policy to SCHED_ISO on kernels which support it (currently
; not supported by upstream kernels). Can be set to "auto", "on" or "off". "auto" will enable
; with 4 or more CPU cores. "on" will always enable. Defaults to "off".
softrealtime=off

; GameMode can renice game processes. You can put any value between 0 and 20 here, the value
; will be negated and applied as a nice value (0 means no change). Defaults to 0.
renice=0

; By default, GameMode adjusts the iopriority of clients to BE/0, you can put any value
; between 0 and 7 here (with 0 being highest priority), or one of the special values
; "off" (to disable) or "reset" (to restore Linux default behavior based on CPU priority),
; currently, only the best-effort class is supported thus you cannot set it here
ioprio=reset

; Sets whether gamemode will inhibit the screensaver when active
; Defaults to 1
inhibit_screensaver=1

[filter]
; If "whitelist" entry has a value(s)
; gamemode will reject anything not in the whitelist
;whitelist=RiseOfTheTombRaider

; Gamemode will always reject anything in the blacklist
;blacklist=HalfLife3
;    glxgears

[gpu]
; Here Be Dragons!
; Warning: Use these settings at your own risk
; Any damage to hardware incurred due to this feature is your responsibility and yours alone
; It is also highly recommended you try these settings out first manually to find the sweet spots

; Setting this to the keyphrase "accept-responsibility" will allow gamemode to apply GPU optimisations such as overclocks
;apply_gpu_optimisations=0

; The DRM device number on the system (usually 0), ie. the number in /sys/class/drm/card0/
;gpu_device=0

; Nvidia specific settings
; Requires the coolbits extension activated in nvidia-xconfig
; This corresponds to the desired GPUPowerMizerMode
; "Adaptive"=0 "Prefer Maximum Performance"=1 and "Auto"=2
; See NV_CTRL_GPU_POWER_MIZER_MODE and friends in https://github.com/NVIDIA/nvidia-settings/blob/master/src/libXNVCtrl/NVCtrl.h
;nv_powermizer_mode=1

; These will modify the core and mem clocks of the highest perf state in the Nvidia PowerMizer
; They are measured as Mhz offsets from the baseline, 0 will reset values to default, -1 or unset will not modify values
;nv_core_clock_mhz_offset=0
;nv_mem_clock_mhz_offset=0

; AMD specific settings
; Requires a relatively up to date AMDGPU kernel module
; See: https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html#gpu-power-thermal-controls-and-monitoring
; It is also highly recommended you use lm-sensors (or other available tools) to verify card temperatures
; This corresponds to power_dpm_force_performance_level, "manual" is not supported for now
;amd_performance_level=high

[supervisor]
; This section controls the new gamemode functions gamemode_request_start_for and gamemode_request_end_for
; The whilelist and blacklist control which supervisor programs are allowed to make the above requests
;supervisor_whitelist=
;supervisor_blacklist=

; In case you want to allow a supervisor to take full control of gamemode, this option can be set
; This will only allow gamemode clients to be registered by using the above functions by a supervisor client
;require_supervisor=0

[custom]
; Custom scripts (executed using the shell) when gamemode starts and ends
;start=notify-send "GameMode started"
;    /home/me/bin/stop_ethmining.sh
start=sleep 10 && powerprofilesctl set power-saver
end=powerprofilesctl set balanced

;end=notify-send "GameMode ended"
;    /home/me/bin/start_ethmining.sh

; Timeout for scripts (seconds). Scripts will be killed if they do not complete within this time.
script_timeout=15

this config is optimized by disabling features and reduce pulling rate, in addition to power configuration control.

note: if you use KDE or Gnome then you are good to go. if you dont, then check that your desktop environment support powerprofileselect, if not:

if the DE has its own power manager or doesn,t use any power management app then you need to change the last few lines,nameingly: sleep 10 && powerprofilesctl set power-saver and powerprofilesctl set balanced. delete them or edit them accordingly.

more information about powerdevel and others power managers can be found here:

stylus button remapping:

it is possible to remap stylus button to right click as example thanks to input_remapper . for an up-to-date installation and how-to-use follow instructions in input_remapper github repo.

if you want to map only for games, then create an empty preset empty and the needed preset main as example. in steam under games launch options add input-remapper-control --command start /home/yassen/.config/input-remapper-2/presets/IPTS/main.json to auto load empty preset with gamemode add input-remapper-control --command start /home/yassen/.config/input-remapper-2/presets/IPTS/empty.json to end section in config file to be end= powerprofilesctl set balanced && input-remapper-control --command start /home/yassen/.config/input-remapper-2/presets/IPTS/empty.json

tips and tricks:

  • if the UI is laggy try debugging via typing input-remapper-gtk -d in terminal.
  • to map touch or stylus select IPTS device NOT IPTS xxxx:xxxx touchscreen.
  • when recording, an axis move might be recorded,after recording select the record and open the advanced tab to remove axis move.
  • if you want to repeat a mapping or got stylus movement issue, disable release input in advance tab.

Data monitoring:

for data monitoring, you can use mangoHUD. and you can configure it using GOerlay.

it is useful to monitor battery discharge, estimated remaining time, battery remaining power and more. vesit their page to learn more.

until now,INTEL integrated GPU information are not supported. you can use intel-gpu-topby command in terminal sudo intel_gpu_top

troubleshooting:

audio cracking:

this is due to low CPU clock and relatively high load, to solve this we increase latency using PULSE_LATENCY_MSEC=75 where 75 is latency amount (can be increased).

Clone this wiki locally