web-dev-qa-db-ja.com

CPU周波数スケーリングがVanilla Ubuntu 16.04で意図したとおりに機能しない

ラップトップ(Intel(R)Core(TM)i7-4810MQ CPU @ 2.80GHz)のCPU周波数スケーリングが意図したとおりに機能しません。 ubuntu 16.04の初期インストール後、電源管理またはCPU周波数スケーリングに関して変更を加えていません。通常、私はオンデマンドガバナーに慣れています。ただし、このガバナーは、新しいカーネルの一部のpstateやpowersaveガバナーに置き換えられたようです。

負荷がなくてもCPU周波数は2.xの範囲で推移するため、ファンがうるさくなり、デバイスが熱くなります。

$ cat /proc/cpuinfo |grep -i mh
cpu MHz     : 3435.468
cpu MHz     : 2245.468
cpu MHz     : 2800.218
cpu MHz     : 2338.765
cpu MHz     : 2800.546
cpu MHz     : 2801.203
cpu MHz     : 2800.875
cpu MHz     : 2000.140
$ uptime
 14:57:49 up  5:15,  1 user,  load average: 0,01, 0,08, 0,16
$ cpufreq-info 
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to [email protected], please.
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.80 GHz.
analyzing CPU 1:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 1
  CPUs which need to have their frequency coordinated by software: 1
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.80 GHz.
analyzing CPU 2:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 2
  CPUs which need to have their frequency coordinated by software: 2
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.79 GHz.
analyzing CPU 3:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 3
  CPUs which need to have their frequency coordinated by software: 3
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.80 GHz.
analyzing CPU 4:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 4
  CPUs which need to have their frequency coordinated by software: 4
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.80 GHz.
analyzing CPU 5:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 5
  CPUs which need to have their frequency coordinated by software: 5
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.78 GHz.
analyzing CPU 6:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 6
  CPUs which need to have their frequency coordinated by software: 6
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.90 GHz.
analyzing CPU 7:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 7
  CPUs which need to have their frequency coordinated by software: 7
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.79 GHz.

不思議なことに、私は逆の動作も観察しました:マシンは高負荷下にありましたが、周波数は約2分の1まで減少していました。 20〜30秒で、すべてのコアが約800MHzに達しました。私はcpufreq-infoで確認しましたが、構成は問題ないようです(節電ガバナー、適切なレベルでの最小/最大周波数)。残念ながら、エラーを再現できません...

これらのスケーリングの問題の原因は何ですか、またはそれらを修正するために何ができるでしょうか?

1
dassmann

概要

はい、特定の条件下で、現在のバージョンのintel_pstateドライバーは、かなり軽い負荷でCPU周波数を上げることができます。ただし、通常は、これにより「ファンが騒がしくなり、デバイスが熱くなる」ことはありません。これは、関連するCPUの動作が速くなり、ディープスリープ状態により多くの時間を費やして、より高い有効電力に対抗するためです。私はこれまで、パッケージの電力の約1/2ワットをこの問題に起因させることができただけです。

質問の2番目の部分については、高負荷でCPU周波数を下げることについてです。何らかの種類のサーマルスロットリングが関係していると推測できます。

詳細

「負荷なし」または「アイドル」を定義することは非常に重要です。どうして? GUIベースのシステムでは、「アイドル」には実際に行うべき作業がかなりあります。非GUIサーバーベースのシステムでは、「アイドル」は通常、実行する作業がほとんどないことを意味します。

GUIベースのシステムでは、この問題の発現は以下に依存します。カーネルのHzレート(100、250、300、または1000 Hz)。ビデオドライバーのフレームレート。どれだけのバックグラウンドが起こっているか。スケジューラーがCPU間でローテーションする方法。私が今忘れている他のいくつかのこと。

一時的な修正が追加されましたが、実際の負荷は1%以下しかカバーしていませんが、1%を超える負荷でもこの状態が発生する可能性があります。また、その修正が現在の16.04カーネルにあるのか、それともバックポートされているのかはわかりません。

より良い修正が進行中ですが、それがリリースされる前のいつかになります。
それまでは、必要に応じてacpi-cpufreqドライバーに戻ることができます。 here または here を参照してください。

参照資料

https://bugzilla.kernel.org/attachment.cgi?id=187781
https://bugzilla.kernel.org/show_bug.cgi?id=93521
https://bugzilla.kernel.org/show_bug.cgi?id=115771
http://marc.info/?l=linux-pm&m=147000845531378&w=2
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ffb810563c0c049872a504978e06c8892104fb6c

0
Doug Smythies