Professional Documents
Culture Documents
工作周报
中国科学院软件研究所 工作周报
姓名: 陈卓特
时间:2024 年 3 月 29 日
2 / 16
中国科学院软件研究所 工作周报
目录
1. 工作任务.................................................................................................................3
1.1. 学术资料阅读..............................................................................................3
1.2. 实践环节......................................................................................................4
1.3. 本周出勤情况..............................................................................................4
2. 工作进展.................................................................................................................4
2.1. 学术资料阅读进展......................................................................................4
2.2. 实践环节进展..............................................................................................5
3. 学术资料阅读笔记...............................................................................................10
4. 下周计划...............................................................................................................13
4.1. 学术资料阅读............................................................................................13
4.2. 实践环节....................................................................................................13
5. 参考文献...............................................................................................................13
3 / 16
中国科学院软件研究所 工作周报
1. 工作任务
1.1. 学术资料阅读
[文档] firecracker/docs/dev-machine-setup.md
https://github.com/firecracker-microvm/firecracker/blob/main/docs/dev-machine-
setup.md
[文档] https://www.qemu.org/docs/master/about/build-platforms.html
Kroah-Hartman
https://www.oreilly.com/library/view/linux-kernel-in/0596100795/ch04s02.html
https://opensource.com/article/18/10/kbuild-and-kconfig
4 / 16
中国科学院软件研究所 工作周报
https://linuxconfig.org/in-depth-howto-on-linux-kernel-configuration
1.2. 实践环节
1.3. 本周出勤情况
本周 3/25,3/26,3/27,3/28,3/29 出勤共五天
2. 工作进展
2.1. 学术资料阅读进展
保更好的利用率来提高无服务器应用程序的轻量级虚拟化能力。它涵盖了创建
以及替代虚拟化技术。Firecracker 旨在解决虚拟机在开销、隔离、性能和快速
和效率。
5 / 16
中国科学院软件研究所 工作周报
程序和硬件,同时避免分叉内核,旨在创建一个既能满足通用操作系统需求又
通用操作系统中,避免了分叉,同时提高了性能。大多数应用程序可以在不做
任何更改的情况下以相同或更快的速度运行。UKL 项目展示了通过对内核进行
有针对性的改动,可以实现显著的性能提升。通过启用基本模型配置,UKL 能
够支持大多数应用程序,尽管性能提升有限。开发者可以通过选择更广泛的配
置选项来提高性能,但这些配置选项可能不适用于所有应用程序。
6 / 16
中国科学院软件研究所 工作周报
以及实现虚拟机的实时迁移等特性。
Kconfig 的不同目标和如何生成配置文件(.config)及最终内核镜像文件
7 / 16
中国科学院软件研究所 工作周报
2.2. 实践环节进展
通过精简内核来减少镜像大小和启动时间。
探索了内核配置专门化的不同策略,通过禁用不必要的内核模块和功能,进一
Docker 环境构建
首先,我面临的挑战是 Ubuntu 16.04 的容器镜像在 README 文件中链接已失效。
编译 Lupine Linux 内核
接 下 来 , 编 译 Lupine Linux 内 核 是 另 一 个 挑 战 。 我 分 别 编 译 了 lupine-djw-
制作根文件系统
制作根文件系统时,我遇到了几个问题,包括文件权限、文件拷贝失败,主要
是 路 径 问 题 ( 具 体 是 脚 本 内 的 copy 命 令 找 不 到 文 件 路 径 ) , 以 及
8 / 16
中国科学院软件研究所 工作周报
在 QEMU 中运行
当尝试在 QEMU 上运行 Lupine Linux 时,我发现 Lupine-Linux 内核编译时需要
开 启 CONFIG_PCI=y 和 CONFIG_VIRTIO_PCI=y 配 置 选 项 。 通 过 手 动 检 查
三、具体实现
主要是工作中使用到的一些命令
运行 Docker
在设置环境阶段,我使用了两个主要的 Docker 命令来启动容器:
普通模式启动 Docker 容器:
这 个 命 令 以 交 互 模 式 启 动 了 一 个 名 为 linuxbuild 的 容 器 , 并 挂 载 了 本 地 的
9 / 16
中国科学院软件研究所 工作周报
这些文件。
内核和根文件系统时非常有用,尤其是在处理文件系统和权限问题时。
构建 Lupine Linux 内核
为了构建 Lupine Linux 内核,我使用了如下命令:
构建根文件系统
构建根文件系统的命令:
sh scripts/image2rootfs.sh nginx alpine ext2
这条命令调用 image2rootfs.sh 脚本,以创建一个基于 alpine Linux 的 nginx 应用
的 ext2 格式的根文件系统。这一步骤是为了确保运行环境具备了运行应用所需
的所有文件和配置。
另外,我也使用了以下 Docker 命令来辅助这个过程:
10 / 16
中国科学院软件研究所 工作周报
该命令启动了一个临时容器,其中/var/run/docker.sock 的挂载允许容器内部的命
在 QEMU 中运行
最后,我在 QEMU 中成功运行了 Lupine-Linux。
制作 rootfs
11 / 16
中国科学院软件研究所 工作周报
3. 学术资料阅读笔记
Lupine Linux
Linux 内核通过其 Kconfig 配置机制包含了大量的专业化设施。总共有 15,953
源代码并将其链接到内核映像中或链接到可以动态加载到运行中内核的模块中,
来包括这些特性。内核配置选项赋予用户选择或启用(例如)对各种硬件(例
如,设备驱动程序)、各种服务(例如,文件系统、网络协议)以及管理最基
本计算资源的算法(例如,内存管理、调度)的支持的权力。
3.1 专门化
3.1.1 应用程序特定选项
12 / 16
中国科学院软件研究所 工作周报
单内核被一种极简主义哲学所驱动,即它们仅包含应用程序需要的功能。虽然
与 Linux 的兼容性通常意味着一些妥协,但可以采用以应用为中心的方法来配
置 Linux 内核。为此,我们将某些配置选项归类为应用特定选项,这些选项可
序清单可以如何以不同的粒度通知内核配置,但将生成此类清单(可以利用静
太流行的协议,以及 35 个文件系统相关的配置选项,这些选项代表了依赖于
(单个)应用程序的系统配置权衡。在更细的粒度上,如果我们假设应用程序
或容器清单详细说明了应用程序将使用哪些系统调用,那么我们可以配置
(及其实现)是否编译进内核二进制文件的配置选项。作为应用特定配置的一
EVENTFD 相关的系统调用。
或 sysctl 功能。此外,由于其传统上作为更高权限安全域的地位,Linux 内核
维护着一个庞大的库。单内核不维护传统的权限分离,但可能直接或间接地使
用这些功能,通过使用需要它的协议或服务(例如,IPsec 的加密例程)。我们
择多达 65 个调试和信息相关的内核配置选项。
3.1.2 不必要的选项
13 / 16
中国科学院软件研究所 工作周报
要,因此可以安全地消除。我们将这些选项分为两组:(1)源于单内核的单进
程性质的选项;(2)源于云中预期的虚拟硬件环境的选项。
单内核不旨在运行多个进程。Linux 内核旨在运行多个进程,因此需要可配置
的同步、调度和资源计账功能。例如,cgroups 和命名空间是限制、记账和隔离
此外,内核通常在比应用程序更独立、更高权限的安全域中运行。因此,内核
包含增强的访问控制系统,例如 SELinux,以及保护从应用程序域到内核域的
是,对性能有严重影响的安全选项也因此变得不必要。例如, KPTI(内核页表
量到系统调用延迟增加了 10 倍。总共,我们由于单一安全域而消除了 12 个配
置选项。
Linux 很适合在多处理器系统上运行。因此,内核包含各种选项,以包括和调
个处理器的标准方法是运行多个单内核。
最后,Linux 包含通过模块动态加载功能的设施。单个应用程序促进了在构建
时包含其所需所有功能的内核的创建。总的来说,我们将消除 89 个配置选项
归因于单内核的单进程—“单”—特性,如图 4 中的“多进程”所示。在第 5
节中,我们将检查这一属性的放宽。
14 / 16
中国科学院软件研究所 工作周报
单内核不旨在用于通用硬件。Linux 的默认配置旨在产生一个通用系统。这样
的系统密切参与管理硬件,具有可配置的功能来执行任务,包括电源管理、热
插拔以及驱动和接口设备。通常旨在云中作为虚拟机运行的单内核,可以将许
多物理硬件管理任务留给底层主机或虚拟机监控程序。Firecracker 的 microVM
内核配置通过消除许多不必要的驱动程序和特定于架构的配置选项(如图 3 所
示了这一点,如图 4 所示。
4. 下周计划
4.1. 学术资料阅读
4.2. 实践环节
5. 参考文献
15 / 16
中国科学院软件研究所 工作周报
setup.md
[4] Unikernel Linux (UKL)
[5] What is KVM? - Red Hat
https://www.redhat.com/en/topics/virtualization/what-is-KVM
[6] https://www.qemu.org/docs/master/about/build-platforms.html
[7] Modifying the configuration, 节选自 Linux Kernel in a Nutshell by Greg Kroah-
Hartman
https://www.oreilly.com/library/view/linux-kernel-in/0596100795/ch04s02.html
16 / 16