protected static void printUsage(final String shortName, final String message) {
    if (message != null && message.length() > 0) {
      System.err.println(message);
    }
    System.err.print("Usage: hbase " + shortName);
    System.err.println("  <OPTIONS> [-D<property=value>]* <command|class> <nclients>");
    System.err.println();
    System.err.println("General Options:");
    System.err.println(
      " nomapred        Run multiple clients using threads " + "(rather than use mapreduce)");
    System.err
      .println(" oneCon          all the threads share the same connection. Default: False");
    System.err.println(" connCount          connections all threads share. "
      + "For example, if set to 2, then all thread share 2 connection. "
      + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "
      + "if not, connCount=thread number");

    System.err.println(" sampleRate      Execute test on a sample of total rows. Default: 1.0");
    System.err.println(" period          Report every 'period' rows: "
      + "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows() / 10);
    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");
    System.err.println(
      " traceRate       Enable HTrace spans. Initiate tracing every N rows. " + "Default: 0");
    System.err.println(" latency         Set to report operation latencies. Default: False");
    System.err.println(" latencyThreshold  Set to report number of operations with latency "
      + "over lantencyThreshold, unit in millisecond, default 0");
    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'"
      + " rows have been treated. Default: 0");
    System.err
      .println(" valueSize       Pass value size to use: Default: " + DEFAULT_OPTS.getValueSize());
    System.err.println(" valueRandom     Set if we should vary value size between 0 and "
      + "'valueSize'; set on read for stats on size: Default: Not set.");
    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "
      + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");
    System.err.println();
    System.err.println("Table Creation / Write Tests:");
    System.err.println(" table           Alternate table name. Default: 'TestTable'");
    System.err.println(
      " rows            Rows each client runs. Default: " + DEFAULT_OPTS.getPerClientRunRows()
        + ".  In case of randomReads and randomSeekScans this could"
        + " be specified along with --size to specify the number of rows to be scanned within"
        + " the total range specified by the size.");
    System.err.println(
      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"
        + ". But for randomReads and randomSeekScans when you use size with --rows you could"
        + " use size to specify the end range and --rows"
        + " specifies the number of rows within that range. " + "Default: 1.0.");
    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");
    System.err.println(" encryption      Encryption type to use (AES, ...). Default: 'NONE'");
    System.err.println(
      " flushCommits    Used to determine if the test should flush the table. " + "Default: false");
    System.err.println(" valueZipf       Set if we should vary value size between 0 and "
      + "'valueSize' in zipf form: Default: Not set.");
    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");
    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");
    System.err.println(" multiPut        Batch puts together into groups of N. Only supported "
      + "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");
    System.err.println(" presplit        Create presplit table. If a table with same name exists,"
      + " it'll be deleted and recreated (instead of verifying count of its existing regions). "
      + "Recommended for accurate perf analysis (see guide). Default: disabled");
    System.err.println(
      " usetags         Writes tags along with KVs. Use with HFile V3. " + "Default: false");
    System.err.println(" numoftags       Specify the no of tags that would be needed. "
      + "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);
    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");
    System.err.println(" columns         Columns to write per row. Default: 1");
    System.err
      .println(" families        Specify number of column families for the table. Default: 1");
    System.err.println();
    System.err.println("Read Tests:");
    System.err.println(" filterAll       Helps to filter out all the rows on the server side"
      + " there by not returning any thing back to the client.  Helps to check the server side"
      + " performance.  Uses FilterAllFilter internally. ");
    System.err.println(" multiGet        Batch gets together into groups of N. Only supported "
      + "by randomRead. Default: disabled");
    System.err.println(" inmemory        Tries to keep the HFiles of the CF "
      + "inmemory as far as possible. Not guaranteed that reads are always served "
      + "from memory.  Default: false");
    System.err
      .println(" bloomFilter     Bloom filter type, one of " + Arrays.toString(BloomType.values()));
    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");
    System.err
      .println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "
        + "Uses the CompactingMemstore");
    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");
    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");
    System.err.println(
      " randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");
    System.err.println(" caching         Scan caching to use. Default: 30");
    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");
    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");
    System.err.println(
      " scanReadType    Set the readType option for scan, stream/pread/default. Default: default");
    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");
    System.err.println();
    System.err.println(" Note: -D properties will be applied to the conf used. ");
    System.err.println("  For example: ");
    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");
    System.err.println("   -Dmapreduce.task.timeout=60000");
    System.err.println();
    System.err.println("Command:");
    for (CmdDescriptor command : COMMANDS.values()) {
      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));
    }
    System.err.println();
    System.err.println("Class:");
    System.err.println("To run any custom implementation of PerformanceEvaluation.Test, "
      + "provide the classname of the implementaion class in place of "
      + "command name and it will be loaded at runtime from classpath.:");
    System.err.println("Please consider to contribute back "
      + "this custom test impl into a builtin PE command for the benefit of the community");
    System.err.println();
    System.err.println("Args:");
    System.err.println(" nclients        Integer. Required. Total number of clients "
      + "(and HRegionServers) running. 1 <= value <= 500");
    System.err.println("Examples:");
    System.err.println(" To run a single client doing the default 1M sequentialWrites:");
    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");
    System.err.println(" To run 10 clients doing increments over ten rows:");
    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");
  }
Compute a throughput rate in MB/s.
@param rows   Number of records consumed.
@param timeMs Time taken in milliseconds.
@return String value with label, ie '123.76 MB/s'
hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/PerformanceEvaluation.java