Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 14 章: Platform / Port / Optics を参照。
裏取りステータス: Code-verified
sonic-swss/orchagent/switchorch.h:12-14, 170-179 で ASIC_SENSORS_POLLER_* 定数と m_asicSensorsTable / m_sensorsPollerTimer / m_sensorsPollerEnabled メンバ、sonic-swss-common/common/schema.h:138 で ASIC_TEMPERATURE_INFO_TABLE_NAME、switchorch.cpp:154,173,402,408,425-436 で SelectableTimer 実装と ASIC_SENSORS 動的反映を確認(verified at: 2026-05-09)。
ASIC 内部温度センサのポーリング(ASIC_SENSORS / ASIC_TEMPERATURE_INFO)¶
何が課題なのか¶
スイッチ上の温度センサのうち 外部(オンボード) は既存ドライバで読めるが、ASIC 内部センサは ASIC SDK 経由でしか読めない1。pmon に SAI 依存を入れたくないため、orchagent 側に poller を置いて STATE_DB に書き出し、thermalctld / show platform temperature / SNMP / Telemetry から透過的に参照できるようにする。
SAI が提供する関連属性1:
| SAI 属性 | 内容 |
|---|---|
SAI_SWITCH_ATTR_MAX_NUMBER_OF_TEMP_SENSORS |
センサ最大個数 |
SAI_SWITCH_ATTR_TEMP_LIST |
全センサ読み値 |
SAI_SWITCH_ATTR_AVERAGE_TEMP |
平均 |
SAI_SWITCH_ATTR_MAX_TEMP |
最大 |
どう動くのか¶
SwitchOrch を ASIC_SENSORS の consumer に追加し、SelectableTimer sensorsPollerTimer(既定 10 秒)を持つ。CONFIG_DB の admin_status / interval 変更は次回 callback で反映1。
flowchart LR
SAI[SAI ASIC sensors] --> SO[SwitchOrch poller]
SO --> ASTAT[STATE_DB<br/>ASIC_TEMPERATURE_INFO<br/>per-ASIC]
ASTAT --> PT[Platform Thermal.get_temperature]
PT --> TC[thermalctld]
TC --> GTI[STATE_DB.TEMPERATURE_INFO]
GTI --> CLI[show platform temperature]
GTI --> SNMP
ポーラ動作: timer callback で TEMP_LIST を必ず取得、AVERAGE_TEMP / MAX_TEMP は SAI 実装が対応する場合のみ取得1。
CONFIG_DB / STATE_DB¶
# CONFIG_DB (per-ASIC)
ASIC_SENSORS|ASIC_SENSORS_POLLER_STATUS admin_status: enable | disable
ASIC_SENSORS|ASIC_SENSORS_POLLER_INTERVAL interval: 5..300 秒
# STATE_DB (per-ASIC)
ASIC_TEMPERATURE_INFO average_temperature / maximum_temperature
temperature_0 .. temperature_N
Platform 層¶
ASIC 内部センサも platform の _thermal_list[] に追加するが、Platform API 自体に変更はない。get_temperature() の実装で ASIC_TEMPERATURE_INFO から値を引く ことで対応する。閾値(high/low/critical)は platform 実装に委ねる。thermalctld 本体に変更なし1。
CLI と設定例¶
show platform temperature で ASIC 内部センサも含めて表示される。HLD 当時 poller 制御専用 CLI は未定義 で、redis-cli / sonic-db-cli で直接書く運用1:
sonic-db-cli CONFIG_DB hset 'ASIC_SENSORS|ASIC_SENSORS_POLLER_STATUS' admin_status enable
sonic-db-cli CONFIG_DB hset 'ASIC_SENSORS|ASIC_SENSORS_POLLER_INTERVAL' interval 30
sonic-db-cli STATE_DB hgetall 'ASIC_TEMPERATURE_INFO'
show platform temperature
制限事項¶
- 値取得は SDK / SAI 経由必須1
- HLD 当時 poller 制御専用 CLI 未定義1
AVERAGE_TEMP/MAX_TEMPは SAI 実装次第で NULL のことありthermalctld.UPDATE_INTERVAL(既定 60 秒)よりASIC_SENSORS_POLLER_INTERVALを短くしないと収束が遅くなる1- multi-ASIC では 各 ASIC instance ごとに個別設定
- 閾値は platform 側で持ち、SAI からは取得しない
干渉する機能¶
SwitchOrch(主体) / thermalctld(既存集約) / Platform Thermal 実装(_thermal_list[]) / pmon(SAI 呼ばない) / SNMP / Telemetry。
トラブルシューティング¶
- ASIC センサ非表示 →
admin_status=enableか、ASIC_TEMPERATURE_INFOが更新されているか - 値が古い →
interval設定、SwitchOrchログ、timer 起動有無 - 一部 NULL → SAI 側
AVERAGE_TEMP/MAX_TEMP未サポート - multi-ASIC で一部 ASIC 非表示 → 該当 ASIC の DB instance に
ASIC_SENSORSが入っているか
コマンド例¶
ASIC 温度監視データを確認する。
show platform temperature
redis-cli -n 6 keys 'ASIC_TEMPERATURE_INFO|*'
docker exec pmon thermalctld -v 2>&1 | head
grep -i thermal /var/log/syslog | tail -20
関連 Topics¶
- 14-platform-port-optics: pmon / platform daemon 全体像
- 09-telemetry-snmp: 温度値の publish