Versions Compared

Key

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

...

Note: for consistency, please take all measurements on rc20 and be sure to compile with DEBUG=no.

...

Nov 16,

...

2016

No Format
nopaneltrue
atomicIntCmpX               6.21ns25ns         Atomic<int>::compareExchange
atomicIntInc                5.98ns90ns         Atomic<int>::inc
atomicIntLoad
atomicIntInc                05.56ns94ns     Atomic<int>::load atomicIntStore   std::atomic<int>::fetch_add
atomicIntLoad     0.56ns    Atomic<int>::store atomicIntXchg     0.59ns     5.97ns    Atomic<int>::exchangeload
bMutexNoBlockatomicIntStore         14.77ns    std::mutex lock/unlock (no blocking)
bufferBasic 0.57ns         Atomic<int>::store
atomicIntXchg     11.42ns    buffer create, add one chunk, delete bufferBasicAlloc5.90ns      14.62ns   Atomic<int>::exchange
bufferbMutexNoBlock create, alloc block in chunk, delete bufferBasicCopy       1314.24ns57ns      buffer create, copy small block, delete
bufferCopy std::mutex lock/unlock (no blocking)
bufferAppendCopy1           147.76ns99ns    copy out 2 small chunks fromappendCopy 1 bufferbyte bufferExtendChunkto a buffer
bufferAppendCopy50   5.69ns    buffer add onto existing8.93ns chunk bufferGetStart       appendCopy 50 3.34nsbytes to a buffer
Buffer::getStartbufferAppendCopy100 bufferIterator        228.57ns47ns      iterate over buffer withappendCopy 5100 chunksbytes condPingPongto a buffer
bufferAppendCopy250        416.04us74ns    std::condition_variable round-trip cppAtomicExchg   appendCopy 250 bytes to a buffer
5.87nsbufferAppendCopy500    Exchange method on a C++ atomic_int
cppAtomicLoad 20.90ns         appendCopy 500 13.50nsbytes to a buffer
ReadbufferAppendExternal1 a C++ atomic_int cyclesToSeconds    8.13ns    6.97ns    Convert aappendExternal rdtsc1 resultbyte to (double)a secondsbuffer
cyclesToNanosbufferAppendExternal50      8.15ns    9.75ns    Convert aappendExternal rdtsc50 resultbytes to (uint64_t) nanoseconds
dispatchPolla buffer
bufferAppendExternal100     7.84ns      8.63ns   appendExternal Dispatch::poll (no timers or pollers)
div32100 bytes to a buffer
bufferAppendExternal250     7.76ns         appendExternal 250 bytes to 4.86nsa buffer
bufferAppendExternal500  32-bit integer division instruction8.25ns div64        appendExternal 500 bytes to a buffer
bufferBasic   20.30ns    64-bit integer division instruction functionCall     10.88ns      1.95ns   buffer Callcreate, aadd functionone thatchunk, hasdelete
notbufferBasicAlloc been inlined getThreadId        12.29ns    2.24ns    Retrieve threadbuffer idcreate, via ThreadId::get
hashTableLookup   alloc block in chunk, delete
bufferBasicCopy   128.86ns    Key lookup in a 1GB HashTable12.02ns hashTableLookupPf     78.07ns   buffer Keycreate, lookupcopy insmall ablock, 1GBdelete
HashTablebufferCopy with prefetching lfence              14.25ns   2.82ns    Lfence instruction lockInDispThrdcopy out 2 small chunks from buffer
bufferExtendChunk  4.06ns    Acquire/release Dispatch::Lock (in dispatch thread) lockNonDispThrd4.69ns      214.54ns   buffer Acquire/release Dispatch::Lock (non-dispatch thread)
memcpy100add onto existing chunk
bufferGetStart              83.78ns41ns    Copy 100 bytes with memcpy memcpy1000Buffer::getStart
bufferConstruct           37.37ns  5.90ns  Copy 1000 bytes with memcpy memcpy10000  buffer stack allocation
bufferReset     191.07ns    Copy 10000 bytes with memcpy murmur3   4.79ns         Buffer::reset
bufferCopyIterator2  10.31ns    128-bit MurmurHash3 (64-bit optimised) on 1 byte of data
murmur3 6.46ns         buffer iterate over 2 copied chunks, accessing 1 byte each
bufferCopyIterator5  40.47ns    128-bit MurmurHash3 hash (64-bit optimised) on 256 bytes of data
objectPoolAlloc       27.86ns    Cost of new allocations from an ObjectPool (no destroys)
objectPoolRealloc 8.71ns         buffer iterate over 5 copied chunks, accessing 1 byte each
bufferExternalIterator2     8.96ns         4.65nsbuffer iterate over 2 Costexternal ofchunks, ObjectPoolaccessing allocation1 afterbyte destroyingeach
anbufferExternalIterator5 object prefetch  23.46ns         buffer iterate over 34.72ns5 external chunks, accessing Prefetch1 instructionbyte rdtsceach
condPingPong                 63.70ns09us    Read the fine-grain cycle counter
segmentEntrySort   std::condition_variable round-trip
cppAtomicExchg     7.02ms    Sort a Segment full of avg6.64ns 100-byte Objects by age segmentIterator    Exchange method on a  1.83ms C++ atomic_int
cppAtomicLoad   Iterate a Segment full of avg. 100-byte Objects sfence    0.60ns         Read a C++  1.39nsatomic_int
cyclesToSeconds    Sfence instruction spinLock       6.30ns       16.17ns  Convert a Acquire/releaserdtsc SpinLockresult startStopTimerto (double) seconds
cyclesToNanos     14.76ns    Start and stop a Dispatch::Timer spawnThread 6.32ns         Convert a 9.89usrdtsc result to (uint64_t) Startnanoseconds
anddispatchPoll stop a thread throwInt            9.36ns   1.91us    Throw an int
throwIntNL   Dispatch::poll (no timers or pollers)
div32           2.60us    Throw an int in a function call throwException 4.79ns        1.84us 32-bit integer division Throwinstruction
andiv64 Exception throwExceptionNL       2.58us    Throw an Exception in a function call throwSwitch  20.22ns          5.46us    Throw an Exception using ClientException::throwException
vectorPushPop64-bit integer division instruction
functionCall                3.72ns1.74ns       Push and popCall a std::vector

