由于错误的 mtrr 设置导致图形性能不佳

elf*_*rma 7 xorg kernel intel-graphics

我在配备 8GB RAM 的 Dell LAtitude E4310 上使用最新内核

2.6.38-10-generic #44-Ubuntu SMP Thu Jun 2 21:32:22 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

在启动时,我收到以下消息

[drm] MTRR allocation failed.  Graphics performance may suffer.
Run Code Online (Sandbox Code Playgroud)

确实我/proc/mtrr看起来很奇怪

reg00: base=0x000000000 (    0MB), size= 8192MB, count=1: write-back
reg01: base=0x200000000 ( 8192MB), size=  512MB, count=1: write-back
reg02: base=0x0e0000000 ( 3584MB), size=  512MB, count=1: uncachable
reg03: base=0x0dc000000 ( 3520MB), size=   64MB, count=1: uncachable
reg04: base=0x0db400000 ( 3508MB), size=    4MB, count=1: uncachable
reg05: base=0x21c000000 ( 8640MB), size=   64MB, count=1: uncachable
Run Code Online (Sandbox Code Playgroud)

我试过了,mtrr-uncover但它不起作用:

./mtrr-uncover 
Initial MTRR configuration:
 0  0x000000000-0x1ffffffff write-back
         4  0x0db400000-0x0db7fffff uncachable
         3  0x0dc000000-0x0dfffffff uncachable
         2  0x0e0000000-0x0ffffffff uncachable
 1  0x200000000-0x21fffffff write-back
         5  0x21c000000-0x21fffffff uncachable
./mtrr-uncover: 9 MTRRs needed but only 8 in architecture.
Run Code Online (Sandbox Code Playgroud)

有人知道如何在我的架构中正确设置 mtrr 吗?

这里的相关输出 lspci -v

00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02) (prog-if 00 [VGA controller])
    Subsystem: Dell Device 0410
    Flags: bus master, fast devsel, latency 0, IRQ 42
    Memory at f0000000 (64-bit, non-prefetchable) [size=4M]
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    I/O ports at 60b0 [size=8]
    Expansion ROM at <unassigned> [disabled]
    Capabilities: <access denied>
    Kernel driver in use: i915
    Kernel modules: i915
Run Code Online (Sandbox Code Playgroud)

小智 5

对此有一个简单的解决方案。只需使用内核引导参数enable_mtrr_cleanup

编辑/etc/default/grub配置文件:

$ sudo nano /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

找到包含以下内容的行GRUB_CMDLINE_LINUX_DEFAULT,您可能会看到这些默认参数:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Run Code Online (Sandbox Code Playgroud)

所以要使用enable_mtrr_cleanup你会像这样添加它:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash enable_mtrr_cleanup"
Run Code Online (Sandbox Code Playgroud)

然后您必须使用以下命令更新您的 grub 配置:

$ sudo update-grub2
Run Code Online (Sandbox Code Playgroud)

并重新启动:

$ sudo reboot
Run Code Online (Sandbox Code Playgroud)

然后消息将消失,您将看到系统已找到正确的 MTRR 值。