Odu - IO benchmarking utility

This is first cut to keep review rolling. The patch allows me to
incorporate feedback from review as I keep working on the tool.
There are plenty of TODOs that might serve as a hint to reviewers
what I intend to do in the future, There are codes that look noop
which I have retained because it makes testing easier.
The current version parses only one argument (a file name) and
runs load for few seconds or a minute at max.

When run - output looks like this.
$ odu /tmp/f
===== Aggregate Stats =====
Runtime:50.15060829s IOs:303 write_size(MB):62.40
IOPS:4.79 LAT(us):208579.46 BW(MB/s):0.98

If I print thread specific stats and stage stats the output would look
like

$ odu /tmp/e
===== For generator-0 =====
Generate TimeInStage:344791630 IOPS:292.93 LAT(us):3413.78
BW(MB/s):58.01
Issue TimeInStage:24016252450 IOPS:4.21 LAT(us):237784.68 BW(MB/s):0.83
Verify TimeInStage:6253520 IOPS:16150.90 LAT(us):61.92 BW(MB/s):3198.20
Runtime:49.78938866s IOs:101 write_size(MB):20.80
IOPS:4.21 LAT(us):237784.68 BW(MB/s):0.83
===== For generator-1 =====
Generate TimeInStage:494067320 IOPS:204.43 LAT(us):4891.76
BW(MB/s):40.48
Issue TimeInStage:22197400730 IOPS:4.55 LAT(us):219776.24 BW(MB/s):0.90
Verify TimeInStage:1960320 IOPS:51522.20 LAT(us):19.41 BW(MB/s):10202.42
Runtime:52.46426601s IOs:101 write_size(MB):20.80
IOPS:4.55 LAT(us):219776.24 BW(MB/s):0.90
===== For generator-2 =====
Generate TimeInStage:634360370 IOPS:159.22 LAT(us):6280.80
BW(MB/s):31.53
Issue TimeInStage:24582622520 IOPS:4.11 LAT(us):243392.30 BW(MB/s):0.81
Verify TimeInStage:21145570 IOPS:4776.41 LAT(us):209.36 BW(MB/s):945.82
Runtime:48.96960358s IOs:101 write_size(MB):20.80
IOPS:4.11 LAT(us):243392.30 BW(MB/s):0.81
===== Aggregate Stats =====
Generate TimeInStage:1473219320 IOPS:205.67 LAT(us):4862.11
BW(MB/s):42.08
Issue TimeInStage:70796275700 IOPS:4.28 LAT(us):233651.07 BW(MB/s):0.88
Verify TimeInStage:29359410 IOPS:10320.37 LAT(us):96.90 BW(MB/s):2111.76
Runtime:52.47356284s IOs:303 write_size(MB):62.40
IOPS:4.28 LAT(us):233651.07 BW(MB/s):0.88

Utility saves the arguments to generator in a file called
"./output.confing" whose content may look like
[{"magic_number":5720826294568186926,"process_id":3,"name":"generator-0",
"generator_unique_id":0,"block_size":4096,"max_io_size":1048576,"align":
true,"seed":0,"target_name":"e","target_range":{"start":0,"end":6990506},
"target_type":"target_file","issuer_queue_depth":40,"max_io_count":100,
"sequential":true}...]

Tested: fx run-test odu_tests -- --nocapture

Change-Id: I219379093dfef14a0979678ce2e34a76fc5b9bbf
14 files changed
tree: d23c751d7a502c659e4b1f15da1ca7d2d76e9ce8
  1. .clang-format
  2. .dir-locals.el
  3. .gitattributes
  4. .gitignore
  5. .gn
  6. AUTHORS
  7. BUILD.gn
  8. CODE_OF_CONDUCT.md
  9. CONTRIBUTING.md
  10. LICENSE
  11. OWNERS
  12. PATENTS
  13. README.md
  14. boards/
  15. build/
  16. buildtools/
  17. bundles/
  18. docs/
  19. examples/
  20. garnet/
  21. peridot/
  22. products/
  23. rustfmt.toml
  24. scripts/
  25. sdk/
  26. src/
  27. third_party/
  28. tools/
  29. zircon/
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See the documentation.