我应该如何以及为什么指定 mtrr_gran_size/mtrr_chunk_size?

我应该如何以及为什么指定 mtrr_gran_size/mtrr_chunk_size?

我今天注意到/var/log/dmesg包含几十行有关某个名为gran_size和 的信息*BAD*gran_size,后面跟着看似给我的指令:

[    0.000000] mtrr_cleanup: can not find optimal value
[    0.000000] please specify mtrr_gran_size/mtrr_chunk_size

我需要按照说明操作吗?我应该怎么做?

答案1

MTRR 代表内存类型范围寄存器,这是一种在系统中划分和管理内存资源的新方法。由于内存大小越来越大,处理器中引入了此功能。必须有一种方法可以更有效地分配、寻址和使用内存。

MTRR 的主要功能是映射系统中 PCI 或 AGP 组件的位置,以便软件和驱动程序能够快速有效地访问它们。

(从Gentoo 维基

看完之后解决 Linux MTRR 问题您看到的错误似乎是在mtrr 消毒剂无法从多个内存布局选项中进行选择。它应该在错误消息旁边打印一个可能的选项列表。要使该消息消失,您需要指定类似

enable_mtrr_cleanup mtrr_spare_reg_nr=1 mtrr_gran_size=32M mtrr_chunk_size=128M

在内核启动参数中(实际值来自清理器提出的选项之一)。

文章作者声称

现在 24MiB 的 RAM 已经用完了,但我的 3d 工作负载(基本上是 webgl 内容和谷歌地球内隐藏的飞行模拟器)都以明显更好的帧速率运行。

这让我非常感兴趣...需要检查dmesg我所有的机器。

答案2

根据 2017 年 1 月更新的 RHEL6 的 [Redhat 知识库][1],“请指定 mtrr_gran_size/mtrr_chunk_size”方法:

  • 这些消息不是问题,只是警告。可以忽略它们。
  • 将 disable_mtrr_cleanup disable_mtrr_trim 添加到 /boot/grub/grub.conf 中的内核参数将禁用引发这些错误的代码路径,并可防止它们出现在系统中。

我当然知道 Redhat 不是 Ubuntu,但总的来说它们运行的​​是相同的内核,因此如果 Ubuntu 的内核不同,我会感到非常惊讶。此答案是作为“第二种意见”提供的。

[1]:https://access.redhat.com/solutions/2852191-(需要订阅)

相关内容