Fuchsia 裝置重新啟動的原因

本文列出 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-oomfuchsia-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-failurefuchsia-reboot-$CULPRIT-terminated
恢復原廠設定 FACTORY_DATA_RESET FactoryDataReset 不適用*
終止根工作 `ROOT_JOB_TERMINATION RootJobTermination fuchsia-root-job-terminationfuchsia-reboot-$CULPRIT-terminated
Generic graceful 「graceful」欄位設為 true GenericGraceful fuchsia-undetermined-userspace-reboot
不明 未設定 graceful 欄位 Unknown fuchsia-reboot-log-not-parseable

* 不是車禍。\