本文列出 Fuchsia 裝置可能重新啟動的原因。有些屬性不言自明,有些則需要額外脈絡。
大綱:
術語
非安全重新啟動
不正常重新啟動是指由核心因應錯誤 (例如核心恐慌) 而啟動的重新啟動,或是由硬體在沒有軟體介入的情況下執行重新啟動 (例如硬體監控計時器逾時)。
安全重新啟動
優雅重新啟動是指由使用者空間程序啟動的重新啟動。如果發生錯誤 (例如裝置溫度過高),程序可能會啟動重新啟動作業,但 Fuchsia 應有機會進行有序關機。
列出的重新啟動原因
核心錯誤
如果核心無法從內部錯誤復原,該錯誤就會視為嚴重錯誤,系統將重新啟動。
系統記憶體不足
如果核心偵測到可用實體記憶體數量低於門檻,系統就會重新啟動。核心不會終止程序來嘗試回收記憶體,然後再重新啟動,這表示單一程序可能會導致系統記憶體不足,並強制裝置重新啟動。
冷啟動
如果裝置在關機和重新啟動之間斷電時間夠長,系統就會判定為冷啟動。
低負載期間
當裝置的電壓低於可接受的門檻時,就會發生電壓驟降。只有在裝置的電源供應器或電源相關硬體有問題時,才會發生這種情況。
硬體監控計時器逾時
Zircon 會設定硬體監控計時器,如果裝置未在指定時間內重設,就會重新啟動。
軟體監控計時器逾時
如果有人設定軟體監控計時器,裝置可能會重新啟動。
短暫斷電
如果裝置短時間內失去電力 (例如使用者拔除裝置電源線後迅速重新接上),裝置可能無法判斷重新啟動是冷啟動,而是短暫斷電所致。請注意,簡短的定義並非量化指標,而且會因硬體而異。
使用者要求
裝置使用者明確要求重新啟動裝置。
開發人員要求
開發人員啟動重新啟動程序,通常是透過殼層指令或類似介面,包括在自動化測試中。
系統更新
負責系統更新的元件必須更新無法暫時更新的套件 (或多個套件)。這些套件在正典上稱為基礎套件。
重試系統更新
負責系統更新的元件無法套用更新,因此裝置會重新啟動,再次嘗試更新 (或可能還原更新)。
ZBI 兌換
如果 Zircon 啟動映像檔遭到交換,裝置會重新啟動以套用變更。
高溫
負責電源管理的元件偵測到裝置溫度過高,且系統無法透過節流 CPU 或降低音量充分降低裝置溫度。
工作階段失敗
如果工作階段管理員無法重新啟動當機的工作階段,或工作階段判斷自己發生無法復原的錯誤,裝置就會重新啟動。
重要元件故障
如果標示為 "on_terminate": "reboot"
的元件當機,裝置就會重新啟動。
恢復原廠設定
將裝置恢復原廠設定後,裝置會重新啟動。
終止根工作
如果終止使用者空間根工作 (例如,因為其中一個重要程序當機),裝置就會重新啟動。
Generic graceful
平台可以判斷重新啟動是否正常,但無法區分是軟體更新、使用者要求,還是某些較高層級的元件偵測到裝置過熱。平台只知道重新啟動是正常程序。
不明
在某些情況下,平台無法判斷具體的重新啟動原因,也無法判斷重新啟動是否正常。
如何查看重新啟動的原因
Fuchsia 會透過 FIDL 顯示裝置上次 (重新) 啟動的原因,並在 Cobalt 和當機伺服器上追蹤該原因。
主因
如果重新啟動是由特定元件的錯誤所導致,當機簽章會將該元件歸因於重新啟動的原因。這些記錄通常會結合重新啟動原因和被視為導致重新啟動的元件 (即罪魁禍首)。
重新啟動原因 | FIDL | Cobalt 事件 | 當機簽章 |
---|---|---|---|
核心錯誤 | KERNEL_PANIC |
KernelPanic |
負責當機的函式,與使用者空間當機報告完全相同 |
系統記憶體不足 | SYSTEM_OUT_OF_MEMORY |
SystemOutOfMemory |
fuchsia-oom 或 fuchsia-oom-$CULPRIT |
冷啟動 | COLD |
Cold |
不適用* |
低負載期間 | BROWNOUT |
Brownout |
fuchsia-brownout |
硬體監控計時器逾時 | HARDWARE_WATCHDOG_TIMEOUT |
HardwareWatchdogTimeout |
fuchsia-hw-watchdog-timeout |
軟體監控計時器逾時 | SOFTWARE_WATCHDOG_TIMEOUT |
SoftwareWatchdogTimeout |
fuchsia-sw-watchdog-timeout |
短暫斷電 | BRIEF POWER LOSS |
BriefPowerLoss |
fuchsia-brief-power-loss |
使用者要求 | USER_REQUEST |
UserRequest |
不適用* |
開發人員要求 | DEVELOPER_REQUEST |
DeveloperRequest |
不適用* |
系統更新 | SYSTEM_UPDATE |
SystemUpdate |
不適用* |
重試系統更新 | RETRY_SYSTEM_UPDATE |
RetrySystemUpdate |
fuchsia-retry-system-update |
ZBI 兌換 | ZBI_SWAP |
ZbiSwap |
不適用* |
高溫 | HIGH_TEMPERATURE |
HighTemperature |
fuchsia-reboot-high-temperature |
工作階段失敗 | SESSION_FAILURE |
SessionFailure |
fuchsia-session-failure |
重要元件故障 | CRITICAL_COMPONENT_FAILURE |
CriticalComponentFailure |
fuchsia-critical-component-failure 或 fuchsia-reboot-$CULPRIT-terminated |
恢復原廠設定 | FACTORY_DATA_RESET |
FactoryDataReset |
不適用* |
終止根工作 | `ROOT_JOB_TERMINATION | RootJobTermination |
fuchsia-root-job-termination 或 fuchsia-reboot-$CULPRIT-terminated |
Generic graceful | 「graceful」欄位設為 true | GenericGraceful |
fuchsia-undetermined-userspace-reboot |
不明 | 未設定 graceful 欄位 | Unknown |
fuchsia-reboot-log-not-parseable |
* 不是車禍。\