Orion is a disk performance test tool which is provided by Oracle.
It used to simulate the characteristic of different type of database IO, to do pressure test on the disk.

For example:

  1. Small random IO: index range scan, access row from index.
  2. Large random IO: due to the disk striping, a sequential read is extended to more than one disks, so, on the disk level, the continuous read can be seem as random IO with size 1MB.
  3. Large Sequential IO: data loading / backup / restore. Also for parallel query which subprocess can coordinate together.
  4. mixed load.

Orion supports different type of files on the storage.

For example:

  1. raw disks, and simulate striping, as ASM.
  2. raw disks, don’t simulate striping, as used for datafile directly.
  3. filesystem, create files on it and use files for testing, don’t simulate striping

The options of Orion

-run

  1. simple: Tests random small (8K) IOs at various loads, show IOPS & Latency, then random large (1M) IOs at various loads, show Mbps
  2. normal: Tests combinations of random small (8K) IOs and random large (1M) IOs. Do testing for the combination of n*m matrix, for all of three testing.
  3. advanced: Tests the workload specified by the user using optional parameters
  4. dss: Tests with random large (1M) IOs at increasing loads to determine the maximum throughput. Only show Mbps
  5. oltp: Tests with random small (8K) IOs at increasing loads to determine the maximum IOPS. Only show IOPS and Latency

-testname

  1. Name of the test run. Orion read the file named .lun which is a list of disks or files for testing.

-num_disks

  1. Number of disks (physical spindles). This number is used to gauge the range of loads that Orion should test at. Increasing this parameter results in Orion using heavier IO loads. Default is the number of LUNs in .lun.

-size_small

  1. Size of small IOs in KB. Default is 8. Normally, it should be set to the same as db_block_size of the database you want to create.

-size_large

  1. Size of large IOs in KB. Default is 1024. It should be set to the maximum IO size of OS. Normally, it is 1MB for the most of OS

-type

  1. Type of large IOs (rand, seq). Default is rand.
  2. The full table scan is Randomly distributed large IO
  3. And the data loading / backup / restore and parallel query are Sequential streams of large IOs

-num_streamIO

  1. Number of concurrent IOs per stream. This parameter is only used if -type is seq. Default is 4.
  2. It is equal to a query in Oracle database with /+parallel(a,4)/

-simulate

  1. Orion tests on a virtual LUN formed by combining the specified LUNs in one of these ways. This parameter is typically only used if -type is seq. Default is raid0.
  2. concat - A serial concatenation of the LUNs. Each sequential stream issues IOs to only one LUN.
  3. raid0 - A RAID-0 mapping across the LUNs. Each sequential stream issues IOs across all LUNs, using RAID-0 striping.
  4. If you are using ASM, regardless whether you do striping in storage, the ASM will do striping again on the ASM level, so, it should be set to raid0.
  5. If you are using raw devices as datafiles, it should be set to concat. Orion does testing on each file.

-write

  1. Percentage of IOs that are writes (SEE WARNING ABOVE). Default is 0.
  2. For read testing, set to 0, for write testing, set to 100, for mixed, set to 1-99

-cache_size

  1. Size in MBs of the array’s cache. Unless this option is set to 0, Orion issues a number of unmeasured, random IOs before each large sequential data point.
  2. These IOs fill up the storage array’s cache (if any) with random data so that IOs from one data point do not result in cache hits for the next data point. Reading tests are preceded with junk reads and writing tests are preceded with junk writes.
  3. If specified, this ‘cache warming’ is performed until cache_size MBs of IO have been read or written. Default behavior is to issue 2 minutes of unmeasured random IOs before each data point.
  4. This parameter is used to reduce the impact of the cache on the test. To large value consumes a lot of additional time for testing

-duration

  1. Duration of each data point in seconds. Default is 60.

-nosleep_on_delay

  1. Polls the timer instead of sleeping when a delay set between IO requests

-iorate_small

  1. Rate of small IOs that needs to be maintained for duration of test. Not used by default.

-iorate_large

  1. Rate of large IOs that needs to be maintained for duration of test. Not enabled by default

