鸿蒙内核论文阅读总结概述

news/2024/11/6 0:27:00 标签: harmonyos, 华为

原文链接:

https://www.usenix.org/system/files/osdi24-chen-haibo.pdf

“Microkernel Goes General: Performance and Compatibility in the HongMeng Production Microkernel” 由 Haibo Chen 等人撰写,介绍了鸿蒙内核(HM)的设计与实现。HM 是一款商业化的通用微内核,在保持微内核优势的同时,解决了在通用场景下的性能和兼容性问题。

  1. 研究背景
    • 微内核的优势与局限:微内核具有安全性、可靠性和可扩展性等优点,在嵌入式和安全关键场景中得到广泛应用。然而,在面向智能手机和智能汽车等更通用的场景时,面临性能和兼容性问题。
    • 通用场景的需求:新兴场景如智能车辆和智能手机需要丰富的外设和应用,强调安全性和可靠性,同时对性能要求较高。现有的操作系统难以同时满足这些需求。
  2. HM 的设计理念
    • 最小化微内核与隔离的 OS 服务:保留微内核的最小化原则,将必要的功能放在核心内核中,其他组件作为隔离的 OS 服务放在核心内核之外。采用细粒度的访问控制,以保持最小特权原则。
    • 最大化兼容性:通过实现 Linux API/ABI 兼容和高效的驱动重用来集成现有软件生态系统。使用 ABI 兼容的垫片来识别和重定向 Linux 系统调用,通过驱动容器重用未修改的 Linux 驱动。
    • 性能优先:在不违反微内核架构原则的前提下,优先考虑性能。采用灵活的组合方式来减少 IPC 开销,通过地址令牌补充能力来实现高效的内核对象合作,支持无策略的内核分页。
  3. 性能设计
    • 同步 RPC - like IPC Fastpath:采用类似 RPC 的线程迁移作为 IPC 的快速路径,解决了异步 IPC 在新兴场景中的问题。同时,考虑了 IPC 的内存占用、资源耗尽和资源核算等问题。
    • 差异化隔离类:根据 OS 服务的特性采用差异化隔离类,为不同的服务提供定制的隔离和性能。包括核心 TCB、机制强制隔离和地址空间隔离等类别。
    • 灵活组合:允许在性能要求较高的场景下合并紧密耦合的 OS 服务,以减少 IPC 频率和消除状态重复记账。同时,在安全关键场景下保留分离服务的能力。
    • 基于地址令牌的访问控制:提出基于地址令牌的访问控制方法,解决了基于能力的访问控制在新兴场景中的性能问题。通过将内核对象映射到地址空间,实现了高效的内核对象合作。
    • 无策略内核分页:采用集中式内存管理,通过预先做出策略驱动的决策,在核心内核中留下无策略的页面故障处理机制,提高了处理匿名内存页面故障的性能。
  4. 兼容性设计
    • Linux ABI 兼容性:通过在 IC0 放置 ABI 兼容的垫片来实现 Linux ABI 兼容性,垫片将 Linux 系统调用重定向到适当的 OS 服务,并作为全局状态的中央存储库,支持 fd 复用和 fork 等功能。
    • 驱动容器:通过驱动容器重用 Linux 设备驱动,容器提供必要的 Linux KAPIs,允许现有驱动在不修改的情况下运行。采用控制平面和数据平面分离的方法提高驱动的性能。
  5. 实际应用与性能对比
    • 实现与部署:HM 的核心内核由 90k 行 C 代码实现,其他 OS 服务可单独部署,总计超过 100 万行代码。已在数千万台设备上进行了部署,根据不同场景进行了配置。
    • 性能对比:在智能手机、智能车辆和智能路由器等新兴场景中,与 Linux 相比,HM 在上下文切换、网络、应用启动时间、帧丢失和中断延迟等方面具有更好的性能,同时减少了内存占用和系统启动时间。
  6. 经验与教训
    • 兼容性优先,逐步本地化:兼容性是商业部署的关键第一步,通过大规模测试来检查兼容性。
    • 先部署,再持续优化:微内核难以在初始阶段满足所有性能目标,需要进行全系统优化。采用半形式化验证和自动化验证来提高代码质量。
    • 硬件故障的放大:在大规模部署时,一些低概率的硬件故障可能会影响用户体验,通过隔离关键驱动和创建监视器来缓解这些问题。
    • 大内核锁在新兴场景中不可扩展:在新兴场景中,大内核锁面临可扩展性问题,需要采用其他方法来解决并发问题。
  7. 结论与未来工作
    • HM 是一款商业化的通用微内核,保留了微内核的原则,同时解决了在新兴场景中的兼容性和性能问题。为未来微内核在生产中的应用提供了参考。
    • 未来的工作包括进一步探索微内核在硬件异构性和容错方面的应用,以及提高自动化验证的效率。


http://www.niftyadmin.cn/n/5739967.html

相关文章

Android 15 在状态栏时间中显示秒数

这是更新后的博客草稿,关于在Android 15状态栏中显示秒数的实现: 在Android 15状态栏中显示秒数 在Android 15中,您可以通过两种方式在状态栏中显示秒数:使用ADB命令或修改系统源代码。下面详细介绍这两种方法。 方法一:通过ADB实现 您可以使用ADB(Android调试桥)命令…

Kafka 之批量消息发送消费

前言: 前面我们分享了 Kafka 的一些基础知识,以及 Spring Boot 集成 Kafka 完成消息发送消费,本篇我们来分享一下 Kafka 的批量消息发送消费。 Kafka 系列文章传送门 Kafka 简介及核心概念讲解 Spring Boot 整合 Kafka 详解 Kafka Kafka…

动态规划 —— dp问题-按摩师

1. 按摩师 题目链接: 面试题 17.16. 按摩师 - 力扣(LeetCode)https://leetcode.cn/problems/the-masseuse-lcci/description/ 2. 算法原理 状态表示:以某一个位置为结尾或者以某一个位置为起点 dp[i]表示:选择到i位置…

mac终端运行 MySQL语句 和服务器相关命令

文章目录 1.mac服务器相关命令1.获取mac电脑的IP 2.MySQL语句1. 退出 MySQL:2.使用新密码连接:3.创建一个新数据库:4.查看数据库列表:5.使用数据库:6.创建一个用户表:7.插入数据8.查询数据9.更新数据10.删除…

【3D】基础概念

3D建模大概可分两类为:NURBS和多边形网格。 NURBS:由数学方程和矢量定义,而不是多边形,对要求精细、弹性与复杂的模型有较好的应用,适合量化生产用途。比如plasticity, fusion360。不适合deformations with displacement or rigging etc多边…

OpenEuler 使用ffmpeg x11grab捕获屏幕流,rtsp推流,并用vlc播放

环境准备 安装x11grab(用于捕获屏幕流)和libx264(用于编码) # 基础开发环境&x11grab sudo dnf install -y \autoconf \automake \bzip2 \bzip2-devel \cmake \freetype-devel \gcc \gcc-c \git \libtool \make \mercurial \pkgconfig \zlib-devel \libX11-devel \libXext…

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…

【浏览器学习笔记】-- 浏览器检查jQuery是否加载

环境:最近做爬虫实验,需要用到上下文http数据请求,为了能够兼容上下文环境,因此采用就jQuery请求,请求前需要加查是否有JQuery加载成功。 浏览器F12,打开浏览器控制台,复制粘贴以下代码&#x…