私は2つのCPUを持つラップトップ(ThinkPad)を持っています。現在、cat(1)を使用して、次のファイルからCPU温度を読み取ることができます。
cat /sys/class/thermal/thermal_zone0/temp
cat /sys/class/thermal/thermal_zone1/temp
cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input
cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input
cat /sys/devices/LNXSYSTM:00/LNXCPU:00/thermal_cooling/subsystem/thermal_zone1/temp
cat /sys/devices/LNXSYSTM:00/LNXCPU:01/thermal_cooling/subsystem/thermal_zone0/temp
私の質問は、なぜカーネルがこの情報をそんなに多くの異なる場所に保存するのか、そしてどちらがCPU温度を読むための「標準」ファイルなのかということです。
これはsystemd(私はArch Linuxを使用しています)のために起こりますか、それともSlackwareのようなシステムではないLinuxディストリビューションに異なるアプローチがありますか?
答え1
実際、温度はそうではありません。保存済みどこかに。/sys
はメモリファイルシステム、 のファイルから/sys
動的に計算された値を呼び出すカーネルのコードを読み込みます。
さまざまなディレクトリは、ハードウェアが温度を報告するさまざまな方法に対応しています。これらのファイルには、報告されるコンポーネントの温度を識別するtemp*_input
関連IDがあります。temp*_label
以下の場所は、/sys
ディストリビューションではなくカーネルのバージョンによって異なります。これは、データを読み取るプログラムの作成者が/sys
耐えなければならない困難です(はい)。
答え2
まず、/sys/class
でコンテンツを見つける便利な方法です/sys
。そこにあるすべてが実際にシンボリックリンクであることがわかります。最初のセクションが3番目のセクションにシンボリックリンクされていると確信しています。
2番目のセクションは、カーネルがCPU /チップセットから直接温度を読み取るところです。 3番目のセクションは、カーネルがACPIを介してBIOSから値を取得する場所です。システムは同じ回答を提供できますが、必ずしもそうではありません(たとえば、BIOSは異なるセンサーを使用したり、複数のセンサーの平均を取得したり、いくつかのマザーボード固有の調整を適用したりすることがあります)。
最後に、2つの温度計がある可能性があるため、各セクションには2つの異なる測定値があります。または、少なくともハードウェアのAPIがこれを許可します。
答え3
報告された内容については、*_labelファイルを確認してください。これは私のi5です。
$ grep "" /sys/devices/platform/coretemp.?/hwmon/hwmon?/temp?_label
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_label:Physical id 0
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_label:Core 0
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_label:Core 1
(grep ""は"ファイル名のある猫"としてのみ機能します)
以下は CPU 温度の合計と各コアの温度です。
大規模なマルチCPUシステムでは、何十もの項目を見ることができます。