docs: public void runBenchmark() throws Exception {
          System.out.print(HORIZONTAL_RULE);
          System.out.println(" Setup & Initialization");
          System.out.println(HORIZONTAL_RULE);
  
          // connect to one or more servers, loop until success
          connect(config.servers);
  
          // preload keys if requested
          System.out.println();
          if (config.preload) {
              System.out.println("Preloading data store...");
              for(int i=0; i < config.poolsize; i++) {
                  client.callProcedure(new NullCallback(),
                                       "STORE.upsert",
                                       String.format(processor.KeyFormat, i),
                                       processor.generateForStore().getStoreValue());
              }
              client.drain();
              System.out.println("Preloading complete.\n");
          }
  
          System.out.print(HORIZONTAL_RULE);
          System.out.println(" Starting Benchmark");
          System.out.println(HORIZONTAL_RULE);
  
          // create/start the requested number of threads
          Thread[] kvThreads = new Thread[config.threads];
          for (int i = 0; i < config.threads; ++i) {
              kvThreads[i] = new Thread(new KVThread());
              kvThreads[i].start();
          }
  
          // Run the benchmark loop for the requested warmup time
          System.out.println("Warming up...");
          Thread.sleep(1000l * config.warmup);
  
          // signal to threads to end the warmup phase
          warmupComplete.set(true);
  
          // reset the stats after warmup
          fullStatsContext.fetchAndResetBaseline();
          periodicStatsContext.fetchAndResetBaseline();
  
          // print periodic statistics to the console
          benchmarkStartTS = System.currentTimeMillis();
  
          schedulePeriodicStats();
  
          // Run the benchmark loop for the requested warmup time
          System.out.println("\nRunning benchmark...");
          Thread.sleep(1000l * config.duration);
  
          // stop the threads
          benchmarkComplete.set(true);
  
          // cancel periodic stats printing
          timer.cancel();
  
          // block until all outstanding txns return
          client.drain();
  
          // join on the threads
          for (Thread t : kvThreads) {
              t.join();
          }
  
          // print the summary results
          printResults();
  
          // close down the client connections
          client.close();
      }