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(client, config.servers);
  
          for (long i = 0; i < config.tuples; i++) {
              ClientResponse response = client.callProcedure("Init", i, i);
              if (response.getStatus() != ClientResponse.SUCCESS) {
                  System.exit(-1);
              }
          }
  
          System.out.print("\n\n" + HORIZONTAL_RULE);
          System.out.println(" Starting Benchmark");
          System.out.println(HORIZONTAL_RULE);
  
          System.out.println("\nWarming up...");
          final long warmupEndTime = System.currentTimeMillis() + (1000l * config.warmup);
          while (warmupEndTime > System.currentTimeMillis()) {
              increment();
          }
  
          // reset counters before the real benchmark starts post-warmup
          incrementCount.set(0);
          lastPeriod.set(0);
          failureCount.set(0);
          lastStatsReportTS = System.currentTimeMillis();
  
          // print periodic statistics to the console
          benchmarkStartTS = System.currentTimeMillis();
          TimerTask statsPrinting = new TimerTask() {
              @Override
              public void run() { printStatistics(); }
          };
          Timer timer = new Timer();
          timer.scheduleAtFixedRate(statsPrinting,
                                    config.displayinterval * 1000,
                                    config.displayinterval * 1000);
  
          // Run the benchmark loop for the requested duration
          // The throughput may be throttled depending on client configuration
          System.out.println("\nRunning benchmark...");
          final long benchmarkEndTime = System.currentTimeMillis() + (1000l * config.duration);
          while (benchmarkEndTime > System.currentTimeMillis()) {
              increment();
          }
  
          // cancel periodic stats printing
          timer.cancel();
          // block until all outstanding txns return
          client.drain();
          // close down the client connections
          client.close();
      }