【问题标题】:How to use contiguous memory in linux kernel?如何在linux内核中使用连续内存?
【发布时间】:2013-10-26 16:53:15
【问题描述】:

我发现物理内存被分成如下等级(Memory Interleaving):

   rank0: [0-512KB] [2048KB-2560KB] [4096KB-4608KB] ...
   rank1: [512KB-1024KB] [2560KB-3072KB] [4608KB-5120KB] ... 
   rank2: [1024KB-1536KB] [3072KB-3584KB] [5120KB-...
   rank3: [1536KB-2048KB] [3584KB-4096KB] ...

Linux 内核正在获取这些交错内存。所以,linux内核看到的物理内存是不连续的。如果我对此有误,请纠正我。

我一直在查看我的课程作业的 linux 内核源代码。

在创建 sysfs (/sys/devices/system/memory) 时,Linux 内核会创建这些可用物理内存的特定大小(在我的系统上为 128 MB)的部分(memory0、memory1、...)。使用这些目录中的状态文件,我可以使部分离线/在线。 (Memory Hotplug)

因此,这些部分所代表的物理内存是分散的。因此,如果我使任何部分脱机,这将使分散的内存指向不可用。

我想让这些部分引用连续的内存。像这样:

   memory0 : 0-128 MB
   memory1 : 128-256 MB
   ....

因此,当我使某些部分脱机时,与该部分相关的连续物理内存将变得不可用。那么,我可以让 linux 内核将物理内存视为连续的而不是交错的吗?

如果我对此有任何错误,请纠正我。

谢谢。

【问题讨论】:

  • 谁能帮我解决这个问题??
  • 您的处理器架构是什么?你说记忆被分成等级。实际上,这在很大程度上取决于处理器内存管理硬件的工作方式。
  • 很抱歉回答迟了。我忙于期中考试。我指的是不特定于我的机器的通用架构。对困惑感到抱歉。但是对于这个讨论假设系统支持这种交错,那么有什么方法可以禁用它?
  • @SunEric 我不知道 Rajesh Golani 运行哪个系统。所以我不知道该怎么做。

标签: memory-management linux-kernel


【解决方案1】:

我认为您所看到的是由于 NUMA 下内存分配的交错选项。 有一个很好的paper 讲了Linux下的NUMA。

如果没有您正在使用的硬件的详细信息,很难猜测如何禁用内存交错选项。您还应该深入研究numactl 实用程序,看看它是否有一些可以在正在运行的系统上使用的设置。还有一些博客文章提到更改 BIOS 设置以控制内存交错选项,您可能必须这样做。 (目前没有资格提供 2 个链接:\ 但是在 BIOS 中禁用内存交错的简单 Google 搜索应该会为您提供一些有用的信息)

【讨论】:

  • 嗨。谢谢回复。在发布这个问题之前,我搜索了这个。我还发现 BIOS 中有更改内存交错的选项,但我无法在我的系统上找到这些信息。那么,这是否意味着我的系统不支持内存交错?我认为 NUMA 与内存交错不同。 NUMA 将内存块分布在多个处理器上。在我的问题中,我不关心多个处理器。我对跨 DIMM 列发生的内存交错感兴趣。
  • DIMM 之间的内存交错需要通过系统上的内存控制器进行控制。 AFAIK 禁用它的唯一方法是寻找 BIOS 中的设置或通过现代系统上的 EFI shell。你用的是什么系统?
猜你喜欢
  • 2013-11-14
  • 2012-07-23
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 2019-10-23
相关资源
最近更新 更多