Skip to content

Measuring the Papyrus Key Value Store

Kevin Huck edited this page Sep 13, 2019 · 1 revision

What is Papyrus?

From the website: "Papyrus is a programming system that provides features for scalable, aggregate, persistent memory. Papyrus provides a portable and scalable programming interface to access and manage parallel data structures on the distributed nonvolatile memory (NVM) storage. Papyrus consists of three components, virtual file system, C++ templates, and key-value store. Papyrus is portable across node-local NVM architecture and dedicated NVM architecture. Papyrus runs in a distributed fashion without any centralized control that may become a significant bottleneck in large-scale systems. Since Papyrus is implemented as a user-level library using MPI, and it does not require any type of system-level daemon or server, it runs on most existing HPC system."

Measuring on Summit

  1. Set up the environment:
module load gcc/7.3 cmake/3.15.2
module unload darshan-runtime
  1. install TAU.

  2. build Papyrus using this fork: https://code.ornl.gov/kevinhuck/papyrus. The fork has no structural modifications to the code, just the addition of PerfStubs instrumentation, which will provide timer and counter callbacks that the TAU tau_exec program can take advantage of.

export PROJECT=gen010
cd $MEMBERWORK/$PROJECT
git clone https://code.ornl.gov/kevinhuck/papyrus.git
cd papyrus
rm -rf build install
mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=`which gcc` -DCMAKE_CXX_COMPILER=`which g++` -DCMAKE_INSTALL_PREFIX=../install -DMPIEXEC=`which jsrun` -DMPIEXEC_NUMPROC_FLAG="-n" -DPAPYRUS_USE_FORTRAN=ON
make -j
make install
# Build the benchmark programs
cd ../kv/apps/sc19
make -j

Then, to benchmark using the basic program, submit a batch script like this one:

#!/bin/bash

#BSUB -P GEN010TOOLS
#BSUB -J nranks
#BSUB -o output.%J
#BSUB -e output.%J
#BSUB -W 1:00
#BSUB -nnodes 1
#BSUB -alloc_flags "NVME"

module load gcc/8.1.1
module unload darshan-runtime
export PATH=$MEMBERWORK/gen010/tau2_adios2/ibm64linux/bin:$PATH

KEYLEN=16
#VALLEN=131072
VALLEN=1048576
COUNT=10000
#RANKS=(1 2 4 8 16 20 40)
#RANKS=(672)
RANKS=(16)

tau="tau_exec -T adios2_hdf5,gnu,mpi,pthread,pdt -io -papi_components"
export TAU_PROFILE_FORMAT=merged
export PAPYRUSKV_REPOSITORY=/mnt/bb/$USER/pkv_workload
export PAPYRUSKV_DESTROY_REPOSITORY=1

export PAPYRUSKV_GROUP_SIZE=1
export PAPYRUSKV_CONSISTENCY=2
export PAPYRUSKV_SSTABLE=2
export PAPYRUSKV_CACHE_LOCAL=0
export PAPYRUSKV_CACHE_REMOTE=0
export PAPYRUSKV_BLOOM=1
for i in "${RANKS[@]}"; do
	jsrun -n 1 rm -r $PAPYRUSKV_REPOSITORY
    export TAU_PROFILE_PREFIX=basic_nvme_${PAPYRUSKV_GROUP_SIZE}_${PAPYRUSKV_SSTABLE}_${i}
    echo "jsrun -n $i --launch_distribution cyclic $tau ./basic $KEYLEN $VALLEN $COUNT $PAPYRUSKV_SSTABLE"
    jsrun -n $i --launch_distribution cyclic $tau ./basic $KEYLEN $VALLEN $COUNT $PAPYRUSKV_SSTABLE
done

The profile data should look something like this:

FUNCTION SUMMARY (mean):
---------------------------------------------------------------------------------------
%Time    Exclusive    Inclusive       #Call      #Subrs  Inclusive Name
              msec   total msec                          usec/call 
