内存通道

ted*_*ted 7 linux memory memory-management allocation

问题(背景):

我的目标是一台具有四个内存通道和一个 pcie 卡的机器,我希望尽可能快地将数据传输到它。考虑到该卡理论上可以单程传输大约8GB/s(7.88GB/s),这将导致大约15.8GB/s的吞吐量。看看这个我知道我的最大内存传输速率是 12.8GB/s。即使不考虑实际安装的内存,很明显 PCIe 吞吐量超过了一个内存通道的能力。

为了避免这种情况,我想确保我流到设备的内存块最终在与我收到的频道不同的频道上。

  1. 是否可以在 linux 内核中的特定通道上分配内存,如果可以,要使用的接口是什么?
  2. 无论如何要获得有关物理内存映射到不同通道的信息(哪些地址范围/页面帧在哪个通道上)?
  3. 是否有一个接口来请求将页面移动到/分配到特定框架上?
  4. 如何确保页面在被换出/重新定位之前被固定?(假设我必须这样做,magic_allocate_page_on_channel(); get_user_pages(...)我会在短时间内(理论上)再次换出页面,并且可能会被交换到不同的框架get_user_pages