C 什么是;“缓存线对齐”;什么意思?

C 什么是;“缓存线对齐”;什么意思?,c,performance,postgresql,memory-management,C,Performance,Postgresql,Memory Management,我读了这篇关于PostgreSQL性能的文章: 一个优化是“缓存线对齐” 这是什么?它有什么帮助,以及如何在代码中应用它?CPU缓存以称为的块的形式将数据从主内存传输到主内存;这个的典型大小似乎是64字节 彼此距离较近的数据可能最终位于同一缓存线上 如果不同的内核需要这些数据,系统必须努力使驻留在内核缓存中的副本之间的数据保持一致。本质上,当一个线程修改数据时,另一个线程被锁阻止访问数据 您参考的文章讨论了PostgreSQL在共享内存中的数据结构中发现的一个此类问题,该数据结构经常由不同的进程

我读了这篇关于PostgreSQL性能的文章:

一个优化是“缓存线对齐”


这是什么?它有什么帮助,以及如何在代码中应用它?

CPU缓存以称为的块的形式将数据从主内存传输到主内存;这个的典型大小似乎是64字节

彼此距离较近的数据可能最终位于同一缓存线上

如果不同的内核需要这些数据,系统必须努力使驻留在内核缓存中的副本之间的数据保持一致。本质上,当一个线程修改数据时,另一个线程被锁阻止访问数据

您参考的文章讨论了PostgreSQL在共享内存中的数据结构中发现的一个此类问题,该数据结构经常由不同的进程更新。通过在结构中引入填充将其膨胀到64字节,可以保证没有两个这样的数据结构最终位于同一缓存线中,并且访问它们的进程不会被阻塞,这是绝对必要的

这仅在程序并行执行并通过多线程或使用共享内存进行多处理来访问共享内存区域时才相关。在这种情况下,您可以通过确保不同执行线程经常访问的数据在内存中的位置不够近,从而使它们最终位于同一缓存线中而受益。
典型的方法是在数据结构的末尾添加“死”填充空间

我发现了一些关于这个主题的有趣文章,您可能想读:



该页面链接的帖子很好地解释了发生的事情:@paddy是的,喜欢的帖子解释了缓存线对齐有助于提高性能,但我认为它没有解释它是什么以及它是如何工作的。问题是,未对齐的数据结构将跨越更多的缓存插槽,并将增加总线通信量。我上一次的C编程是在十多年前完成的,但您的答案很好地解释了这一点。谢谢:-)值得注意的是,参考文章中显示的极端性能差异是在多套接字服务器上,在多套接字服务器上,维护核心之间缓存一致性的成本特别高