harrymc のおかげで、実際に /proc/mtrr を書き換えることができることがわかりました。以下を /etc/rc.local に入れ、再起動したところ、MTRR テーブルは正しかった。
echo "disable=7" > /proc/mtrr
echo "disable=6" > /proc/mtrr
echo "disable=5" > /proc/mtrr
echo "disable=4" > /proc/mtrr
echo "disable=3" > /proc/mtrr
echo "disable=2" > /proc/mtrr
echo "disable=1" > /proc/mtrr
echo "disable=0" > /proc/mtrr
echo "base=0x000000000 size=0x40000000 type=write-back" > /proc/mtrr
echo "base=0x03f500000 size=0x00100000 type=uncachable" > /proc/mtrr
echo "base=0x03f600000 size=0x00200000 type=uncachable" > /proc/mtrr
echo "base=0x03f800000 size=0x00800000 type=write-back" > /proc/mtrr
echo "base=0x040000000 size=0x10000000 type=write-combining" > /proc/mtrr
また、カーネル開発に携わる何人かと話したところ、CONFIG_MTRR_SANITIZER
という情報がありました。 過去数個のカーネルで壊れていたため、過去に他のカーネルで機能していた理由.
Arch Linux フォーラムでのあなた自身の質問に対する回答からの引用:
<ブロック引用>dmesg から、i915/drmgraphics の初期化中に mtrr が不足していることが簡単にわかります。私はこの問題について特別な経験はありませんが、ここに私の提案があります:
<オール>/proc/mtrr を見ると、ATOM CPU には 8 つの MTRR しかなく、本当に使い果たされています。しかし、記憶がそのような小さな断片に分割される方法は不可解です。一般に、このような問題は次の原因で発生する可能性があります:
- BIOS - デバイスのメモリ割り当てを引き起こすパラメータを探します。
- CPU とメモリを共有していて、BIOS によってメモリの真ん中に残酷に割り当てられた可能性のあるグラフィックス カード。
- グラフィック カード ドライバ - 最新バージョンを検索してください。
- 誤って構成されたカーネル。
私が見ることができる最大の謎は、/proc/mtrr が 8GB を持っていると言っているということです。しかし、/proc/cpuinfo の「flags」エントリには「lm」が含まれていません。これは Arch64 FAQ によると、プロセッサーが x86_64 互換であるために必要です。 FAQ にはさらに次のように書かれています:
<ブロック引用>Arch32 はデフォルトで 3GB を超える RAM をサポートしていないことに注意してください。それ以上の RAM がある場合は、Arch64 に切り替える必要があります。
そのため、Arch32 と 8GB の RAM を使用しているように見えますが、これはドキュメントと矛盾しています。
このパズルに光を当てていただけませんか?