Indirection

 Presenting clients with an idealized view of private, sequential streams conflicts with copy-avoidance through shared buffers. Modifying shared blocks can cause data corruption, for instance. Copying blocks between buffers is a safe alternative, but that is expensive. Instead, Streamline takes an approach similar to hardware protected virtual memory. It adds a layer of indirection in memory addressing, to be able to virtually move and copy blocks without incurring any actual physical data movement. The BMS implements indirection in software, because hardware-protected virtual memory operations are expensive, protection is not required by Streamline (where access control takes place at buffer granularity), and software indirection can be enabled selectively to curtail translation cost.

Virtual address pointers are meaningless across memory protection domains. In the BMS, software indirection replaces pointers with globally valid indices and pointer queues with index buffers or ``IBufs''. Indices are pointers that differ in two ways from memory addresses. One, they replace direct addressing with a hierarchical lookup structure that is valid across virtual address spaces, a rich index. Two, their structure embeds a metadata field. Figure 4.2Rich Pointers shows an example index. It strongly resembles the tag used in stream classification. IBufs are specialized ring buffers that pack indices closely together to share cachelines, maximizing cache hitrate. Figure 4.1Chain of data rings with data and index buffers with pointers to data shows multiple (private) IBufs pointing into (shared) DBufs.



Subsections
willem 2010-02-03