---------------------------------------------------------------------------------------
100.0           20     1:01.704           1     4319.71   61704510 .TAU application
 74.4       0.0879       45,938    0.428571    0.428571  107189102 papyruskv::Thread::ThreadFunc(void*) 
 30.5       18,811       18,811     9277.71           0       2028 MPI_Recv()
 24.8        9,842       15,313    0.142857     1.42857  107193967 virtual void papyruskv::Compactor::Run() 
 24.8           21       15,313    0.142857     7889.71  107193789 virtual void papyruskv::Listener::Run() 
 24.8        8,961       15,311    0.142857     2.42857  107178936 virtual void papyruskv::Dispatcher::Run() 
 13.8            6        8,521     1428.57     1428.57       5965 int papyruskv_get(int, const char*, size_t, char**, size_t*) 
 13.8          160        8,514     1428.57        4280       5960 int papyruskv_get_pos(int, const char*, size_t, char**, size_t*, papyruskv_pos_t*) 
 13.5          106        8,333        1340        2680       6219 int papyruskv::Dispatcher::ExecuteGet(papyruskv::DB*, const char*, size_t, char**, size_t*, int, int, papyruskv_pos_t*) 
 10.3       0.0423        6,349     2.42857     2.42857    2614447 void papyruskv::Dispatcher::Execute(papyruskv::Command*) 
 10.3        0.025        6,349     1.85714     1.85714    3418864 void papyruskv::Dispatcher::ExecuteMigrate(papyruskv::Command*) 
 10.3          100        6,349     1.85714     6723.43    3418850 void papyruskv::Dispatcher::ExecuteMigrateMemTable(papyruskv::Command*) 
 10.3        6,338        6,338     9352.14           0        678 MPI_Send()
  9.7         0.01        5,990    0.142857    0.428571   41930051 int papyruskv_barrier(int, int) 
  9.6       0.0144        5,896     1.14286     1.14286    5159857 void papyruskv::Dispatcher::EnqueueWaitRelease(papyruskv::Command*) 
  9.6        5,896        5,896     1.14286     1.14286    5159845 void papyruskv::Dispatcher::EnqueueWait(papyruskv::Command*) 
  8.9       0.0276        5,470     1.42857     1.42857    3829437 void papyruskv::Compactor::Execute(papyruskv::Command*) 
  8.9           40        5,470     1.42857        2796    3829418 void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) 
  8.8        5,427        5,427     2828.14           0       1919 write()
  7.4        4,274        4,587     1314.71     30678.3       3489 void papyruskv::Listener::ExecuteGet(papyruskv::Message&, int) 
  1.3          120          785     2629.43     3967.29        299 void papyruskv::Listener::ExecutePut(papyruskv::Message&, int) 
  0.8          513          513     1428.57     1.57143        359 int papyruskv_put(int, const char*, size_t, const char*, size_t) 
  0.6          394          394    0.142857           0    2764188 MPI_Finalize()
  0.6          352          352     1.42857           0     246969 MPI_Barrier()
  0.3        0.006          207    0.285714    0.857143     727339 int papyruskv_protect(int, int) 
  0.3          155          155     10781.3           0         14 open()
  0.1        0.829           52    0.142857    0.428571     368051 int papyruskv_close(int) 
  0.1           38           48    0.142857     148.429     341304 MPI_Init_thread()
  0.1           46           46     10781.6           0          4 close()
  0.0       0.0166           27    0.571429    0.142857      48028 void papyruskv::Listener::ExecuteBarrier(papyruskv::Message&, int) 
  0.0      0.00457           27    0.142857    0.142857     191998 void papyruskv::Compactor::EnqueueWaitRelease(papyruskv::Command*) 
  0.0           27           27    0.142857    0.142857     191966 void papyruskv::Compactor::EnqueueWait(papyruskv::Command*) 
  0.0           27           27     10767.9           0          3 lseek()
  0.0            8            8     1428.57           0          6 int papyruskv_delete(int, const char*, size_t) 
  0.0        0.217            5    0.285714    0.857143      18062 MPI_Comm_dup()
  0.0            4            4     90.4286           0         45 fopen()
  0.0            2            2     55.4286           0         52 fclose()
  0.0            1            2    0.142857    0.857143      15347 int papyruskv_finalize() 
  0.0        0.575        0.575     51.5714           0         11 read()
  0.0        0.393        0.393     2.28571           0        172 fseek()
  0.0       0.0156        0.226    0.142857    0.142857       1581 virtual papyruskv::Listener::~Listener() 
  0.0        0.211        0.211    0.428571           0        493 pthread_join
  0.0      0.00271         0.21    0.142857    0.285714       1472 virtual void papyruskv::Listener::Stop() 
  0.0        0.177        0.177    0.428571           0        413 MPI_Reduce()
  0.0        0.171        0.171     1.85714           0         92 fopen64()
  0.0       0.0829       0.0829     15.1429           0          5 update_cpu_stats
  0.0       0.0803       0.0803     15.1429           0          5 read_papi_components
  0.0        0.067        0.067     15.1429           0          4 parse_proc_meminfo
  0.0       0.0633       0.0633     15.1429           0          4 parse_proc_self_statm
  0.0       0.0616       0.0616     15.2857           0          4 read_net_stats
  0.0        0.055        0.055     15.1429           0          4 update_net_stats
  0.0        0.052        0.052    0.428571           0        121 socket()
  0.0         0.05         0.05     15.1429           0          3 update_io_stats
  0.0       0.0473       0.0473     1.14286           0         41 fwrite()
  0.0       0.0431       0.0431     15.2857           0          3 read_cpu_stats
  0.0       0.0417       0.0417     15.2857           0          3 read_io_stats
  0.0       0.0409       0.0409     1.42857           0         29 void papyruskv::Compactor::Enqueue(papyruskv::Command*) 
  0.0       0.0333       0.0333     1.42857           0         23 writev()
  0.0       0.0313       0.0313     1.28571           0         24 fscanf()
  0.0       0.0294       0.0294     2.42857           0         12 void papyruskv::Dispatcher::Enqueue(papyruskv::Command*) 
  0.0       0.0274       0.0274    0.142857           0        192 virtual papyruskv::Dispatcher::~Dispatcher() 
  0.0       0.0266       0.0266    0.857143           0         31 pthread_create
  0.0        0.012       0.0134    0.142857    0.142857         94 int papyruskv_open(const char*, int, papyruskv_option_t*, int*) 
  0.0        0.003       0.0109    0.571429    0.571429         19 void papyruskv::Dispatcher::ExecuteBarrier(papyruskv::Command*) 
  0.0      0.00986      0.00986    0.142857           0         69 connect()
  0.0        0.007        0.007    0.285714           0         24 recv()
  0.0      0.00486      0.00486    0.142857           0         34 MPI_Ssend()
  0.0      0.00486      0.00486    0.142857           0         34 send()
  0.0        0.003        0.003    0.142857           0         21 papyruskv::Listener::Listener(papyruskv::Platform*) 
  0.0      0.00257      0.00257    0.142857           0         18 papyruskv::Dispatcher::Dispatcher(papyruskv::Platform*) 
  0.0      0.00157      0.00157     1.14286           0          1 lseek64()
  0.0      0.00114      0.00114    0.285714           0          4 MPI_Get_processor_name()
  0.0     0.000857     0.000857    0.285714           0          3 MPI_Comm_rank()
  0.0     0.000714     0.000714    0.142857           0          5 papyruskv::Compactor::Compactor(papyruskv::Platform*) 
  0.0     0.000714     0.000714    0.142857           0          5 rewind()
  0.0     0.000571     0.000571    0.285714           0          2 MPI_Comm_size()
  0.0     0.000571     0.000571    0.142857           0          4 virtual papyruskv::Compactor::~Compactor() 
  0.0     0.000429     0.000429    0.142857           0          3 void papyruskv::Listener::ExecuteExit(papyruskv::Message&, int) 
  0.0            0            0    0.142857     227.143          0 Tau_papi_component_plugin_threaded_function(void*) 
  0.0            0            0    0.285714     11.8571          0 progress_engine 

