Bringing restartable sequences out of the niche
8 months ago
- #concurrency
- #kernel
- #performance
- 可重启序列(rseq)通过允许关键代码段在中断时重新执行,帮助用户空间应用程序高效实现无锁算法。
- 内核通过rseq()系统调用设置的共享内存区域,向用户空间传递CPU和NUMA节点信息,从而优化了sched_getcpu()等功能。
- 最近对时间片扩展(允许关键代码段线程请求延长CPU时间)的研究,使可重启序列获得更多关注。
- Thomas Gleixner发现可重启序列实现中的性能问题,如不必要的位操作和过时功能,从而推动了优化工作。
- Gleixner的改进包括用简单的布尔标志替代复杂的事件跟踪,并移除冗余的用户空间内存访问,提升了性能。
- 内核现在以不同方式处理可重启序列中的系统调用和中断,这可能导致误用该功能的应用程序出现问题。
- 调试版内核强制执行严格规则(如终止在关键代码段内发起系统调用的进程),以确保可重启序列的正确使用。
- 随着Gleixner持续审查和改进可重启序列代码,预计将会有更多优化和修复。