OS 和 Arch 研究的 Gap 是什么?
- Arch 的研究学者往往忽视 OS 带来的关键开销
- OS 的研究学者没有充分地考虑底层硬件
- 将二者紧密结合起来对提高系统的性能和能效至关重要
现状
对于 Arch:把 OS 当作是黑盒
- 几乎只使用纯用户态的 benchmark
- 不计算用户态与内核态的开销
- 不讨论硬件设计对 OS 的影响
对于 OS:“on commodity hardware”
什么导致了 Gap?
缺少 OS 执行重要性的证据(关注度不够)
缺少合适的模拟环境
- 模拟器不能跑真实 OS
- X86 模拟器不成熟、难开发
缺少合适的 benchmark
- 没有合适的 benchmark 能够为 arch 研究者用来分析 OS 的行为和影响
历史上对硬件缺陷的容忍
- 长期以来,人们对硬件特性的缺失是可以接受的,因此 OS 研究者很少向硬件设计提出要求
- 因此 arch 研究者也很少关注 OS 的需求和 OS 的行为
Arch 应该采用的研究原则
P1 : Facilitate resource multiplexing.
- 促进资源的复用能够让 OS 的设计和实现上拥有更大的自由度
- 一个反例是 Intel 的 Single-chip Cloud Computer1 (SCC),他们提供了一个 8 KB 的 Scratchpad 来快速交换 inter-core 的消息,但是内核切换需要(≈10µs),8KB 的消息复制大概只需要 10ns
P2: Keep mechanisms orthogonal.
- 不同的机制尽可能正交,将功能的组合和配置交给内核
- 一个反例是 AMD-V 虚拟化扩展的 tagged TLB 功能,这个功能自带自动 flush TLB 的功能,导致非 VM 上下文切换也会 flush TLB
P3: Avoid over-abstraction.
- 硬件层面不要做过多的抽象
- 一个反例是 Intel 的超线程功能,超线程隐藏了一个核内两个线程的特性(为了向前兼容),导致 OS 无法为核内的两个线程采用快速的核间通信技术
P4: Stay independent of kernel architecture.
- 不要过多假设内核的架构
- 尽管 Linux 内核大行其道(13 年并没有今天这么夸张),但保持 kernel-independent 的设计是好的
总结
作为 OS 研究者,不应该认为某些问题“可以用合适的硬件解决”。这篇文章虽然大篇幅在讲 arch 研究应该注重软件设计,但 OS 研究也应该注意不能只专注于当前的硬件限制下如何提升,毕竟一个复杂的软件虚拟化设计可以被硬件实现轻松击败。OS 研究还更应该关注如何通过硬件设计来提升软件能力,甚至设计自己的硬件。毕竟,“一个认真对待自己软件的人应该设计自己的硬件”
Footnotes
-
J. Howard et al. A 48-core IA-32 message-passing processor with DVFS in 45nm CMOS. In Proc. ISSCC, Feb. 2010. ↩