Linux 4.18 引入了rseq(2)系统调用。我在SO上发现只有一个问题提到了rseq,而且网上关于它的信息相对较少,所以我决定问一下。什么是可重新启动序列以及程序员如何使用它们?
我必须寻找restartable sequences: fast user-space percpu critical sections才能获得任何有意义的结果。我能够找到向内核添加相关功能的提交。进一步的研究让我看到了2013 年的演讲,我认为这是第一次介绍这个概念。许多工作是由 EfficiOS 公司的团队完成的。他们描述了向 Linux 内核贡献此功能的意图。
看起来这个功能很少有人知道,但显然它是用来优化TCMalloc 分配器的性能的。一般来说,看起来是某种并发优化。
尽管列出的来源提供了背景信息,但尚未对 SO 上提供的 RSEQ 进行解释。了解它们在实践中的其他用途以及如何使用会很有用。
假设我正在创建一个 C++ 作业系统。其中一部分是无锁多生产者单消费者队列。如何将rseq(2)系统调用的使用引入到我的代码中以潜在地提高其性能?
class mpsc_list_node
{
mpsc_list_node* _next;
template<typename T>
requires std::derived_from<T, mpsc_list_node>
friend class mpsc_list;
};
template<typename T>
requires std::derived_from<T, mpsc_list_node>
class mpsc_list
{
private:
std::atomic<T*> head{ nullptr };
private: …Run Code Online (Sandbox Code Playgroud)