Hacker News 中文摘要

RSS订阅

可重启序列 -- Restartable Sequences

文章摘要

重启序列(rseq)是Linux 4.18引入的无锁线程安全编程技术,通过避免锁和原子操作显著提升多核性能。目前仅支持手写汇编实现,但未来可能被广泛采用。已在tcmalloc等少数项目中应用,测试显示在4核树莓派5上使malloc性能提升3倍。随着128-192核处理器普及,这项技术前景广阔。

文章总结

可重启序列(rseq):多核系统编程的隐秘利器

在当今系统编程的前沿领域,Linux 4.18+(2018年引入)的可重启序列(restartable sequences)技术堪称最佳保密武器。这项技术允许开发者创建无需锁或原子操作的线程安全数据结构,并能完美适配多核处理器。

核心优势: 1. 性能飞跃:在作者的不同设备测试中,rseq带来显著加速 - 160美元的树莓派5(4核):malloc速度提升3倍 - 4834美元的System76工作站(128核Ampere Altra):malloc速度提升34倍 - 17628美元的AMD Threadripper Pro(96核):malloc速度提升43倍

  1. 工作原理:

    • 通过rseq()系统调用分配32字节TLS内存
    • 内核在线程调度时自动更新CPU编号
    • 支持定义关键代码段,被中断时自动跳转到指定处理程序
  2. 实际应用案例:

    • 计数器实现对比(96核AMD测试):
      • 互斥锁方案:62,461ms
      • 原子操作:23,412ms
      • rseq方案:仅20ms
    • 链表操作实现:
      • 提供无锁的push/pop操作
      • 通过CPU分片避免缓存行竞争

技术细节: - 需要手写汇编代码(目前仅Linux支持) - 关键数据结构包含: ```c struct rseqcs { uint32t version; uint64t startip; uint64t abortip; // ... };

struct rseq { uint32t cpuidstart; volatile int cpuid; uint64t rseqcs; // ... }; ```

现状与展望: - 目前仅有tcmalloc、jemalloc等少数库采用 - 作者预测未来所有系统编程语言都将原生支持rseq - 随着128-192核处理器普及,这项技术将愈发重要

特别致谢: - 该技术由Google的Paul Turner和Mathieu Desnoyers等人开发 - 测试使用的Ampere ARM处理器展现出优于x86的原子操作性能

完整技术细节和代码示例请查看原文

评论总结

总结评论内容:

  1. 对文章风格的批评(作者:khuey)
  • 主要观点:反对文章开篇"不买高价工作站就会被淘汰"的恐吓式表述
  • 关键引用: "if you don't spend $20,000 on a workstation you're going to be left behind like a dinosaur" "作为拥有比作者更多核心工作站的人,这种说法让我失去阅读兴趣"
  1. 技术解释(作者:GlenTheMachine)
  • 主要观点:解释rseq()的工作原理和优势
  • 关键引用: "通过rseq()可以消除互斥锁和原子操作" "内核通过共享内存进行双向通信,这使得它运行很快"
  1. 补充资源建议(作者:senderista)
  • 主要观点:指出文章未提及librseq库
  • 关键引用: "惊讶文章没有提到由rseq实现者维护的librseq库" "大多数应用场景下不需要编写汇编就能使用rseq"
  1. 价格对比(作者:dan_sbl)
  • 主要观点:指出硬件价格异常波动
  • 关键引用: "文档中512GB内存价格从2,776美元涨到18,299美元" "Love how the 512 GB of RAM...now sells for $18,299"