Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 14 章: Platform / Port / Optics を参照。
裏取りステータス: code-verified
sonic-platform-daemons/sonic-psud/scripts/psud で PSU_INFO_UPDATE_PERIOD_SECS = 3、PSU_INFO_POWER_OVERLOAD = 'power_overload'、PSU_INFO_POWER_WARNING_SUPPRESS_THRESHOLD / PSU_INFO_POWER_CRITICAL_THRESHOLD の定数と判定ロジックが確認できた。sonic-platform-common/sonic_platform_base/psu_base.py の get_psu_power_warning_suppress_threshold / get_psu_power_critical_threshold / get_input_voltage / get_input_current 抽象 API も実在。sonic-utilities/scripts/psushow で power_overload を読み取り WARNING / OK を表示。
psud(PSU 監視デーモン / power threshold ヒステリシス)¶
概要¶
psud は PSU の物理状態と電力指標を周期収集し STATE_DB に書く platform monitor 系 daemon1。supervisord が psud を起動。3 秒ループで platform API(fallback で plugin)を呼び、PSU の present / power_good / 電圧 / 電流 / 電力 / 温度 / 各種閾値を取得して PSU_INFO table を更新する。電圧範囲超過 / 温度過熱 / 電源喪失 / PSU 抜去 / power critical threshold 超過 に対し PSU LED 色変更と syslog 発報を行う。power threshold チェックは v0.4 で追加され、ヒステリシス付き 2 段閾値 (warning-suppress, critical) で alarm flapping を抑止する。
動作仕様¶
主要ループ¶
flowchart LR
TICK[3 sec timer] --> P0[entity info 更新]
P0 --> P1[present / power_good]
P1 -->|new PSU 検出| THR[warning_suppress / critical 閾値読取]
P1 --> P2[voltage / current / power / temp 読取]
P2 --> CHK[power threshold check<br/>w/ hysteresis]
P2 --> EVT{abnormal event?}
EVT -->|yes| LED_RED[LED=red] --> SYS[syslog ALERT]
EVT -->|recover| LED_GR[LED=green] --> SYS2[syslog cleared]
CHK --> DB[(STATE_DB PSU_INFO)]
Power threshold ヒステリシス¶
critical ─────── alarm raise
(power が critical を上方向に横切る)
............
warning_supp ── alarm clear
(power が warning_suppress を下方向に横切る)
power_overload=trueのとき、warning_suppress 未満まで下がると false に戻して NOTICE logpower_overload=falseのとき、critical 以上で true に上げて WARNING log- どちらの閾値も platform API が
NotImplemented/Noneなら その PSU では check 無効1
非対称閾値にする理由: 単一閾値だと閾値付近で alarm flapping が起きる。クリア閾値を低く取ることで安定化1。
PSU_INFO テーブル(STATE_DB)¶
key: PSU_INFO|<psu_name>
| フィールド | 内容 |
|---|---|
presence / status / change_event |
PSU 物理状態 |
model / serial / revision / is_replaceable / fan / led_status |
metadata |
voltage / voltage_min_threshold / voltage_max_threshold |
出力電圧と範囲 |
current / power / max_power |
出力 |
input_voltage / input_current |
入力 |
temp / temp_threshold |
温度 |
power_overload |
"true" / "false" |
power_warning_suppress_threshold / power_critical_threshold |
2 段閾値 |
PSU 数自体は別途 chassis_info テーブルに格納(pmon-enhancement HLD と整合)1。
イベント定義¶
| イベント | LED | Alert メッセージ |
|---|---|---|
| 電圧範囲外 | red | PSU voltage warning: <name> voltage out of range, ... |
| 温度過熱 | red | PSU temperature warning: <name> too hot, ... |
| Power absence | red | Power absence warning: <name> is out of power. |
| PSU 抜去 | red (LED 不可な場合あり) | PSU absence warning: <name> is not present. |
| Power threshold 超過 | (LED は変えず status=WARNING) | WARNING level syslog |
回復時は ... cleared: ... back to normal の Recover メッセージと LED=green。
Platform API 拡張(PsuBase)¶
vendor は sonic_platform_base/psu_base.py の以下を実装する1:
get_temperature(), get_temperature_high_threshold()
get_voltage_high_threshold(), get_voltage_low_threshold()
get_input_voltage(), get_input_current()
get_psu_power_warning_suppress_threshold() # 揮発値、毎回呼ぶ
get_psu_power_critical_threshold() # 揮発値、毎回呼ぶ
Volatile 注記が重要: 閾値が温度等で動的に変化する platform があり、psud は値を cache せず毎周回取得する想定。
CLI¶
| Command | 表示内容 |
|---|---|
show platform psustatus |
psud が STATE_DB に書いた状態。Status に WARNING を含む(threshold 超過 alarm) |
psuutil |
platform API 直叩き。one-shot のため state を持たず WARNING 列は出さない(warning_suppress < power < critical の判別ができない) |
show platform psustatus の出力(HLD 抜粋):
PSU Model Serial HW Rev Voltage(V) Current(A) Power(W) Status LED
PSU 1 MTEF-PSF-AC-A MT1629X14911 A3 12.08 5.19 62.62 WARNING green
PSU 2 MTEF-PSF-AC-A MT1629X14913 A3 12.01 4.38 52.50 OK green
psuutil 出力には Power Warn-supp Thres (W) と Power Crit Thres (W) 列が追加される(platform 非対応なら N/A)。
📋 検証エビデンス: sonic-net/SONiC/doc/psud/PSU_daemon_design.md#L80-L110 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
出典:
sonic-net/SONiC/doc/psud/PSU_daemon_design.md#L80-L110 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
抜粋:
We use asymmetric thresholds between raising and clearing the alarm for the purpose of creating a hysteresis ...
- an alarm will be raised when a PSU's power is rising across the critical threshold
- an alarm will be cleared when a PSU's power is dropping across the warning-suppress threshold
判断根拠: 2 段閾値ヒステリシスの根拠。
制限事項¶
psuutilは state を持たないためWARNINGを表示しないpower thresholdは platform API が両方の getter を提供する必要あり(片方欠けたら無効)- 動的閾値 platform では値が時間変化する前提で cache 禁止
- LED 制御不能な PSU 抜去状態では LED 表示は更新できない
干渉する機能¶
- pmon-enhancement-design: PSU 数を
chassis_infoに置く設計と接続 - thermal-control: PSU 温度や電力が thermal policy にも影響
psuutil/show platform psustatusCLI: 状態露出- modular switch: 全 PSU 合計 power が switch power budget を超えるかも別途監視
確認コマンド¶
show platform psustatus—WARNINGステータス(power_overload)が見えるsonic-db-cli STATE_DB hgetall "PSU_INFO|PSU 1"— voltage / current / power / threshold / overload を直接確認docker exec pmon supervisorctl status psud— psud デーモンの動作確認docker logs pmon 2>&1 | grep -i psu— psud のログを確認
コマンド例¶
PSU の状態と daemon を確認する。
# PSU
show platform psustatus
redis-cli -n 6 keys 'PSU_INFO|*'
redis-cli -n 6 hgetall 'PSU_INFO|PSU 1'
ps aux | grep -E 'psud|pmon'