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