"缓存线对齐"是什么意思?

gue*_*tli 4 c postgresql performance memory-management

我读了这篇关于PostgreSQL性能的文章:http://akorotkov.github.io/blog/2016/05/09/scalability-towards-millions-tps/

一个优化是"cacheline aligment".

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

Lau*_*lbe 10

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

彼此更接近的数据可能最终位于同一缓存行上.

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

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

这仅在程序并行执行并访问共享内存区域时才有意义,无论是通过多线程还是通过多处理共享内存.在这种情况下,您可以通过确保不同执行线程经常访问的数据在内存中的位置不足以使它们最终位于同一缓存行中而受益.
典型的方法是在数据结构的末尾添加"死"填充空间.

我发现了一些你可能想要阅读的有关这个主题的有趣文章:
http://www.drdobbs.com/parallel/maximize-locality-minimize-contention/208200273?
pgno = 3 http://www.drdobbs.com/ tools/memory-constraints-on-thread-performance/231300494
http://www.drdobbs.com/parallel/eliminate-false-sharing/217500206