Encontrei a solução e a causa do meu problema - foi o aumento do RPS que estava ignorando o limite de frequência definido pelo gpu.
Em vez de definir limite via / sys / kernel / debug / dri / 1 / i915_max_freq , mudei para configuração em / sys / class / drm / card1 , parâmetros gt_max_freq_mhz e gt_boost_freq_mhz . Depois que você definir o limite em i915_max_freq , ele não limitará a frequência de boost, portanto, quando as solicitações do sistema forem aumentadas, ele aumentará para o limite especificado em gt_boost_freq_mhz , ignorando o que você definiu. >
Ao executar:
echo 800 | sudo tee /sys/class/drm/card1/gt_max_freq_mhz
echo 800 | sudo tee /sys/class/drm/card1/gt_boost_freq_mhz
Eu defino limites para valores normais e aumentados, e o sistema não pressiona mais o limite passado da GPU, o que significa que o limite de CPU não será afetado no meu caso.
sudo cat /sys/kernel/debug/dri/1/i915_rps_boost_info
RPS enabled? 1
GPU busy? yes [32 requests]
CPU waiting? 0
Frequency requested 800
min hard:650, soft:650; max soft:800, hard:1100
idle:650, efficient:650, boost:800
[...]
Etapas para aplicar esta solução:
1) Leia a tabela em / sys / kernel / debug / dri / 0 / i915_ring_freq_table (ou / sys / kernel / debug / dri / 1 / i915_ring_freq_table em alguns casos:
sudo cat /sys/kernel/debug/dri/0/i915_ring_freq_table
Encontre a frequência da CPU que está dentro do limite de CPU que você quer e procure a freqüência da GPU ligada a ela, será o limite que você precisa definir na GPU.
2) Defina o limite para a frequência da GPU gravando em gt_max_freq_mhz e gt_boost_freq_mhz localizado em / sys / class / drm / card0 (pode ser cardX dependendo da situação, verifique manualmente se necessário):
echo [GPU_frequency_limit] | sudo tee /sys/class/drm/cardX/gt_max_freq_mhz /sys/class/drm/cardX/gt_boost_freq_mhz
Por exemplo:
echo 800 | sudo tee /sys/class/drm/card0/gt_max_freq_mhz /sys/class/drm/card0/gt_boost_freq_mhz
3) Verifique se os limites foram atingidos (altere 0 para seu valor X se você usou cardX:
sudo cat /sys/kernel/debug/dri/0/i915_rps_boost_info
Seus valores max soft e boost agora devem ser modificados para o que você definiu.
Esteja ciente de que limitar a frequência da GPU pode reduzir seu desempenho no OpenGL.
Se você não quiser usar a primeira solução, tente a alternativa abaixo.
Há outra solução alternativa possível que não funciona para mim devido à limitação do BIOS, mas que pode estar funcionando para outra pessoa, o que limita o limite de potência do pacote, como sugerido por @spandruvada da Intel no github thermald issue thread.
Primeiro você vê o valor atual lendo / sys / class / powercap / intel-rapl / intel-rapl: 0 / constraint_0_power_limit_uw :
sudo cat /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
Então você tenta alterar o valor limite executando:
echo [reduced_power_value] | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
Por exemplo, no meu caso, eu tinha 35000000 como valor inicial e quero alterá-lo para 30000000 :
echo 30000000 | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
Se você obtiver "No data available" depois de tentar gravar nele, ele será desativado (o que pode ser verificado lendo / sys / class / powercap / intel-rapl / intel-rapl: 0 / ativado , será 0 se estiver desativado) ou está bloqueado pelo BIOS. Se você não pode habilitá-lo escrevendo 1 para a opção "enable", verifique o dmesg para a mensagem de erro (depois de tentar escrever em constraint_0_power_limit_uw :
dmesg | grep powercap
[29580.025164] powercap intel-rapl:0: package locked by BIOS, monitoring only
Se você vir "bloqueado pela BIOS", precisará ativá-lo na BIOS manualmente, se não puder fazer isso, não poderá controlá-lo e esse método não é para você. Pelo que entendi, se você ativou e ativou, o thermald deve ajustar esses valores automaticamente, sem a necessidade de alterá-los manualmente.
Problema no github com essa sugestão
Se você quiser usar este método manualmente, mais alguns detalhes sobre isso aqui.