我今天注意到/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-(需要订阅)