There are is interesting POSIX data related to the PAPYRUS_REPOSITORY location on the NVM. For example, thread 6 of each node is the Compactor thread, which writes to the NVM (/mnt/bb):

NODE 0;CONTEXT 0;THREAD 6:
---------------------------------------------------------------------------------------
%Time    Exclusive    Inclusive       #Call      #Subrs  Inclusive Name
              msec   total msec                          usec/call 
---------------------------------------------------------------------------------------
100.0         0.01     1:47.194           1           1  107194172 .TAU application
100.0        0.195     1:47.194           1           1  107194162 papyruskv::Thread::ThreadFunc(void*) 
100.0     1:08.899     1:47.193           1          10  107193967 virtual void papyruskv::Compactor::Run() 
 35.7        0.193       38,294          10          10    3829437 void papyruskv::Compactor::Execute(papyruskv::Command*) 
 35.7          283       38,294          10       19572    3829418 void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) 
 35.4       37,965       37,965       19512           0       1946 write()
  0.0           44           44          30           0       1481 open()
  0.0        0.531        0.531          30           0         18 close()
---------------------------------------------------------------------------------------

USER EVENTS Profile :NODE 0, CONTEXT 0, THREAD 6
---------------------------------------------------------------------------------------
NumSamples   MaxValue   MinValue  MeanValue  Std. Dev.  Event Name
---------------------------------------------------------------------------------------
 1.951E+04  1.049E+06         24  5.241E+05  5.243E+05  Bytes Written
         0          0          0          0          0  Bytes Written : MPI_Init_thread() => fwrite()
         0          0          0          0          0  Bytes Written : MPI_Init_thread() => send()
         0          0          0          0          0  Bytes Written : MPI_Init_thread() => write()
 1.951E+04  1.049E+06         24  5.241E+05  5.243E+05  Bytes Written : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
       535         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.idx>
       535         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
       535  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.sst>
       535  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.blm>
         1  3.277E+04  3.277E+04  3.277E+04          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.idx>
      1024         24         24         24          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.sst>
      1024  1.049E+06  1.049E+06  1.049E+06          0  Bytes Written <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
 1.951E+04       5992     0.2963       1282       1623  Write Bandwidth (MB/s)
         0          0          0          0          0  Write Bandwidth (MB/s) : MPI_Init_thread() => fwrite()
         0          0          0          0          0  Write Bandwidth (MB/s) : MPI_Init_thread() => send()
         0          0          0          0          0  Write Bandwidth (MB/s) : MPI_Init_thread() => write()
 1.951E+04       5992     0.2963       1282       1623  Write Bandwidth (MB/s) : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1      728.2      728.2      728.2  5.291E-06  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.blm>
         1      728.2      728.2      728.2  5.291E-06  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024          4     0.4706      2.132     0.7799  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.idx>
      1024          4     0.4706      2.132     0.7799  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       2731      978.2       1650      365.1  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.sst>
      1024       2731      978.2       1650      365.1  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_1.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       2521       2521       2521  4.707E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.blm>
         1       2521       2521       2521  4.707E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
       535          6     0.8571      5.377     0.7246  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.idx>
       535          6     0.8571      5.377     0.7246  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
       535       5992      43.76       5590      485.6  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.sst>
       535       5992      43.76       5590      485.6  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_10.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1      780.2      780.2      780.2  5.721E-06  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.blm>
         1      780.2      780.2      780.2  5.721E-06  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024          4     0.2963      1.572     0.6645  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.idx>
      1024          4     0.2963      1.572     0.6645  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       3531      727.7       1487      504.1  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.sst>
      1024       3531      727.7       1487      504.1  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_2.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1130       1130       1130  3.326E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.blm>
         1       1130       1130       1130  3.326E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024          4     0.3871      2.623     0.5286  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.idx>
      1024          4     0.3871      2.623     0.5286  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       3692      958.5       2171      405.8  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.sst>
      1024       3692      958.5       2171      405.8  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_3.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1170       1170       1170  1.045E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.blm>
         1       1170       1170       1170  1.045E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024          4        0.8      2.719      0.504  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.idx>
      1024          4        0.8      2.719      0.504  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       4049       1052       2192      551.1  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.sst>
      1024       4049       1052       2192      551.1  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_4.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1092       1092       1092  3.101E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.blm>
         1       1092       1092       1092  3.101E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024          4     0.3158      2.553     0.5186  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.idx>
      1024          4     0.3158      2.553     0.5186  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       3531      530.7       1962        475  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.sst>
      1024       3531      530.7       1962        475  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_5.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1365       1365       1365  2.691E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.blm>
         1       1365       1365       1365  2.691E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024      3.429       0.48      2.679     0.6402  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.idx>
      1024      3.429       0.48      2.679     0.6402  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       4660      1.901       2335       1366  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.sst>
      1024       4660      1.901       2335       1366  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_6.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1311       1311       1311  3.287E-06  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.blm>
         1       1311       1311       1311  3.287E-06  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024      3.429        1.5      3.182     0.2969  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.idx>
      1024      3.429        1.5      3.182     0.2969  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       4681      15.27       3151       1744  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.sst>
      1024       4681      15.27       3151       1744  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_7.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1560       1560       1560  3.232E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.blm>
         1       1560       1560       1560  3.232E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024          4        1.5      3.241     0.2756  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.idx>
      1024          4        1.5      3.241     0.2756  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       4599       15.3       3170       1497  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.sst>
      1024       4599       15.3       3170       1497  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_8.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
         1       1638       1638       1638  2.625E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.blm>
         1       1638       1638       1638  2.625E-05  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.blm> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024      3.429        1.5      3.204      0.277  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.idx>
      1024      3.429        1.5      3.204      0.277  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.idx> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
      1024       4619       15.9       3357       1361  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.sst>
      1024       4619       15.9       3357       1361  Write Bandwidth (MB/s) <file=/mnt/bb/khuck/pkv_workload/0/mydb_0_0_9.sst> : papyruskv::Thread::ThreadFunc(void*) => virtual void papyruskv::Compactor::Run() => void papyruskv::Compactor::Execute(papyruskv::Command*) => void papyruskv::Compactor::ExecuteFlush(papyruskv::Command*) => write()
---------------------------------------------------------------------------------------