@Override
    public void run() {
      init();
      Callback<Void> callback = new OperationCallback();
      long startTime = System.currentTimeMillis();
      long requestCount = 0;
      while (running) {
        try {
          slots.take();
          logger.trace("Slot available for new request");
          perfNioServerMetrics.requestRate.mark();
          requestCount++;
          RestRequest restRequest =
              new PerfRestRequest(perfConfig.perfRequestRestMethod, usermetadata, chunk, perfConfig.perfBlobSize);
          restRequest.getMetricsTracker().nioMetricsTracker.markRequestReceived();
          restRequestHandler.handleRequest(restRequest,
              new NoOpRestResponseChannel(restRequest, perfNioServerMetrics, callback));
        } catch (Exception e) {
          callback.onCompletion(null, e);
        }
      }
      long totalRunTimeInMs = System.currentTimeMillis() - startTime;
      logger.info("LoadCreator executed for approximately {} s and sent {} requests ({} requests/sec)",
          (float) totalRunTimeInMs / (float) Time.MsPerSec, requestCount,
          (float) requestCount * (float) Time.MsPerSec / (float) totalRunTimeInMs);
      Snapshot rttStatsSnapshot = perfNioServerMetrics.requestRoundTripTimeInMs.getSnapshot();
      logger.info("RTT stats: Min - {} ms, Mean - {} ms, Max - {} ms", rttStatsSnapshot.getMin(),
          rttStatsSnapshot.getMean(), rttStatsSnapshot.getMax());
      logger.info("RTT stats: 95th percentile - {} ms, 99th percentile - {} ms, 999th percentile - {} ms",
          rttStatsSnapshot.get95thPercentile(), rttStatsSnapshot.get99thPercentile(),
          rttStatsSnapshot.get999thPercentile());
      shutdownLatch.countDown();
    }
Creates an instance of LoadCreator;
@param perfConfig an instance of {@link PerfConfig} that determines behavior.
@param perfNioServerMetrics the {@link PerfNioServerMetrics} instance to use to record metrics.
@param restRequestHandler the instance of {@link RestRequestHandler} to use to handle requests.
ambry-tools/src/main/java/com/github/ambry/tools/perf/rest/PerfNioServer.java