June 18, 2012

No Format
atomicIntCmpX      function that has not been inlined
generateRandomNumber    6.29ns    Atomic<int>::compareExchange
atomicIntInc17.21ns         Call to randomNumberGenerator(x)
genRandomString 5.93ns    Atomic<int>::inc atomicIntLoad       1.49us   0.56ns    Atomic<int>::load atomicIntStore Generate a random 100-byte value
getThreadId   0.59ns    Atomic<int>::store atomicIntXchg          51.93ns73ns    Atomic<int>::exchange bMutexNoBlock    Retrieve thread id via  14.92nsThreadId::get
getThreadIdSyscall    std::mutex lock/unlock (no blocking) cppAtomicExchg 41.04ns        5.93ns Retrieve kernel thread Exchangeid methodusing onsyscall
ahashTableLookup C++ atomic_int cppAtomicLoad        123.41ns 13.76ns    Read a C++ atomic_int cyclesToSecondsKey lookup in a 1GB HashTable
hashTableLookupPf  7.04ns    Convert a rdtsc result to (double) seconds
cyclesToNanos70.57ns         Key lookup in a 9.86ns1GB HashTable with prefetching
Convertlfence a rdtsc result to (uint64_t) nanoseconds dispatchPoll           8.17ns    Dispatch::poll (no timers or pollers)
functionCall3.00ns         Lfence instruction
lockInDispThrd     1.98ns    Call a function that has not3.52ns been inlined getThreadId      Acquire/release Dispatch::Lock (in dispatch thread)
lockNonDispThrd 1.98ns    Retrieve thread id via ThreadId::get hashTableLookup 324.23ns     168.76ns    Key lookup in a 1GB HashTable
hashTableLookupPfAcquire/release Dispatch::Lock (non-dispatch thread)
mapCreate      143.19ns    Key lookup in a 1GB HashTable with prefetching lfence21.15ns         Create+delete entry in std::map
mapLookup    2.90ns       Lfence instruction lockInDispThrd     14.87ns    4.15ns    Acquire/release Dispatch::Lock (in dispatch thread)
lockNonDispThrd Lookup in std::map<uint64_t, uint64_t>
memcpyCached100        4.05ns    Acquire/release Dispatch::Lock (non-dispatch thread)
murmur314.52ns         memcpy 100 bytes with hot/fixed dst and src
memcpyCached1000  11.29ns    128-bit MurmurHash3 (64-bit optimised) on 121.79ns byte of data murmur3     memcpy 1000 bytes with hot/fixed dst and src
memcpyCached10000  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       185.40ns         memcpy 10000 bytes with hot/fixed dst and src
memcpyCachedDst100         93.36ns         memcpy 100 bytes with hot/fixed dst and cold src
memcpyCachedDst1000        29122.79ns05ns    Prefetch instruction rdtsc   memcpy 1000 bytes with hot/fixed dst and cold src
memcpyCachedDst10000      6356.80ns61ns    Read the fine-grain cycle counter segmentEntrySortmemcpy 10000 bytes with hot/fixed dst and 5.18mscold src
memcpyCold100  Sort a Segment full of avg. 100-byte Objects by age segmentIterator 377.18ns       1.08ms  memcpy 100 Iteratebytes awith Segmentcold fulldst ofand avg. 100-byte Objects
sfencesrc
memcpyCold1000            659.35ns       1.47ns  memcpy 1000 Sfencebytes instructionwith spinLockcold dst and src
memcpyCold10000          16.34ns   3.18us Acquire/release SpinLock startStopTimer      memcpy 10000 15.03nsbytes with cold dst Startand andsrc
stopmurmur3 a Dispatch::Timer throwInt               1.97us  10.96ns  Throw an int throwIntNL    128-bit MurmurHash3 (64-bit optimised) on 1 byte of data
2.44usmurmur3    Throw an int in a function call throwException         150.88us44ns    Throw an Exception throwExceptionNL  128-bit MurmurHash3 hash (64-bit optimised) 2.60uson 256 bytes of Throwdata
anobjectPoolAlloc Exception in a function call throwSwitch      29.52ns      5.09us    Throw   Cost of new allocations from an Exception using ClientException::throwException
vectorPushPopObjectPool (no destroys)
objectPoolRealloc           34.86ns57ns     Push and pop a std::vector

