【问题标题】:Where is memory interleaving and memory split up into ranks happening in Linux kernel?Linux 内核中发生的内存交错和内存划分在哪里?
【发布时间】:2013-11-04 01:54:59
【问题描述】:

我正在编写有关 Linux 内核中 sysfs 虚拟文件系统的课程作业。作为设置 sysfs 虚拟文件系统的一部分,Linux 内核将物理内存组织成块,并进一步组织到此目录 sys/devices/system/memory 中的部分。在该目录中,内存块将表示为 memory0、meomory1、memory2 等。

在挖掘 Linux 内核之后,我发现内存被分成 128MB 的块,然后进一步分成内存部分,并在此处的 C 文件中找到了执行此操作的代码:Memory.c。在上面的 C 文件中,方法 memory_dev_init() 具有将整个内存块分割并划分为部分的逻辑(或者这就是我所理解的:))。根据我的教授的说法,Linux 中的内存被分成等级,等级包含交错的内存地址,如下所示:

   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] ...

作为我作业的一部分,我想将排名格式更改为这样,以便我可以获得连续的内存块:

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

所以我只想知道这种内存交错到底发生在哪里,以及现有的排名发生在当前的 Linux 内核中。谁能指出我正确的方向?

【问题讨论】:

    标签: memory memory-management linux-kernel kernel sysfs


    【解决方案1】:

    我不太确定,因为我看不到这个问题的任何实际用途,它确实是一种学术研究......你想要实现的目标可以通过完全禁用内存交错来实现。我想在你禁用交错之后,你也会在 sysfs 中看到正确的“图片”。

    换句话说——不需要编码,只需更改配置。

    【讨论】:

    • 嗨安东!感谢您的回答。您能否让我知道我可以在哪里更改配置?我的意思是它是否涉及更改 BIOS 或硬件中的设置?我实际上是通过在 Qemu 上加载一个 linux 内核来做到这一点的。那么你能告诉我如何更改linux内核中的配置吗?还有无论如何可以查看我的系统中发生交错的位置吗?如果是这样,您能告诉我如何在终端中看到它吗?
    【解决方案2】:

    查看 BIOS 中的内存交错设置。这是post,它描述了如何在几个平台上执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2020-10-09
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多