Perf
is a program that contains several micro-benchmarks related to RAMCloud. It includes all of the server code but runs as a stand-alone program, not in a cluster configuration. This page contains the output of that program at various points in time, so it provides a history of RAMCloud micro-benchmark performance.
Note: for consistency, please take all measurements on rc20 and be sure to compile with DEBUG=no
.
June 18, 2012
atomicIntCmpX 6.29ns Atomic<int>::compareExchange atomicIntInc 5.93ns Atomic<int>::inc atomicIntLoad 0.56ns Atomic<int>::load atomicIntStore 0.59ns Atomic<int>::store atomicIntXchg 5.93ns Atomic<int>::exchange bMutexNoBlock 14.92ns std::mutex lock/unlock (no blocking) cppAtomicExchg 5.93ns Exchange method on a C++ atomic_int cppAtomicLoad 13.76ns Read a C++ atomic_int cyclesToSeconds 7.04ns Convert a rdtsc result to (double) seconds cyclesToNanos 9.86ns Convert a rdtsc result to (uint64_t) nanoseconds dispatchPoll 8.17ns Dispatch::poll (no timers or pollers) functionCall 1.98ns Call a function that has not been inlined getThreadId 1.98ns Retrieve thread id via ThreadId::get hashTableLookup 168.76ns Key lookup in a 1GB HashTable hashTableLookupPf 143.19ns Key lookup in a 1GB HashTable with prefetching lfence 2.90ns Lfence instruction lockInDispThrd 4.15ns Acquire/release Dispatch::Lock (in dispatch thread) lockNonDispThrd 4.05ns Acquire/release Dispatch::Lock (non-dispatch thread) murmur3 11.29ns 128-bit MurmurHash3 (64-bit optimised) on 1 byte of data murmur3 41.17ns 128-bit MurmurHash3 hash (64-bit optimised) on 256 bytes of data objectPoolAlloc 192.56ns Cost of new allocations from an ObjectPool (no destroys) objectPoolRealloc 4.42ns Cost of ObjectPool allocation after destroying an object prefetch 29.79ns Prefetch instruction rdtsc 6.80ns Read the fine-grain cycle counter segmentEntrySort 5.18ms Sort a Segment full of avg. 100-byte Objects by age segmentIterator 1.08ms Iterate a Segment full of avg. 100-byte Objects sfence 1.47ns Sfence instruction spinLock 16.34ns Acquire/release SpinLock startStopTimer 15.03ns Start and stop a Dispatch::Timer throwInt 1.97us Throw an int throwIntNL 2.44us Throw an int in a function call throwException 1.88us Throw an Exception throwExceptionNL 2.60us Throw an Exception in a function call throwSwitch 5.09us Throw an Exception using ClientException::throwException vectorPushPop 3.86ns Push and pop a std::vector
July 18, 2011
atomicIntCmpX 6.26ns AtomicInt::compareExchange atomicIntInc 6.05ns AtomicInt::inc atomicIntLoad 0.57ns AtomicInt::load atomicIntStore 0.58ns AtomicInt::store atomicIntXchg 6.06ns AtomicInt::exchange bMutexNoBlock 14.66ns Boost mutex lock/unlock (no blocking) cppAtomicExchg 5.93ns Exchange method on a C++ atomic_int cppAtomicLoad 13.66ns Read a C++ atomic_int dispatchPoll 7.62ns Dispatch::poll (no timers or pollers) getThreadId 2.27ns Retrieve thread id via ThreadId::get lfence 2.84ns Lfence instruction lockInDispThrd 7.05ns Acquire/release Dispatch::Lock (in dispatch thread) lockNonDispThrd 252.79ns Acquire/release Dispatch::Lock (non-dispatch thread) sfence 1.50ns Sfence instruction spinLock 16.46ns Acquire/release SpinLock
Misc
Some 2.3GHz Xeon, 2011-08-23
atomicIntCmpX 10.63ns AtomicInt::compareExchange atomicIntInc 8.71ns AtomicInt::inc atomicIntLoad 0.44ns AtomicInt::load atomicIntStore 0.43ns AtomicInt::store atomicIntXchg 7.83ns AtomicInt::exchange bMutexNoBlock 42.26ns Boost mutex lock/unlock (no blocking) cppAtomicExchg 7.97ns Exchange method on a C++ atomic_int cppAtomicLoad 7.69ns Read a C++ atomic_int cyclesToSeconds 10.42ns Convert a rdtsc result to (double) seconds cyclesToNanos 14.49ns Convert a rdtsc result to (uint64_t) nanoseconds dispatchPoll 20.41ns Dispatch::poll (no timers or pollers) functionCall 3.05ns Call a function that has not been inlined getThreadId 3.04ns Retrieve thread id via ThreadId::get lfence 4.79ns Lfence instruction lockInDispThrd 6.10ns Acquire/release Dispatch::Lock (in dispatch thread) lockNonDispThrd 283.43ns Acquire/release Dispatch::Lock (non-dispatch thread) sfence 3.60ns Sfence instruction spinLock 25.17ns Acquire/release SpinLock throwInt 3.32us Throw an int throwIntNL 4.54us Throw an int in a function call throwException 3.43us Throw an Exception throwExceptionNL 4.69us Throw an Exception in a function call throwSwitch 6.45us Throw an Exception using ClientException::throwException