July 18, 2011

No Format
atomicIntCmpX    6.26ns    AtomicInt::compareExchange
atomicIntIncCost of ObjectPool allocation after destroying an object
pingConditionVar       6.05ns    AtomicInt::inc
atomicIntLoad 1.61us    0.57ns    AtomicInt::load
atomicIntStore   0.58ns Round-trip ping with std::condition_variable
prefetch     AtomicInt::store atomicIntXchg    6.06ns    AtomicInt::exchange bMutexNoBlock    1435.66ns85ns   Boost mutex lock/unlock (no blocking) cppAtomicExchg Prefetch instruction
5.93nsqueueEstimator    Exchange method on a C++ atomic_int cppAtomicLoad    132.66ns23ns   Read a C++ atomic_int dispatchPoll  Recompute # bytes 7.62nsoutstanding in queue
rdtsc Dispatch::poll (no timers or pollers) getThreadId      2.27ns    Retrieve thread id via ThreadId::get lfence  6.74ns         2.84nsRead the fine-grain cycle Lfencecounter
instructionsegmentEntrySort lockInDispThrd   7.05ns    Acquire/release Dispatch::Lock (in dispatch thread)8.38ms lockNonDispThrd  252.79ns  Acquire/release Dispatch::Lock (non-dispatch thread) sfenceSort a Segment full of avg. 100-byte Objects by age
segmentIterator   1.50ns        Sfence instruction spinLock2.09ms         16.46nsIterate a Segment Acquire/releasefull SpinLock

Misc

Some 2.3GHz Xeon, 2011-08-23

