Hacker News 中文摘要

RSS订阅

I/O不再是性能瓶颈了吗?(2022) -- I/O is no longer the bottleneck? (2022)

文章摘要

文章指出,随着顺序读取速度大幅提升(冷缓存1.6GB/s,热缓存12.8GB/s),而CPU性能停滞,I/O已不再是编程面试题(如统计词频)的瓶颈。作者测试发现,即使用优化C代码处理425MB文件,速度仅278MB/s,远低于理论读取速度,说明CPU处理效率成为新瓶颈。

文章总结

标题:I/O不再是性能瓶颈?

2022年11月27日,Ben Hoyt发表了一篇博文,指出与普遍认知相反,在典型的编程面试问题(如统计文本流中的单词频率)中,I/O操作已不再是性能瓶颈。随着顺序读取速度的大幅提升和CPU性能增长的停滞,这一观点引发了技术社区的讨论。

通过实测验证,作者在冷缓存环境下实现了1.6 GB/s的顺序读取速度,热缓存环境下更是达到12.8 GB/s。但令人意外的是,即使用单线程处理,单词频率统计程序也难以达到理论I/O速度。

在优化实践中,作者发现GCC 12编译的C语言版本在425MB文本(100份《圣经》副本)上仅实现278 MB/s的处理速度。通过分析发现,代码中的分支语句(特别是大小写转换逻辑)阻碍了编译器自动向量化。将大小写转换移出循环后,性能提升至330 MB/s,但仍与理论速度相差5倍。

作为对比测试,Linux自带的wc -w工具表现更差(245.2 MB/s),这与其复杂的空白字符处理逻辑有关。为突破性能瓶颈,作者转向AVX2指令集进行手动向量化优化,通过以下关键技术: 1. 使用VPCMPEQB指令批量比较空白字符 2. 采用PMOVMSKB指令生成位掩码 3. 结合FFS指令进行位操作遍历

最终实现的AVX2优化版本达到1.45 GB/s处理速度(热缓存),约为磁盘顺序读取速度的11%。即使在冷缓存环境下,CPU计算时间仍超过系统I/O时间,这一结果验证了"磁盘速度已赶超CPU处理能力"的论点。

作者已将完整代码开源在GitHub仓库,并欢迎开发者贡献更优的位操作方案。这项实验表明,现代存储设备的性能飞跃已改变传统优化范式,但充分释放硬件潜力仍需深入理解向量化编程技术。

(注:原文中关于具体代码实现、编译参数设置等细节内容已适当精简,保留核心论证逻辑和技术要点)

评论总结

以下是评论内容的总结:

  1. 关于性能瓶颈的讨论:
  • 现代CPU的性能瓶颈在于单核数据处理能力(约6GB/s,苹果M芯片约20GB/s)
  • "内存带宽的广告数据是总和,单核仍受限"(eliasdejong)
  • "OLAP数据库优化中,内存速度常是瓶颈"(leentee)
  1. 关于存储技术的观点:
  • NVMe SSD的出现改变了内存观念
  • "曾开玩笑说现在有2TB内存,结果GPU服务器真实现了"(kevmo314)
  • 提出新型架构设想:CPU←→缓存←→非易失性存储直接交互(gary_0)
  1. 关于软件性能的看法:
  • 硬件进步但部分软件体验反而下降
  • "Windows等软件感觉比过去更卡顿"(ThreatSystems)
  • 关键在延迟vs吞吐量,多数软件因忽视延迟而慢(dpc_01234)
  1. 优化方案建议:
  • 零拷贝格式可突破单核带宽限制
  • "Lite³序列化格式在某些基准测试比simdjson快120倍"(eliasdejong)
  • 推荐阅读加速技巧的补充说明(akoboldfrying)
  1. 其他:
  • 提供先前相关讨论链接(wmf)
  • 幽默回应文章结尾(atrooo)