星期一, 11月 21, 2005

MTRR : Memory Type Range Register

在kernel source 的documentation/mtrr.txt中有說明,是一種控制CPU內建cache的機制
P6以後(P- Pro, P-II and later), mtrr可以用來控制process存取memory的range,當使用PCI, AGP bus的graphic card時,enable write-combining function可以將對Graphic memory的多次寫入合併為一次大量寫入(利用cache作buffer),這樣可以增加graphic card的performance 2.5倍之多。

Cyrix 6x86, 6x86MX , M-II 則用 ARRs(Address Range Registers) 提供和MTRRs類似的功能。

AMD K6-2,K6-3,有兩個MTRRs,Athlon 甚至有8個intel style的MTRRs。

kernel source中的CONFIG_MTRR option enable的話,會create一個/proc/mtrr file,可以用來操作MTRRs,X-Server就會這樣用,這個file也提供一個abstraction layer,讓其他processor也能用同一種方法來控制。

/proc/mtrr有兩種interface : ASCII和ioctl( ),read/write是給shell操作,ioctl( )是給C function使用。

Reading MTRRs from the shell:


# cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 128MB: write-back, count=1
reg01: base=0x08000000 ( 128MB), size= 64MB: write-back, count=1

Creating MTRRs from the bash shell:
# echo "base=0xf8000000  size=0x40000000 type=write-combing" >| /proc/mtrr
# cat /proc/mtrr
reg00: base=0x00000000( 0MB), size= 128MB: write-back, count=1
reg01: base=0x08000000(128MB), size= 64MB: write-back, count=1
reg02: base=0xf8000000(3968MB),size= 4MB: write-combining, count=1
這個command設定cache 0xf8000000, 4M byte的記憶體位置,剛好是video RAM的位置。

X- Server一般會將Linear Framebuffer 所在位置,像
(--)  S3: PCI: 968 rev 0, Linear FB @ 0xf8000000
只能用X server report的位址,因為X-Server可以將他mapping到任意的位置。
同樣的size也會在X -Server的report中。

沒有留言:

網誌存檔