No Format
atomicIntCmpX    10.63ns   AtomicInt::compareExchange
atomicIntIncof avg. 100-byte Objects
sessionRefCount            812.71ns59ns     AtomicInt::inc atomicIntLoad    0.44ns Create/delete SessionRef
serialize   AtomicInt::load atomicIntStore   0.43ns    AtomicInt::store
atomicIntXchg       755.83ns41ns     AtomicInt::exchange bMutexNoBlock   cpuid 42.26nsinstruction for serialize
Boostsfence mutex lock/unlock (no blocking) cppAtomicExchg   7.97ns    Exchange method on a C++ atomic_int cppAtomicLoad    71.69ns41ns    Read a C++ atomic_int cyclesToSeconds Sfence 10.42nsinstruction
spinLock  Convert a rdtsc result to (double) seconds cyclesToNanos    14.49ns   Convert a rdtsc result to (uint64_t) nanoseconds
dispatchPoll9.60ns         Acquire/release SpinLock
20.41nsstartStopTimer   Dispatch::poll (no timers or pollers) functionCall     333.05ns43ns     Call a function that hasStart notand beenstop inlined
getThreadId a Dispatch::Timer
spawnThread     3.04ns    Retrieve thread id via ThreadId::get lfence   8.89us        4.79ns Start and stop Lfencea instructionthread
lockInDispThrdthrowInt   6.10ns    Acquire/release Dispatch::Lock (in dispatch thread) lockNonDispThrd  283.43ns  Acquire/release Dispatch::Lock (non-dispatch thread) sfence2.07us         Throw an 3.60nsint
throwIntNL   Sfence instruction spinLock         25.17ns   Acquire/release SpinLock
throwInt     2.55us     3.32us    Throw an int throwIntNLin a function call
throwException    4.54us     Throw an int in a function2.03us call throwException   3.43us    Throw an Exception
throwExceptionNL 4.69us           2.81us         Throw an Exception in a function call
throwSwitch                 6.45us04us         Throw an Exception using ClientException::throwException
timeTrace                   7.56ns         Record an event using TimeTrace
unorderedMapCreate         79.05ns         Create+delete entry in unordered_map
unorderedMapLookup         14.62ns         Lookup in std::unordered_map<uint64_t, uint64_t>
vectorPushPop               3.90ns         Push and pop a std::vector

June 21, 2016

