io_uring比mmap更快

io_uring比mmap更快

Hacker News 摘要

原标题:io_uring is faster than mmap

文章标题为《内存很慢,磁盘很快 - 第二部分》。文章主要论述了一个颇具争议的观点:直接从磁盘获取数据实际上比从内存缓存读取数据更快。作者指出,随着硬件的发展,磁盘带宽呈指数增长,而内存的访问延迟却已经停滞,因此以往的计算机科学教条已经不再完全适用。

在实验设置中,作者使用一个进行整数计数的小程序(称为“counting 10s”)来衡量性能。测试环境是一个配有AMD EPYC 7551P处理器和两个1.92TB的Samsung PM983a PCIe 3.0 SSD的服务器,搭载96GB的DDR4内存。文章详细描述了如何通过内存带宽和磁盘带宽来计算性能上限,并分别进行实验。

初始实验中,作者从磁盘读取数据,结果显示每秒处理了0.61GB的数据,而当数据被缓存进内存后,性能提升至3.71GB/s。然而,这一速度仍远未达到内存带宽限制。

通过分析,作者指出,存在计算瓶颈并且使用了非向量化指令,导致性能未达到预期。随后,作者通过对循环展开和向量化优化代码,成功将处理速度提升至5.51GB/s。当使用传统的磁盘IO方法(如read()直接读取到预分配的缓冲区)时,读取速度达到了5.81GB/s,表明磁盘的直接读取性能优于内存缓存。

作者进一步探讨了内存和磁盘IO的本质差异,说明传统的mmap()会在访问过程中引入额外的延迟,而其直接IO方法则更适合现代硬件,能更好地利用带宽并隐藏延迟。在许多情况下,内存的访问模式及其带来的延迟是导致性能瓶颈的罪魁祸首。

文章结尾,作者呼吁读者质疑传统的运作方式,建议在编写高效代码时,应该考虑采用更灵活的访问策略来提升性能。并指出,伴随硬件的进步,仅仅依赖内存并不总能获得最佳的性能,尤其是在数据量大的情况下,反而可能会让性能下降。


原文:https://www.bitflux.ai/blog/memory-is-slow-part2/

评论:https://news.ycombinator.com/item?id=45132710

Report Page