Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This page is intended for recording steps we have taken over time to improve RAMCloud performance, along with measurements of the resulting performance gains. Add new entries at the beginning of the page, so that the entries are in reverse chronological order.

ObjectFinder and TransportManager (June 2014, John Ousterhout)

Before this optimization, ObjectFinder::lookup had to invoke TransportManager::getSession in each call, with 2 inefficiencies:

  • The interface to getSession passed in a char*, but the unordered_map in TransportManager is keyed with strings; this meant that a new string object had to be created around the char* argument during each call. I change the interface to pass in a string instead. This saved approximately 80ns in each RPC.
  • ObjectFinder::lookup has already done a hash table lookup to find information about the tablet, such as its service locator. I modified ObjectFinder to cache the SessionRef in his own data structure, which eliminates the call to TransportManager::getSession. This saved another 60ns in each RPC.

The overall impact of these 2 changes was to reduce he median read time in "clusterperf readDist" from 4.91µs to 4.77µs.

Buffer rewrite (June 2014, John Ousterhout)

...