No Format
nopaneltrue
atomicIntCmpX               6.23ns         Atomic<int>::compareExchange
atomicIntInc                5.85ns         Atomic<int>::inc
atomicIntInc                5.84ns         std::atomic<int>::fetch_add
atomicIntLoad               0.56ns         Atomic<int>::load
atomicIntStore              0.56ns         Atomic<int>::store
atomicIntXchg               5.84ns         Atomic<int>::exchange
bMutexNoBlock              14.46ns         std::mutex lock/unlock (no blocking)
bufferAppendCopy1           8.09ns         appendCopy 1 byte to a buffer
bufferAppendCopy50          8.96ns         appendCopy 50 bytes to a buffer
bufferAppendCopy100         9.09ns         appendCopy 100 bytes to a buffer
bufferAppendCopy250        18.08ns         appendCopy 250 bytes to a buffer
bufferAppendCopy500        22.56ns         appendCopy 500 bytes to a buffer
bufferAppendExternal1       8.24ns         appendExternal 1 byte to a buffer
bufferAppendExternal50      7.87ns         appendExternal 50 bytes to a buffer
bufferAppendExternal100     7.95ns         appendExternal 100 bytes to a buffer
bufferAppendExternal250     7.79ns         appendExternal 250 bytes to a buffer
bufferAppendExternal500     7.72ns         appendExternal 500 bytes to a buffer
bufferBasic                11.13ns         buffer create, add one chunk, delete
bufferBasicAlloc           11.99ns         buffer create, alloc block in chunk, delete
bufferBasicCopy            12.00ns         buffer create, copy small block, delete
bufferCopy                 14.20ns         copy out 2 small chunks from buffer
bufferExtendChunk           4.56ns         buffer add onto existing chunk
bufferGetStart              3.34ns         Buffer::getStart
bufferConstruct             5.84ns         buffer stack allocation
bufferReset                 4.72ns         Buffer::reset
bufferCopyIterator2         6.67ns         buffer iterate over 2 copied chunks, accessing 1 byte each
bufferCopyIterator5         9.18ns         buffer iterate over 5 copied chunks, accessing 1 byte each
bufferExternalIterator2     9.06ns         buffer iterate over 2 external chunks, accessing 1 byte each
bufferExternalIterator5    23.24ns         buffer iterate over 5 external chunks, accessing 1 byte each
condPingPong                2.98us         std::condition_variable round-trip
cppAtomicExchg              5.83ns         Exchange method on a C++ atomic_int
cppAtomicLoad               0.65ns         Read a C++ atomic_int
cyclesToSeconds             6.13ns         Convert a rdtsc result to (double) seconds
cyclesToNanos               6.35ns         Convert a rdtsc result to (uint64_t) nanoseconds
dispatchPoll                9.21ns         Dispatch::poll (no timers or pollers)
div32                       4.72ns         32-bit integer division instruction
div64                      20.15ns         64-bit integer division instruction
functionCall                1.67ns         Call a function that has not been inlined
generateRandomNumber       16.56ns         Call to randomNumberGenerator(x)
genRandomString             1.49us         Generate a random 100-byte value
getThreadId                 1.95ns         Retrieve thread id via ThreadId::get
getThreadIdSyscall         41.15ns         Retrieve kernel thread id using syscall
hashTableLookup           124.09ns         Key lookup in a 1GB HashTable
hashTableLookupPf          73.98ns         Key lookup in a 1GB HashTable with prefetching
lfence                      2.92ns         Lfence instruction
lockInDispThrd              2.79ns         Acquire/release Dispatch::Lock (in dispatch thread)
lockNonDispThrd           279.30ns         Acquire/release Dispatch::Lock (non-dispatch thread)
mapCreate                  22.63ns         Create+delete entry in std::map
mapLookup                  16.02ns         Lookup in std::map<uint64_t, uint64_t>
memcpyCached100            14.55ns         memcpy 100 bytes with hot/fixed dst and src
memcpyCached1000           21.82ns         memcpy 1000 bytes with hot/fixed dst and src
memcpyCached10000         185.16ns         memcpy 10000 bytes with hot/fixed dst and src
memcpyCachedDst100         93.82ns         memcpy 100 bytes with hot/fixed dst and cold src
memcpyCachedDst1000       122.30ns         memcpy 1000 bytes with hot/fixed dst and cold src
memcpyCachedDst10000      355.23ns         memcpy 10000 bytes with hot/fixed dst and cold src
memcpyCold100             372.20ns         memcpy 100 bytes with cold dst and src
memcpyCold1000            655.00ns         memcpy 1000 bytes with cold dst and src
memcpyCold10000             3.18us         memcpy 10000 bytes with cold dst and src
murmur3                    10.28ns         128-bit MurmurHash3 (64-bit optimised) on 1 byte of data
murmur3                    49.72ns         128-bit MurmurHash3 hash (64-bit optimised) on 256 bytes of data
objectPoolAlloc            29.16ns         Cost of new allocations from an ObjectPool (no destroys)
objectPoolRealloc           4.48ns         Cost of ObjectPool allocation after destroying an object
pingConditionVar            1.56us         Round-trip ping with std::condition_variable
prefetch                   35.20ns         Prefetch instruction
rdtsc                       6.67ns         Read the fine-grain cycle counter
segmentEntrySort            8.14ms         Sort a Segment full of avg. 100-byte Objects by age
segmentIterator             1.97ms         Iterate a Segment full of avg. 100-byte Objects
sessionRefCount            12.55ns         Create/delete SessionRef
serialize                  55.34ns         cpuid instruction for serialize
sfence                      1.39ns         Sfence instruction
spinLock                   18.90ns         Acquire/release SpinLock
startStopTimer             56.46ns         Start and stop a Dispatch::Timer
spawnThread                 8.90us         Start and stop a thread
throwInt                    2.02us         Throw an int
throwIntNL                  2.48us         Throw an int in a function call
throwException              1.97us         Throw an Exception
throwExceptionNL            2.78us         Throw an Exception in a function call
throwSwitch                 6.05us         Throw an Exception using ClientException::throwException
timeTrace                  15.93ns         Record an event using TimeTrace
unorderedMapCreate         72.63ns         Create+delete entry in unordered_map
unorderedMapLookup         13.07ns         Lookup in std::unordered_map<uint64_t, uint64_t>
vectorPushPop               3.80ns         Push and pop a std::vector

June 9, 2014

