+ " --------------------------------------------\n"
+ "\n"
+ "a) Benchmark options: \n"
+ " --------------------------------------------\n"
+ " -op | None | XSEG operation:\n"
+ " | | [read|write|info|delete]\n"
+ " --pattern | None | I/O pattern [seq|rand]\n"
+ " -rc | None | Request cap\n"
+ " -to | None | Total objects\n"
+ " -ts | None | Total I/O size\n"
+ " -os | 4M | Object size\n"
+ " -bs | 4k | Block size\n"
+ " -tp | None | Target port\n"
+ " --iodepth | 1 | Number of in-flight I/O requests\n"
+ " --seed | None | Initialize LFSR and target names\n"
+ "\n"
+ "b) Object naming options: \n"
+ " --------------------------------------------\n"
+ " --prefix | bench | Add a common prefix to all object names\n"
+ " --objname | None | Use only one object with this name\n"
+ "\n"
+ "c) Data verification options: \n"
+ " --------------------------------------------\n"
+ " --verify | no | Verify written requests:\n"
+ " | | [no|meta|full]\n"
+ "\n"
+ "d) Progress report options: \n"
+ " --------------------------------------------\n"
+ " --insanity | sane | Adjust insanity level of benchmark:\n"
+ " | | [sane|eccentric|manic|paranoid]\n"
+ " --progress | both | Show progress of benchmark:\n"
+ " | | [req|io|both|no]\n"
+ " --interval | 5%% | Intervals at which progress is shown\n"
+ "\n"
+ "e) Misc options: \n"
+ " --------------------------------------------\n"
+ " --ping | no | Ping target before starting:\n"
+ " | | [yes|no]\n"
+ "\n"
+ "Additional information:\n"
+ " --------------------------------------------\n"
+ " * The -to and -ts options are mutually exclusive\n"
+ "\n"
+ " * The object name is always not null-terminated and\n"
+ " defaults to the following structure:\n"
+ " <prefix>-<seed>-<object number>\n"
+ "\n"
+ " where:\n"
+ " a. <prefix> is given by user or defaults to 'bench'\n"
+ " b. <seed> is given by user or defaults to a random value.\n"
+ " Its length will be 9 digits, with trailing zeros where\n"
+ " necessary\n"
+ " c. <object number> is out of the user's control. It is\n"
+ " calculated during the benchmark and is a 15-digit\n"
+ " number, allowing a maximum of 1 quadrillion objects\n"
+ "\n"
+ " So, if bench is called with the arguments:\n"
+ " --prefix obj --seed 999\n"
+ "\n"
+ " and <object number> is 9,the resulting object name will\n"
+ " be:\n"
+ " obj-000000999-000000000000009\n"
+ "\n"
+ " * The above object name structure can by bypassed with the\n"
+ " --objname <object name> argument. This implies the\n"
+ " following:\n"
+ "\n"
+ " a. -to option is strictly restricted to 1\n"
+ " b. -ts option defaults to (and can't be larger than)\n"
+ " the object size (-os argument)\n"
+ " c. --prefix is must be unused. If used, it produces an\n"
+ " error to alert the user\n"
+ "\n"
+ " * The progress report is printed by default at intervals of\n"
+ " 5%%.\n"
+ " There are three progress types:\n"
+ "\n"
+ " a. req: it prints the request status so far i.e. how many\n"
+ " requests have been subitted, received, failed etc.\n"
+ " b. io: it prints the bandwidth and IOPS status of the\n"
+ " elapsed 5%% of the benchmark\n"
+ " c. both: it combines the output of <req> and <io>.\n"
+ "\n"
+ " * Interval is commonly a percentage of max requests. This\n"
+ " means that when a user gives:\n"
+ " --interval 33%%\n"
+ "\n"
+ " the progress report will be printed 3 times during the\n"
+ " benchmark. Else, if the user wants to, he/she can give:\n"
+ " --interval 1234\n"
+ "\n"
+ " and the progress report will be printed every 1234\n"
+ " requests.\n"
+ "\n");