页面缓存堆积并在其他节点上强制分配内存

Posted

技术标签:

【中文标题】页面缓存堆积并在其他节点上强制分配内存【英文标题】:Page cache pile up and force memory allocation on other nodes 【发布时间】:2014-07-02 04:06:32 【问题描述】:

我目前正在使用 NUMA 机器。我遇到了一个问题,当我执行磁盘 I/O 时,缓存的页面开始堆积在当前节点(节点 0)中。而当我进一步malloc新的记忆时,他们去了另一个节点(节点1),导致性能不佳。

我正在考虑两种可能的解决方案,但不知道它们是否有效。

(1) 在节点 0 上使用 numa_alloc_onnode()。但我不确定这是否会覆盖节点 0 中的页面缓存或仍会转到节点 1。

(2) 缓存节点 0 开始堆积时丢弃(节点 1 中的缓存不应该丢弃,因为它们很有用)。但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

您应该通过mmap 进行磁盘 IO。首先,因为如果您要从 NUMA 系统中填充 RAM,您可能会执行大量 IO,这样做会提高性能,其次,这将使您能够控制操作系统在哪里进行分配,(甚至移动之后的页面)使用numa library。

如果您不想在运行 mmap 之前将线程移动到正确的位置,使用 numactl 和交错策略运行您的进程也可能有效。

【讨论】:

以上是关于页面缓存堆积并在其他节点上强制分配内存的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用动态内存分配创建节点指针数组

页面迁移从CMA(连续内存分配器)区域失败

怎样才能强制 Rust 获得分配的内存的所有权,而不是通过其安全方法分配的内存?

Linux 内核 内存管理内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )

为外部 dll 上的缓冲区分配内存并在主应用程序上使用它是不是安全?

了解内存分配