No Format
atomicIntCmpX          6.21ns    Atomic<int>::compareExchange
atomicIntInc           5.98ns    Atomic<int>::inc
atomicIntLoad          0.56ns    Atomic<int>::load
atomicIntStore         0.56ns    Atomic<int>::store
atomicIntXchg          5.97ns    Atomic<int>::exchange
bMutexNoBlock         14.77ns    std::mutex lock/unlock (no blocking)
bufferBasic           11.42ns    buffer create, add one chunk, delete
bufferBasicAlloc      14.62ns    buffer create, alloc block in chunk, delete
bufferBasicCopy       13.24ns    buffer create, copy small block, delete
bufferCopy            14.76ns    copy out 2 small chunks from buffer
bufferExtendChunk      5.69ns    buffer add onto existing chunk
bufferGetStart         3.34ns    Buffer::getStart
bufferIterator        22.57ns    iterate over buffer with 5 chunks
condPingPong           4.04us    std::condition_variable round-trip
cppAtomicExchg         5.87ns    Exchange method on a C++ atomic_int
cppAtomicLoad         13.50ns    Read a C++ atomic_int
cyclesToSeconds        6.97ns    Convert a rdtsc result to (double) seconds
cyclesToNanos          9.75ns    Convert a rdtsc result to (uint64_t) nanoseconds
dispatchPoll           8.63ns    Dispatch::poll (no timers or pollers)
div32                  4.86ns    32-bit integer division instruction
div64                 20.30ns    64-bit integer division instruction
functionCall           1.95ns    Call a function that has not been inlined
getThreadId            2.24ns    Retrieve thread id via ThreadId::get
hashTableLookup      128.86ns    Key lookup in a 1GB HashTable
hashTableLookupPf     78.07ns    Key lookup in a 1GB HashTable with prefetching
lfence                 2.82ns    Lfence instruction
lockInDispThrd         4.06ns    Acquire/release Dispatch::Lock (in dispatch thread)
lockNonDispThrd      214.54ns    Acquire/release Dispatch::Lock (non-dispatch thread)
memcpy100              8.78ns    Copy 100 bytes with memcpy
memcpy1000            37.37ns    Copy 1000 bytes with memcpy
memcpy10000          191.07ns    Copy 10000 bytes with memcpy
murmur3               10.31ns    128-bit MurmurHash3 (64-bit optimised) on 1 byte of data
murmur3               40.47ns    128-bit MurmurHash3 hash (64-bit optimised) on 256 bytes of data
objectPoolAlloc       27.86ns    Cost of new allocations from an ObjectPool (no destroys)
objectPoolRealloc      4.65ns    Cost of ObjectPool allocation after destroying an object
prefetch              34.72ns    Prefetch instruction
rdtsc                  6.70ns    Read the fine-grain cycle counter
segmentEntrySort       7.02ms    Sort a Segment full of avg. 100-byte Objects by age
segmentIterator        1.83ms    Iterate a Segment full of avg. 100-byte Objects
sfence                 1.39ns    Sfence instruction
spinLock              16.17ns    Acquire/release SpinLock
startStopTimer        14.76ns    Start and stop a Dispatch::Timer
spawnThread            9.89us    Start and stop a thread
throwInt               1.91us    Throw an int
throwIntNL             2.60us    Throw an int in a function call
throwException         1.84us    Throw an Exception
throwExceptionNL       2.58us    Throw an Exception in a function call
throwSwitch            5.46us    Throw an Exception using ClientException::throwException
vectorPushPop          3.72ns    Push and pop a std::vector

June 18, 2012

No Format
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

No Format
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

No Format
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



