为什么 Fuchsia 设备会重新启动

本文档列出了 Fuchsia 设备可能会重新启动的原因。有些指标一目了然,而另一些则需要一些额外的背景信息。

大纲:

术语

非正常重启

不正常重启是指由内核响应错误(例如内核恐慌)而启动的重启,或由硬件在没有软件干预的情况下执行的重启,例如硬件监控计时器超时。

安全重启

正常重启是指由用户空间进程发起的重启。进程可能会因错误(例如设备温度过高)而启动重新启动,但 Fuchsia 应有机会进行有序关机。

列出的重新启动原因

内核崩溃

如果内核无法从内部错误中恢复,则该错误会被视为致命错误,系统将重新启动。

系统内存不足

如果内核检测到可用物理内存量低于某个阈值,系统会重新启动。内核不会在重新启动之前终止进程来尝试回收内存,这意味着单个进程可能会导致整个系统内存不足,并强制设备重新启动。

冷启动

如果设备在关机和重新启动之间断电的时间足够长,系统会判定为冷启动。

服务降级时间

当设备的电压降至可接受的阈值以下时,就会出现电压骤降。只有在设备的电源或与电源相关的硬件出现问题时,才会发生这种情况。

硬件看门狗超时

Zircon 会设置一个硬件看门狗计时器,如果在指定的时间段内未重置该计时器,则会重新启动设备。

软件监控计时器超时

如果有人设置了软件看门狗计时器,该计时器可能会重启设备。

短暂断电

如果设备在短时间内断电,例如用户拔下设备插头并快速重新插上,设备可能无法确定重启是冷启动,而会认为重启是短暂断电造成的。请务必注意,简短的定义没有定量衡量标准,并且取决于硬件。

用户请求

设备最终用户明确请求重新启动设备。

开发者请求

开发者启动了重新启动,通常是通过 shell 命令或类似接口(包括在自动化测试中)启动的。

系统更新

负责系统更新的组件必须更新无法临时更新的软件包或多个软件包。这些软件包通常称为基础软件包。

重试系统更新

负责系统更新的组件未能应用更新,因此设备会重新启动以重试(或可能还原更新)。

ZBI 交换

如果 Zircon 启动映像被替换,设备会重新启动以应用更改。

最高温度

负责电源管理的组件检测到设备温度过高,并且系统无法通过限制 CPU 或降低音量来充分降低设备温度。

会话失败

如果会话管理器无法重启崩溃的会话,或者会话确定自己已以不可恢复的方式失败,设备会重新启动。

严重组件故障

如果标记为 "on_terminate": "reboot" 的组件崩溃,设备会重新启动。

恢复出厂设置

将数据重置为出厂默认设置后,设备会重新启动。

根作业终止

如果用户空间根作业因其某个关键进程崩溃等原因而终止,设备会重新启动。

通用正常

平台可以知道重新启动是否正常,但无法区分是软件更新、用户请求还是某些更高级别的组件检测到设备过热。平台只知道重新启动是优雅的。

未知

在某些情况下,平台无法确定具体的重新启动原因,也无法确定重新启动是正常还是异常。

在哪里可以找到重新启动原因

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
通用正常 graceful 字段设置为 true GenericGraceful fuchsia-undetermined-userspace-reboot
未知 未设置 graceful 字段 Unknown fuchsia-reboot-log-not-parseable

* 不是崩溃。\