linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* mtrr_cleanup: can not find optimal value
@ 2011-06-03  5:03 Michael Reinelt
  2011-06-03  5:26 ` Yinghai Lu
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Reinelt @ 2011-06-03  5:03 UTC (permalink / raw)
  To: lkml

Hi there,

I'm suffering bad graphic performance on my notebook, and when sorting things out, I found the following in dmesg:

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

and later:

mtrr: type mismatch for e0000000,10000000 old: write-back new: write-combining
[drm] MTRR allocation failed.  Graphics performance may suffer.

which is probably due to the fact that MTRR's can't be cleaned (at least I suspect so)

The notebook is a Fujitsu Liefbook E8410, Intel Core2 Duo CPU T7700 @ 2.40GHz, and 8 GB RAM, graphics is Intel Mobile 
GM965/GL960, kernel is a vanilla 2.6.39 X86_64

When I remove 1 RAM module (using 4GB only) the messages above disappear. Unfortunately, graphic performance is still 
bad, but that's another story. I want to fix the MTRR issue anyway.

I think the MTRR cleaner is unable to find a really optimal combination, and wants me to specify one of the sub-optimal 
configs. But I have no idea how to do that, and found nothing in the net. I found some references to a "mtrr-uncover" 
program, but I cannot compile it (probably because its too old). So I'm asking for some advice how to manually tune the 
MTRR's.

When running with 4G, the relevant parts of dmesg are:

MTRR default type: uncachable
MTRR fixed ranges enabled:
   00000-9FFFF write-back
   A0000-BFFFF uncachable
   C0000-CFFFF write-protect
   D0000-DFFFF uncachable
   E0000-FFFFF write-protect
MTRR variable ranges enabled:
   0 base 0D0000000 mask FF0000000 uncachable
   1 base 0E0000000 mask FE0000000 uncachable
   2 base 000000000 mask F00000000 write-back
   3 base 100000000 mask FE0000000 write-back
   4 base 120000000 mask FF0000000 write-back
   5 base 0CF700000 mask FFFF00000 uncachable
   6 base 0CF800000 mask FFF800000 uncachable
   7 disabled
x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
original variable MTRRs
reg 0, base: 3328MB, range: 256MB, type UC
reg 1, base: 3584MB, range: 512MB, type UC
reg 2, base: 0GB, range: 4GB, type WB
reg 3, base: 4GB, range: 512MB, type WB
reg 4, base: 4608MB, range: 256MB, type WB
reg 5, base: 3319MB, range: 1MB, type UC
reg 6, base: 3320MB, range: 8MB, type UC
total RAM covered: 4087M
Found optimal setting for mtrr clean up
  gran_size: 64K 	chunk_size: 16M 	num_reg: 7  	lose cover RAM: 0G
New variable MTRRs
reg 0, base: 0GB, range: 2GB, type WB
reg 1, base: 2GB, range: 1GB, type WB
reg 2, base: 3GB, range: 256MB, type WB
reg 3, base: 3319MB, range: 1MB, type UC
reg 4, base: 3320MB, range: 8MB, type UC
reg 5, base: 4GB, range: 512MB, type WB
reg 6, base: 4608MB, range: 256MB, type WB
e820 update range: 00000000cf700000 - 0000000100000000 (usable) ==> (reserved)



and with 8GB:

MTRR default type: uncachable
MTRR fixed ranges enabled:
   00000-9FFFF write-back
   A0000-BFFFF uncachable
   C0000-CFFFF write-protect
   D0000-DFFFF uncachable
   E0000-FFFFF write-protect
MTRR variable ranges enabled:
   0 base 0D0000000 mask FF0000000 uncachable
   1 base 0E0000000 mask FE0000000 uncachable
   2 base 000000000 mask E00000000 write-back
   3 base 200000000 mask FE0000000 write-back
   4 base 220000000 mask FF0000000 write-back
   5 base 0CF700000 mask FFFF00000 uncachable
   6 base 0CF800000 mask FFF800000 uncachable
   7 disabled
x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
original variable MTRRs
reg 0, base: 3328MB, range: 256MB, type UC
reg 1, base: 3584MB, range: 512MB, type UC
reg 2, base: 0GB, range: 8GB, type WB
reg 3, base: 8GB, range: 512MB, type WB
reg 4, base: 8704MB, range: 256MB, type WB
reg 5, base: 3319MB, range: 1MB, type UC
reg 6, base: 3320MB, range: 8MB, type UC
total RAM covered: 8183M
  gran_size: 64K 	chunk_size: 64K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 64K 	chunk_size: 128K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 64K 	chunk_size: 256K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 64K 	chunk_size: 512K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 64K 	chunk_size: 1M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 64K 	chunk_size: 2M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 64K 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 64K 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 64K 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 64K 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 64K 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 64K 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 64K 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 64K 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -256M
  gran_size: 64K 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 64K 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1G
  gran_size: 128K 	chunk_size: 128K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 128K 	chunk_size: 256K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 128K 	chunk_size: 512K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 128K 	chunk_size: 1M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 128K 	chunk_size: 2M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 128K 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 128K 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 128K 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 128K 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 128K 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 128K 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 128K 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 128K 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -256M
  gran_size: 128K 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 128K 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1G
  gran_size: 256K 	chunk_size: 256K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 256K 	chunk_size: 512K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 256K 	chunk_size: 1M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 256K 	chunk_size: 2M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 256K 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 256K 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 256K 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 256K 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 256K 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 256K 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 256K 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 256K 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -256M
  gran_size: 256K 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 256K 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1G
  gran_size: 512K 	chunk_size: 512K 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 512K 	chunk_size: 1M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 512K 	chunk_size: 2M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 512K 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 512K 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 512K 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 512K 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 512K 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 512K 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 512K 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 512K 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -256M
  gran_size: 512K 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 512K 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1G
  gran_size: 1M 	chunk_size: 1M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 1M 	chunk_size: 2M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 1M 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 1M 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4864M
  gran_size: 1M 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 1M 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 1M 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 1M 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 0G
  gran_size: 1M 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 1M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -256M
  gran_size: 1M 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 0G
*BAD*gran_size: 1M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1G
  gran_size: 2M 	chunk_size: 2M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 2M 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 2M 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4865M
  gran_size: 2M 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 1M
  gran_size: 2M 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 1M
  gran_size: 2M 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 1M
  gran_size: 2M 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 1M
  gran_size: 2M 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 1M
*BAD*gran_size: 2M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -255M
  gran_size: 2M 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 1M
*BAD*gran_size: 2M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1023M
  gran_size: 4M 	chunk_size: 4M 	num_reg: 8  	lose cover RAM: 771M
  gran_size: 4M 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 4867M
  gran_size: 4M 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 3M
  gran_size: 4M 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 3M
  gran_size: 4M 	chunk_size: 64M 	num_reg: 8  	lose cover RAM: 3M
  gran_size: 4M 	chunk_size: 128M 	num_reg: 8  	lose cover RAM: 3M
  gran_size: 4M 	chunk_size: 256M 	num_reg: 8  	lose cover RAM: 3M
*BAD*gran_size: 4M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: -253M
  gran_size: 4M 	chunk_size: 1G 	num_reg: 8  	lose cover RAM: 3M
*BAD*gran_size: 4M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: -1021M
  gran_size: 8M 	chunk_size: 8M 	num_reg: 8  	lose cover RAM: 263M
  gran_size: 8M 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 263M
  gran_size: 8M 	chunk_size: 32M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 8M 	chunk_size: 64M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 8M 	chunk_size: 128M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 8M 	chunk_size: 256M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 8M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: 7M
  gran_size: 8M 	chunk_size: 1G 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 8M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 16M 	num_reg: 8  	lose cover RAM: 263M
  gran_size: 16M 	chunk_size: 32M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 64M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 128M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 256M 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 1G 	num_reg: 7  	lose cover RAM: 7M
  gran_size: 16M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: 7M
  gran_size: 32M 	chunk_size: 32M 	num_reg: 8  	lose cover RAM: 23M
  gran_size: 32M 	chunk_size: 64M 	num_reg: 7  	lose cover RAM: 23M
  gran_size: 32M 	chunk_size: 128M 	num_reg: 7  	lose cover RAM: 23M
  gran_size: 32M 	chunk_size: 256M 	num_reg: 7  	lose cover RAM: 23M
  gran_size: 32M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: 23M
  gran_size: 32M 	chunk_size: 1G 	num_reg: 7  	lose cover RAM: 23M
  gran_size: 32M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: 23M
  gran_size: 64M 	chunk_size: 64M 	num_reg: 7  	lose cover RAM: 55M
  gran_size: 64M 	chunk_size: 128M 	num_reg: 7  	lose cover RAM: 55M
  gran_size: 64M 	chunk_size: 256M 	num_reg: 7  	lose cover RAM: 55M
  gran_size: 64M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: 55M
  gran_size: 64M 	chunk_size: 1G 	num_reg: 7  	lose cover RAM: 55M
  gran_size: 64M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: 55M
  gran_size: 128M 	chunk_size: 128M 	num_reg: 6  	lose cover RAM: 119M
  gran_size: 128M 	chunk_size: 256M 	num_reg: 7  	lose cover RAM: 119M
  gran_size: 128M 	chunk_size: 512M 	num_reg: 8  	lose cover RAM: 119M
  gran_size: 128M 	chunk_size: 1G 	num_reg: 7  	lose cover RAM: 119M
  gran_size: 128M 	chunk_size: 2G 	num_reg: 8  	lose cover RAM: 119M
  gran_size: 256M 	chunk_size: 256M 	num_reg: 5  	lose cover RAM: 247M
  gran_size: 256M 	chunk_size: 512M 	num_reg: 5  	lose cover RAM: 247M
  gran_size: 256M 	chunk_size: 1G 	num_reg: 5  	lose cover RAM: 247M
  gran_size: 256M 	chunk_size: 2G 	num_reg: 6  	lose cover RAM: 247M
  gran_size: 512M 	chunk_size: 512M 	num_reg: 4  	lose cover RAM: 503M
  gran_size: 512M 	chunk_size: 1G 	num_reg: 5  	lose cover RAM: 503M
  gran_size: 512M 	chunk_size: 2G 	num_reg: 6  	lose cover RAM: 503M
  gran_size: 1G 	chunk_size: 1G 	num_reg: 3  	lose cover RAM: 1015M
  gran_size: 1G 	chunk_size: 2G 	num_reg: 3  	lose cover RAM: 1015M
  gran_size: 2G 	chunk_size: 2G 	num_reg: 2  	lose cover RAM: 2039M
mtrr_cleanup: can not find optimal value
please specify mtrr_gran_size/mtrr_chunk_size
e820 update range: 00000000cf700000 - 0000000100000000 (usable) ==> (reserved)

Am I right that a optimal config would be one that
- is not marked as *BAD*
- has no "lose cover RAM"
- uses as few registers as possible?
- leaves at least one spare reg for DRM?


Thanks a bunch for your help!


regards, Michael

PS please CC me directly because I'm not subscribed!


-- 
Michael Reinelt <michael@reinelt.co.at>
http://home.pages.at/reinelt
GPG-Key 0xDF13BA50
ICQ #288386781

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: mtrr_cleanup: can not find optimal value
  2011-06-03  5:03 mtrr_cleanup: can not find optimal value Michael Reinelt
@ 2011-06-03  5:26 ` Yinghai Lu
  2011-06-04  4:25   ` Michael Reinelt
  0 siblings, 1 reply; 3+ messages in thread
From: Yinghai Lu @ 2011-06-03  5:26 UTC (permalink / raw)
  To: Michael Reinelt; +Cc: lkml

On Thu, Jun 2, 2011 at 10:03 PM, Michael Reinelt <michael@reinelt.co.at> wrote:
> Hi there,
>
> I'm suffering bad graphic performance on my notebook, and when sorting
> things out, I found the following in dmesg:
>
> mtrr_cleanup: can not find optimal value
> please specify mtrr_gran_size/mtrr_chunk_size
>
> and later:
>
> mtrr: type mismatch for e0000000,10000000 old: write-back new:
> write-combining
> [drm] MTRR allocation failed.  Graphics performance may suffer.
>
> which is probably due to the fact that MTRR's can't be cleaned (at least I
> suspect so)
>
> The notebook is a Fujitsu Liefbook E8410, Intel Core2 Duo CPU T7700 @
> 2.40GHz, and 8 GB RAM, graphics is Intel Mobile GM965/GL960, kernel is a
> vanilla 2.6.39 X86_64
>
> When I remove 1 RAM module (using 4GB only) the messages above disappear.
> Unfortunately, graphic performance is still bad, but that's another story. I
> want to fix the MTRR issue anyway.
>
> I think the MTRR cleaner is unable to find a really optimal combination, and
> wants me to specify one of the sub-optimal configs. But I have no idea how
> to do that, and found nothing in the net. I found some references to a
> "mtrr-uncover" program, but I cannot compile it (probably because its too
> old). So I'm asking for some advice how to manually tune the MTRR's.
...
>  gran_size: 8M  chunk_size: 32M         num_reg: 7      lose cover RAM: 7M
...
you can append "mtrr_gran_size=8M mtrr_chunk_size=32M" in boot command line.

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: mtrr_cleanup: can not find optimal value
  2011-06-03  5:26 ` Yinghai Lu
@ 2011-06-04  4:25   ` Michael Reinelt
  0 siblings, 0 replies; 3+ messages in thread
From: Michael Reinelt @ 2011-06-04  4:25 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: lkml

Hi Yinghai,

Am 2011-06-03 07:26, schrieb Yinghai Lu:
...
>> So I'm asking for some advice how to manually tune the MTRR's.
> ...
>>   gran_size: 8M  chunk_size: 32M         num_reg: 7      lose cover RAM: 7M
> ...
> you can append "mtrr_gran_size=8M mtrr_chunk_size=32M" in boot command line.

Works fine, thank you!

Any hint *why* you choose this line?


regards, Michael

-- 
Michael Reinelt <michael@reinelt.co.at>
http://home.pages.at/reinelt
GPG-Key 0xDF13BA50
ICQ #288386781

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-06-04  4:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-03  5:03 mtrr_cleanup: can not find optimal value Michael Reinelt
2011-06-03  5:26 ` Yinghai Lu
2011-06-04  4:25   ` Michael Reinelt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).