bufferAppendCopy50          8.93ns         appendCopy 50 bytes to a bufferbufferAppendCopy100         8.47ns         appendCopy 100 bytes to a bufferbufferAppendCopy250        16.74ns         appendCopy 250 bytes to a bufferbufferAppendCopy500        20.90ns         appendCopy 500 bytes to a bufferbufferAppendExternal1       8.13ns         appendExternal 1 byte to a bufferbufferAppendExternal50      8.15ns         appendExternal 50 bytes to a bufferbufferAppendExternal100     7.84ns         appendExternal 100 bytes to a bufferbufferAppendExternal250     7.76ns         appendExternal 250 bytes to a bufferbufferAppendExternal500     8.25ns         appendExternal 500 bytes to a bufferbufferBasic                10.88ns         buffer create, add one chunk, deletebufferBasicAlloc           12.29ns         buffer create, alloc block in chunk, deletebufferBasicCopy            12.02ns         buffer create, copy small block, deletebufferCopy                 14.25ns         copy out 2 small chunks from bufferbufferExtendChunk           4.69ns         buffer add onto existing chunkbufferGetStart              3.41ns         Buffer::getStartbufferConstruct             5.90ns         buffer stack allocationbufferReset                 4.79ns         Buffer::resetbufferCopyIterator2         6.46ns         buffer iterate over 2 copied chunks, accessing 1 byte eachbufferCopyIterator5         8.71ns         buffer iterate over 5 copied chunks, accessing 1 byte eachbufferExternalIterator2     8.96ns         buffer iterate over 2 external chunks, accessing 1 byte eachbufferExternalIterator5    23.46ns         buffer iterate over 5 external chunks, accessing 1 byte eachcondPingPong                3.09us         std::condition_variable round-tripcppAtomicExchg              6.64ns         Exchange method on a C++ atomic_intcppAtomicLoad               0.60ns         Read a C++ atomic_intcyclesToSeconds             6.30ns         Convert a rdtsc result to (double) secondscyclesToNanos               6.32ns         Convert a rdtsc result to (uint64_t) nanosecondsdispatchPoll                9.36ns         Dispatch::poll (no timers or pollers)div32                       4.79ns         32-bit integer division instructiondiv64                      20.22ns         64-bit integer division instructionfunctionCall                1.74ns         Call a function that has not been inlinedgenerateRandomNumber       17.21ns         Call to randomNumberGenerator(x)genRandomString             1.49us         Generate a random 100-byte valuegetThreadId                 1.73ns         Retrieve thread id via ThreadId::getgetThreadIdSyscall         41.04ns         Retrieve kernel thread id using syscallhashTableLookup           123.41ns         Key lookup in a 1GB HashTablehashTableLookupPf          70.57ns         Key lookup in a 1GB HashTable with prefetchinglfence                      3.00ns         Lfence instructionlockInDispThrd              3.52ns         Acquire/release Dispatch::Lock (in dispatch thread)lockNonDispThrd           324.23ns         Acquire/release Dispatch::Lock (non-dispatch thread)mapCreate                  21.15ns         Create+delete entry in std::mapmapLookup                  14.87ns         Lookup in std::map<uint64_t, uint64_t>memcpyCached100            14.52ns         memcpy 100 bytes with hot/fixed dst and srcmemcpyCached1000           21.79ns         memcpy 1000 bytes with hot/fixed dst and srcmemcpyCached10000         185.40ns         memcpy 10000 bytes with hot/fixed dst and srcmemcpyCachedDst100         93.36ns         memcpy 100 bytes with hot/fixed dst and cold srcmemcpyCachedDst1000       122.05ns         memcpy 1000 bytes with hot/fixed dst and cold srcmemcpyCachedDst10000      356.61ns         memcpy 10000 bytes with hot/fixed dst and cold srcmemcpyCold100             377.18ns         memcpy 100 bytes with cold dst and srcmemcpyCold1000            659.35ns         memcpy 1000 bytes with cold dst and srcmemcpyCold10000             3.18us         memcpy 10000 bytes with cold dst and srcmurmur3                    10.96ns         128-bit MurmurHash3 (64-bit optimised) on 1 byte of datamurmur3                    50.44ns         128-bit MurmurHash3 hash (64-bit optimised) on 256 bytes of dataobjectPoolAlloc            29.52ns         Cost of new allocations from an ObjectPool (no destroys)objectPoolRealloc           4.57ns         Cost of ObjectPool allocation after destroying an objectpingConditionVar            1.61us         Round-trip ping with std::condition_variableprefetch                   35.85ns         Prefetch instructionqueueEstimator              2.23ns         Recompute # bytes outstanding in queuerdtsc                       6.74ns         Read the fine-grain cycle countersegmentEntrySort            8.38ms         Sort a Segment full of avg. 100-byte Objects by agesegmentIterator             2.09ms         Iterate a Segment full of avg. 100-byte ObjectssessionRefCount            12.59ns         Create/delete SessionRefserialize                  55.41ns         cpuid instruction for serializesfence                      1.41ns         Sfence instructionspinLock                    9.60ns         Acquire/release SpinLockstartStopTimer             33.43ns         Start and stop a Dispatch::TimerspawnThread                 8.89us         Start and stop a threadthrowInt                    2.07us         Throw an intthrowIntNL                  2.55us         Throw an int in a function callthrowException              2.03us         Throw an ExceptionthrowExceptionNL            2.81us         Throw an Exception in a function callthrowSwitch                 6.04us         Throw an Exception using ClientException::throwExceptiontimeTrace                   7.56ns         Record an event using TimeTraceunorderedMapCreate         79.05ns         Create+delete entry in unordered_mapunorderedMapLookup         14.62ns         Lookup in std::unordered_map<uint64_t, uint64_t>vectorPushPop               3.90ns         Push and pop a std::vector