发现一个蛮有意思的项目,使用带垃圾回收式堆内存管理的 Go 实现的操作系统内核:
Biscuit 是 MIT 编写的一个 x86 上的宏内核架构类 POSIX 子集操作系统。用于研究带垃圾回收机制的高级语言实现内核所带来的性能 trade off。
Biscuit 实现了以下功能以获得高应用程序效率:
多核心
内核级线程
并发日志文件系统,延迟提交,成组提交
虚拟内存,以实现 copy-on-write 和懒映射的匿名/文件页
TCP/IP 栈
AHCI SATA 磁盘驱动
Intel 10Gb NIC 驱动
Biscuit 同时包含了一个 bootloader,一个不完全的 libc ("litc"),以及一些用户态程序。
MIT 在其之上做了性能测试实验,压力测试了 C 内核和 Go 内核下的相同 system call、page fault、context switch,结果是 Go 版本的内核比 C 版本慢 5%~15%。
在一个包含 nginx 和 redis 的 benchmark 中,Biscuit 花在高级语言功能(主要是 GC 和栈扩展检查)上的时间最大达到 13%。nginx 中最长单个 GC 相关的暂停时间达到 115ms。nginx 中观测到最长单个请求中的暂停时间和为 600ms。
Website:https://pdos.csail.mit.edu/projects/biscuit.html
Paper:https://pdos.csail.mit.edu/papers/biscuit.pdf
Code:https://github.com/mit-pdos/biscuit