Browse Prior Art Database

Detecting Uncached Areas of Memory to Augmenting a Cache Directory that Filters the Distribution of Snoop Commands

IP.com Disclosure Number: IPCOM000147544D
Original Publication Date: 2007-Mar-19
Included in the Prior Art Database: 2007-Mar-19
Document File: 3 page(s) / 31K

Publishing Venue

IBM

Abstract

Described is a method to detecting uncached areas of memory to augmenting a cache directory that filters the distribution of snoop commands.

This text was extracted from a PDF file.
At least one non-text object (such as an image or picture) has been suppressed.
This is the abbreviated version, containing approximately 53% of the total text.

Page 1 of 3

Detecting Uncached Areas of Memory to Augmenting a Cache Directory that Filters the Distribution of Snoop Commands

Directories can be used to determine which units to snoop when a given cache line is requested by a master. The directory is a table that has entries for some of the cache lines, and is referenced to determine which units have a copy of a given cache line. Only units which have a copy need to be snooped. There is a performance and power disadvantage to snooping units that do not have a copy.

A directory can be used to reduce unneeded snoop traffic on a local-only bus, when the bus includes a capability called "reflected command filtering", which eliminates the transmission of reflected-commands to units that do not have a copy of a given cache line, based on an associated entry in the directory. Similarly, a directory can be used to reduce unneeded snoop traffic on a multi-node bus, when the node-to-node bridge only forwards local commands to the remote nodes based on an associated entry in its directory.

Disclosed is a method that augments the directory (called "augmenter" below) by indicating which caches hold copies of a cache line that falls within regions for which there is an entry in the augmenter. The augmenter has a RAM with entries associated with regions of memory that are perhaps 4k bytes in size. The RAM only keeps entries for regions of memory that are "not in any cache" or are "only in one cache".

The augmenter creates an entry initially as "not in any cache" by detecting a sequence of "write-with-kill" type transactions to each cache line within the region. If such a region is then acquired by one cache, its state is changed to "only in one cache". If a second cache acquires a line in such a region, the entry is invalidated.

The "augmenter" receives selected commands, and delivers (outputs) an indication as to which units should be sent the reflected command. Possible outputs are: "none", "unit N", or "all". In the case of "all", the results of the regular directory may be used to narrow the units down.

The augmenter has a RAM that behaves much like a cache. Each RAM entry is associated with a region of memory (like a cache line) that is perhaps 4k bytes in size. Each RAM entry includes upper address bits so that the RAM can have fewer entries than there are regions of memory. The RAM can have associativity to improve the variety of entries it can hold. Each RAM entry also includes state information about the region of memory. Below is an example of a RAM within the augmenter. It assumes direct mapping (no associativity), a 4k region size (addr...