AnyCall:快速且灵活的系统调用聚合
密码学与安全
2022-02-01 v1 操作系统
编程语言
摘要
操作系统依赖系统调用来实现隔离进程与内核及其他进程间的受控通信。每次系统调用都包含从非特权用户模式到特权内核模式的处理器模式切换。尽管处理器模式切换是保证系统完整性的基本隔离机制,但由于会使部分处理器状态失效,它们带来了直接与间接的性能开销。近年来,高性能网络与存储硬件已使得用户/内核切换开销成为 IO 密集型应用的瓶颈。更糟的是,现代处理器中的安全漏洞(例如 Meltdown)促使内核采取进一步增加切换开销的缓解措施。为将系统调用与用户/内核切换解耦,我们提出 AnyCall,其使用内核内编译器在内核模式下执行经安全检查的用户字节码。这允许仅通过单次用户/内核切换即可实现与错误检查和处理逻辑交织的极快系统调用。我们基于 Linux 内核的 eBPF 子系统实现了 AnyCall。我们的评估表明,使用 AnyCall 时系统调用突发可快达 55 倍,且即便仅有极小部分代码由 AnyCall 运行,真实应用也可加速 24%。
引用
@article{arxiv.2201.13160,
title = {AnyCall: Fast and Flexible System-Call Aggregation},
author = {Luis Gerhorst and Benedict Herzog and Stefan Reif and Wolfgang Schröder-Preikschat and Timo Hönig},
journal= {arXiv preprint arXiv:2201.13160},
year = {2022}
}