Pengutronix 嵌入式 Linux 咨询公司的 Oleksij Rempel 上周五发布了一系列补丁,提出了针对驱动程序/硬件的基于优先级的 shutdown 支持。
主要目的是在主线 Linux 内核提供优先关闭特定设备的功能,“这在 power loss 等情况下尤为重要,如果处理不当,可能会造成硬件损坏”。
其内容重点在于,在意外/即时 shutdown 事件(例如电源/电压下降或完全断电)期间正确关闭关键设备。作为补丁系列的一部分,Oleksij Rempel 还提出在 shutdown 阶段将 (e)MMC 存储设备设置为更高优先级,以帮助确保数据完整性/损坏。
Oleksij Rempel 的这一想法引发了 Linux 内核开发人员间的激烈讨论,并形成了两极分化的看法。Greg Kroah-Hartman 首先对这种基于优先级的 shutdown 支持提出了质疑。他指出,这一做法会导致驱动程序和子系统之间出现优先级的争夺:
每个驱动程序和子系统都坚持认为自己是最重要的!
总之,从长远来看,这样做会带来很多问题,这些硬件有什么特别之处能使得其不可以按照现有顺序 shutdown,而必须比其他人"优先"?这样做究竟是为了防止什么,哪些设备需要这样做?
最重要的是,在过去的 20 多年中,有什么变化导致突然需要这种新功能,其他操作系统是如何处理的?
观点双方就主线 Linux 内核是否应该具有这样的功能,以有效解决有问题的硬件设计做出了很多讨论。最后事实证明,一些用于汽车行业的外层 Linux 内核版本已经提供了这种优先 shutdown 支持。Oleksij Rempel 将这一需求总结为:
它能防止硬件损坏。在典型的汽车欠压测试中,通常可以在 Y 个欠压周期内重现 X 个损坏的 eMMC 或 NAND(我现在没有确切的数字)。即使在人工测试中出现的数量不是很多(有时一个月的测试中就会出现一个损坏的设备),但现场的回报率也很高,足以让我们关心这个问题的软件解决方案。
同样的问题不仅出现在汽车设备上,也出现在工业或农业设备上。换句话说,这个问题非常重要,必须要有某种解决方案。
对此,Greg 则用反问的语气调侃称,“这么说的话,硬件试图依靠软件来防止同一硬件遭到破坏?硬件设计师肯定没那么疯狂吧?”
科技网站 Phoronix 评论称,从较高层次上来看,如果设备/驱动程序有充分的理由希望优先为设备 shutdown 做好准备,例如可以防止数据丢失或获得其他重大优势,那么这种基于优先级的 shutdown 支持似乎没有问题。但在实践中,如果有多个驱动程序声称在 shutdown 过程中拥有"优先权",并且在确保设计可靠且能妥善解决实际问题方面存在其他障碍,那么具体的实现就会存在一些困难。
目前为止,大家对这种方法的意见还很不统一。现阶段能否设计出一种既能为主线所接受,又能满足汽车和更广泛的嵌入式/工业领域需求的适当解决方案,还有待观察。