Main memory (
random-access memory, RAM) is usually composed of a collection of
DRAM memory chips, where a number of chips can be grouped together to form a memory bank. It is then possible, with a memory controller that supports interleaving, to lay out these memory banks so that the memory banks will be interleaved. Data in DRAM is stored in units of pages. Each DRAM bank has a row buffer that serves as a cache for accessing any page in the bank. Before a page in the DRAM bank is read, it is first loaded into the
row-buffer. If the page is immediately read from the row-buffer (or a row-buffer hit), it has the shortest memory access latency in one memory cycle. If it is a row buffer miss, which is also called a row-buffer conflict, it is slower because the new page has to be loaded into the row-buffer before it is read. Row-buffer misses happen as access requests on different memory pages in the same bank are serviced. A row-buffer conflict incurs a substantial delay for a memory access. In contrast, memory accesses to different banks can proceed in parallel with a high throughput. The issue of row-buffer conflicts has been well studied with an effective solution. The size of a row-buffer is normally the size of a memory page managed by the operating system. Row-buffer conflicts or misses come from a sequence of accesses to different pages in the same memory bank. The study This patent-free method can be found in many commercial microprocessors, such as AMD, Intel and
NVIDIA, for embedded systems, laptops, desktops, and enterprise servers. In traditional (flat) layouts, memory banks can be allocated a contiguous block of memory addresses, which is very simple for the memory controller and gives equal performance in completely random access scenarios, when compared to performance levels achieved through interleaving. However, in reality memory reads are rarely random due to
locality of reference, and
optimizing for close together access gives far better performance in interleaved layouts. The way memory is addressed has no effect on the access time for memory locations which are already
cached, having an impact only on memory locations which need to be retrieved from DRAM. == History ==