-num_small

  1. Number of outstanding small IOs. This parameter controls the small IO load. Only used if -matrix is point, col, or max. No default.

-num_large

  1. This parameter controls the large IO load. For -type rand, number of outstanding large IOs. For -type seq, number of sequential IO streams. Only used if -matrix is point, row, or max. No default.

-matrix

  1. An Orion test consists of multiple data point tests. These data point tests can be represented as a two-dimensional matrix. Each column in the matrix represents data point tests with the same small IO load, but varying large IO loads. Each row represents data point tests with the same large IO load, but varying small IO loads. An Orion test can be for a single point, a single row, a single column, or the whole matrix, depending on the matrix option setting below. Default is basic.
  2. basic - Test small IOs only, then large IOs only.
  3. detailed - Test entire matrix.
  4. point - Test with num_small small IOs, num_large large IOs.
  5. col - Test a varying large IO load with num_small small IOs.
  6. row - Test a varying small IO load with num_large large IOs.
  7. max - Test varying loads up to the num_small and num_large limits.

-hugenotneeded

  1. Tells Orion to allocate regular pages when huge pages are not available. With out this option, on systems that support hugepages, Orion errors out when it cannot allocate sufficient huge pages. -hugenotneeded is not set by default.
  2. If huge page is not configured yet, use this parameter.

-verbose

  1. Prints tracing information to standard output if set. Not set by default.

-large_io_hist

  1. Prints detailed output with Large IO latency histogram and other detailed information for large and small IOs. Not enabled by default.
  2. Latency information will be reported in the summary and hist, but the chart of IOPS and latency is still empty.

-datainput

  1. Name of the input file for data to be written.

-is_lgwr

  1. If set to true will run test using VIP level QOS, assuming the underlying transport supports it.
  2. VIP: Versatile Interface Processors
  3. QOS: Quality of Service

-is_rdma_lgwr

  1. If set to true will run test using VIP level and rdma hint assuming the underlying transport supports it.
  2. rdma: Remote direct memory access

-no_hi_bw

  1. If present won’t run as high-bandwidth client

-iotype

  1. IO Modes: async, directio, setall, none. (Default is setall)
  2. If using filesystem for database, set it as filesystemio_options in database.

-rtstats_interval

  1. Interval (in seconds) at which the cumulative statistics of the last interval is printed on stdout

-hist_granule

  1. Granularity (in usecs) of latency histogram

-filetype

  1. Access filetype to use. Consult skgfr.h:skgfrftnm for valid values.

-writereadonce

  1. Set the IORM Read/Write Once flag.

Normally,  we can do the following tests:

large IO read
/u01/app/18.3.0/grid/bin/orion -run dss -testname dbtest -large_io_hist -hugenotneeded -verbose

small IO read
/u01/app/18.3.0/grid/bin/orion -run oltp -testname dbtest -hugenotneeded -verbose

Parallel 32 read
/u01/app/18.3.0/grid/bin/orion -run advanced -testname dbtest -write 0 -matrix max -num_large 1 -num_small 0 -type seq -num_streamIO 32 -hugenotneeded -verbose

DBWR write, 8 processes
/u01/app/18.3.0/grid/bin/orion -run advanced -testname dbtest -size_small 8 -write 100 -matrix max -num_large 0 -num_small 8 -hugenotneeded -verbose

Data loading, parallel 32
/u01/app/18.3.0/grid/bin/orion -run advanced -testname dbtest -size_small 32 -write 100 -matrix max -num_large 1 -num_small 0 -type seq -num_streamIO 32 -hugenotneeded -verbose /u01/app/18.3.0/grid/bin/orion -run advanced -testname dbtest -size_small 8 -write 100 -matrix max -num_large 8 -num_small 0 -hugenotneeded -verbose

Mixed
/u01/app/18.3.0/grid/bin/orion -run normal -testname dbtest -hugenotneeded -verbose


The following options we can use to adjust the testing
to reduce the time for testing
-duration 10

to ignore the impact of cache and save testing time
-cache_size 0

if raw devices are used as datafiles directly
-simulate concat

if the db_block_size is not 8K
-size_small 32

if the IO maximum size is not equal to 1M
-size_large 2048