Memory type range register
Memory type range registers are a set of processor supplementary capability control registers that provide system software with control of how accesses to memory ranges by the CPU are cached. It uses a set of programmable model-specific registers which are special registers provided by most modern CPUs. Possible access modes to memory ranges can be uncached, write-through, write-combining, write-protect, and write-back. In write-back mode, writes are written to the CPU's cache and the cache is marked dirty, so that its contents are written to memory later.
Write-combining allows bus write transfers to be combined into a larger transfer before bursting them over the bus to allow more efficient writes to system resources like graphics card memory. This often increases the speed of image write operations by several times, at the cost of losing the simple sequential read/write semantics of normal memory. Additional bits which are provided on some computer architectures, such as AMD64, allow the shadowing of ROM contents in memory, and the configuration of memory-mapped I/O.
MTRRs in x86-PC processors
In early x86 architecture systems, especially where the cache was provided by separate chips outside of the CPU package, this function was controlled by the chipset and configured through BIOS settings.When the CPU cache was moved inside the CPU, the CPUs implemented fixed-range MTRRs which cover the first megabyte of memory to be compatible to what PC-BIOSes provided at that time. These are used to control the cache policy needed for VGA accesses and all other memory-accesses done while the system is in real mode. Above 1 MB, CPUs provide a number of variable-range MTRRs, which can be freely placed and even overlap. These variable-range MTRRs can be used to set the caching policy of graphics memory and other memory ranges used by PCI devices.
The MTRR count varies:
- The Intel P6 family of processors and later have MTRRs which may be used to control access to memory ranges.
- The Cyrix 6x86, 6x86MX and MII processors have Address Range Registers which provide similar functionality to MTRRs.
- The Centaur C6 WinChip has 8 MCRs, allowing write-combining.
- The VIA Cyrix III and VIA C3 CPUs offer 8 Intel-style MTRRs.
- The AMD Athlon family provide 8 Intel-style MTRRs.
- The AMD K6-2 and K6-III processors have two MTRRs.