多CPU机器上的dentry/inode缓存/内存分配器配置

多CPU机器上的dentry/inode缓存/内存分配器配置

在对 CPLEX 进行性能基准测试时,我遇到了一个奇怪的问题。详细信息发布在博客中:https://community.ibm.com/community/user/ai-datascience/blogs/xavier-nodet1/2021/07/08/performance-considerations-for-cplex-on-multiproce。虽然只有两页左右,但我不想在这里复制,所以以下是重点内容:

在多 CPU 机器上,我们需要担心 NUMA 访问时间。如果代码的缓存命中率较低,并且内存分配在运行进程的 CPU 的内存组中,则代码的运行速度将明显快于内存分配在其他内存组中的情况。当然,分配器更喜欢在同一个存储体中进行分配,但如果该存储体被完全使用,那么分配器将转到另一个存储体。即使银行仅由缓存的内容使用。现在,无论出于何种原因,dentry/inode 缓存都位于 CPU0 的存储体中。因此,如果我的代码碰巧被调度到 CPU0 中的某个核心上,那么它的性能将非常不同,具体取决于缓存占用的是少量还是大量的bank0。不利于基准测试...

我可以强制删除缓存,但这也有缺点。另外,它甚至可能还不够,因为有时我会读取大文件,因此在我开始处理数据之前缓存可能会填满bank0。

所以...我想知道是否可以告诉分配器在从其他存储体分配内存之前更喜欢删除缓存?

PS:在引用的博客中,我确实提到 vfs_cache_Pressure 可以用来缓解这个问题,但最近我发现它也不是灵丹妙药。

相关内容