FIOコマンドで利用できるパラメータ
FIOコマンドで利用できるパラメータ
- (コマンド引数でもファイル読み込みでもどちらでもいけるみたい)
- よく使えそうなものは★、○。△は検証が必要。?は使い方不明。
パラメータ名 | 使えそう度合い | パラメータ説明(原文) | 解釈 |
---|---|---|---|
description | △ | Text job description | jobの説明。 |
name | ○ | Name of this job | job名。 |
filename | ★ | File(s) to use for the workload | 読み込むジョブファイル。 |
lockfile | △ | Lock file when doing IO to it | 実行に利用するロックファイル。 |
directory | △ | Directory to store files in | fioで読み書きするディレクトリ。 |
filename_format | ? | Override default $jobname.$jobnum.$filenum naming | fioで読み書きに使うファイル名フォーマット。デフォルトは、$jobname.$jobnum.$filenumらしい。 |
opendir | △ | Recursively add files from this directory and down | 再帰的にファイルの追加・削除していく。 |
rw | ★ | IO direction | ベンチマークの内容を決める。 |
bs | △ | Block size unit | ブロックサイズの指定。 |
ba | ? | IO block offset alignment | |
bsrange | △ | Set block size range (in more detail than bs) | bsオプションの詳細版かな |
bssplit | ? | Set a specific mix of block sizes | |
bs_unaligned | ? | Don't sector align IO buffer sizes | |
randrepeat | ○ | Use repeatable random IO pattern | ランダムアクセスを規則性を持ったランダムで行うということかな?例えば、全部2つ飛ばしとか。ランダムじゃあない気がするが… |
randseed | ○ | Set the random generator seed value | ここで設定された値をもとに、乱数を発生させて、ランダムアクセスするらしい。 |
use_os_rand | ? | Set to use OS random generator | |
norandommap | ? | Accept potential duplicate random blocks | |
ignore_error | ○ | Set a specific list of errors to ignore | 無視するエラーを指定する。設定例: ignore_error=EAGAIN,ENOSPC:122 |
rw_sequencer | ? | IO offset generator modifier | |
ioengine | ★ | IO engine to use | "IOをどう行うか決める。デフォルトはsyncらしい。指定しないとsync(同期I/O)になる。ググってみた感じ、syncかlibaioを使ってる人が多いみたい。Nullはデータ転送を発生させないらしく、デバックやテスト目的らしい。設定できる値として以下がある。sync,psync,vsync,psyncv,libaio,posixaio,solarisaio,windowsaio,mmap,splice,syslet-rw,sg,null,net,netsplice,cpuio,guasi,rdma,falloc,e4defrag,rbd,gfapi,gfapi_async,libhdfs,mtd,external |
iodepth | ○ | Number of IO buffers to keep in flight | "ファイルに対するIO書き込みのユニット数。IO waitを作り出すのに使ったりするらしい。デフォルトは1らしいけど、マルチスレッド実行させたいときは調整したほうがよいのかな?queue depthともいう。どれくらい平行して非同期読み書きを行うか。一度に受け取れるコマンドの数。" |
iodepth_batch | ○ | Number of IO buffers to submit in one go | IO数をどれだけ出すか。基本はiodepthと同じ値にする。 |
iodepth_batch_complete | ○ | Number of IO buffers to retrieve in one go | "どれだけのIOをすぐに回収するか。デフォルトは1で、理由はカーネルから回収するプロセスの最小IO=1を求めるから。" |
iodepth_low | △ | Low water mark for queuing depth | マルチスレッド処理の最中で、1つのスレッドが待機キューとして受け入れれる最大行数? |
size | ★ | Total size of device or files | "この測定で読み書きするファイルサイズ。Job全体のIOサイズ。単位はb。 |
fill_device | ? | Write until an ENOSPC error occurs | |
filesize | ○ | Size of individual files | 1ファイルのサイズ。このファイルサイズの合計がsizeパラメータらしい。 |
offset | ? | Start IO from this offset | |
offset_increment | ? | What is the increment from one offset to the next | |
number_ios | ? | Force job completion of this number of IOs | |
random_generator | △ | Type of random number generator to use | "ランダムの定義をどうするか決めれる?エンジンとしては以下が選択できるらしい。tausworthe、lfsr、tausworthe64 |
random_distribution | ? | Random offset distribution generator | |
percentage_random | ○ | Percentage of seq/random mix that should be random | "どのくらいの割合でランダムにするか設定できる。100%にするとすべてランダム、0%だとすべてシーケンシャルになる。読み取り、書き込み、トリムそれぞれに値を設定できる。設定例:読み取りに50%、書き込みに100%、トリムは0% percentage_random=50,100,0 |
nrfiles | ○ | Split job workload between this number of files | "このジョブで利用するファイル数を設定できる。デフォルトは1。" |
file_service_type | ? | How to select which file to service next | |
openfiles | ○ | Number of files to keep open at the same time | "同時にファイルを開いておける数。デフォルトは、nrfilesと同じみたい。 |
fallocate | ? | Whether pre-allocation is performed when laying out files | |
fadvise_hint | ? | Use fadvise() to advise the kernel on IO pattern | |
fsync | ○ | Issue fsync for writes every given number of blocks | "IOが |
fdatasync | △ | Issue fdatasync for writes every given number of blocks | fsyncと同じっぽい。メタデータの扱いが異なるみたいな記載がどこかにあった。 |
write_barrier | ? | Make every Nth write a barrier write | |
sync_file_range | ? | Use sync_file_range() | |
direct | ○ | Use O_DIRECT IO (negates buffered) | "ダイレクト転送。1は有効にする1、つまりtrueの時、 non-buffered IOを使う。(たいていは O_DIRECT)" |
atomic | ? | Use Atomic IO with O_DIRECT (implies O_DIRECT) | |
buffered | ○ | Use buffered IO (negates direct) | デフォルトは1(true) |
sync | ? | Use O_SYNC for buffered writes | ioengineのsyncと何が違うん? |
overwrite | ○ | When writing, set whether to overwrite current data | "ファイルへの書き込みを上書きするか、どうか。1=true=上書きする。デフォルトは1(true)" |
loops | ○ | Number of times to run the job | ジョブを何回繰り返すか。デフォルトは1。 |
numjobs | ○ | Duplicate this job this many times | 同じワークロードを実行するスレッドをいくつ生成するか。 |
startdelay | ○ | Only start job when this period has passed | ジョブの開始を遅延させる時間 |
runtime | ★ | Stop workload when this amount of time has passed | 実行最大時間 |
time_based | ? | Keep running until runtime/timeout is met | |
verify_only | ○ | Verifies previously written data is still valid | 実際の計測はしないで、確認用のモード。 |
ramp_time | ? | Ramp up time before measuring performance | |
clocksource | ? | What type of timing source to use | |
mem | ★ | Backing type for IO buffers | "バッファとして利用するメモリーのタイプ。以下が選択できるらしい。malloc 、shm 、shmhuge 、mmap 、mmaphuge 、mmapshared |
verify | ○ | Verify data written | "ファイル書き込みの検証をする。モードは以下から選択可能。md5,crc64,crc32c,crc32c-i,crc32,crc16,crc7,xxhash,sha512,sha256,sha1,meta,pattern,null, |
do_verify | ○ | Run verification stage after write | "書き込み後に正しい書き込みか検証する。デフォルトは1。 |
verifysort | △ | Sort written verify blocks for read back | |
verifysort_nr | △ | Pre-load and sort verify blocks for a read workload | |
verify_interval | △ | Store verify buffer header every N bytes | |
verify_offset | △ | Offset verify header location by N bytes | |
verify_pattern | △ | Fill pattern for IO buffers | |
verify_fatal | △ | Exit on a single verify failure, don't continue | |
verify_dump | △ | Dump contents of good and bad blocks on failure | |
verify_async | △ | Number of async verifier threads to use | |
verify_backlog | △ | Verify after this number of blocks are written | |
verify_backlog_batch | △ | Verify this number of IO blocks | |
trim_percentage | ? | Number of verify blocks to discard/trim | |
trim_verify_zero | ? | Verify that trim/discarded blocks are returned as zeroes | |
trim_backlog | ? | Trim after this number of blocks are written | |
trim_backlog_batch | ? | Trim this number of IO blocks | |
experimental_verify | ? | Enable experimental verification | |
write_iolog | ★ | Store IO pattern to file | IOパターンの書き出し。各Jobで異なるファイルを指定する必要がある。 |
read_iolog | ★ | Playback IO pattern from file | IOパターンの読み出し |
replay_no_stall | ? | Playback IO pattern file as fast as possible without stalls | |
replay_redirect | ? | Replay all I/O onto this device, regardless of trace device | |
exec_prerun | △ | Execute this file prior to running job | この処理実行前に指定されたコマンドを実行する |
exec_postrun | △ | Execute this file after running job | この処理実行後に指定されたコマンドを実行する |
ioscheduler | ? | Use this IO scheduler on the backing device | |
zonesize | ? | Amount of data to read per zone | |
zonerange | ? | Give size of an IO zone | |
zoneskip | ? | Space between IO zones | |
lockmem | ★ | Lock down this amount of memory (per worker) | "指定された量のメモリを未使用にできるらしい。メモリの少ない状態をシュミレートできるとのこと。" |
rwmixread | ★ | Percentage of mixed workload that is reads | "読み書きの割合。設定例:-rwmixread=70 70%read, 30%write" |
rwmixwrite | ○ | Percentage of mixed workload that is writes | たぶん、rwmixreadと一緒で引数の意味が逆なだけ。 |
nice | ★? | Set job CPU nice value | |
prio | ? | Set job IO priority value | このジョブのプライオリティを指定する。0が最高。0~7で指定する。 |
prioclass | ? | Set job IO priority class | このIOクラスのプライオリティを指定する。0が最高。0~7で指定する。 |
thinktime | △ | Idle time between IO buffers (usec) | IO発行の間で、Jobを止める。単位は microsecond(μs) |
thinktime_spin | ? | Start think time by spinning this amount (usec) | thinktimeが設定されている場合のみ有効 |
thinktime_blocks | ? | IO buffer period between 'thinktime' | thinktimeが設定されている場合のみ有効 |
rate | ★ | Set bandwidth rate | ジョブで使用される帯域幅。数はバイト/秒。 |
ratemin | ★ | Job must meet this rate or it will be shutdown | 最低限維持する帯域幅。これを下回るとジョブが失敗する。 |
ratecycle | ? | Window average for rate limits (msec) | |
rate_iops | ★ | Limit IO used to this number of IO operations/sec | |
rate_iops_min | ★ | Job must meet this rate or it will be shut down | |
max_latency | ★ | Maximum tolerated IO latency (usec) | レイテンシー。待ち時間。 |
latency_target | ? | Ramp to max queue depth supporting this latency | |
latency_window | ? | Time to sustain latency_target | |
latency_percentile | ? | Percentile of IOs must be below latency_target | |
invalidate | ★ | Invalidate buffer/page cache prior to running job | IO計測の前に、キャッシュを使わないようにしておく |
create_serialize | ○ | Serialize creating of job files | 作成されるファイルをシリアライズする。データのインターリーブを回避するために便利かも。 |
create_fsync | ○ | fsync file after creation | 作成後のデータファイルのfsync。デフォルトでtrue |
create_on_open | ? | Create files when they are opened for IO | |
create_only | ? | Only perform file creation phase | |
pre_read | △ | Pre-read files before starting official testing | ファイルが事前にメモリに読み込まれる。 |
cpumask | ★? | CPU affinity mask | |
cpus_allowed | ? | Set CPUs allowed | |
end_fsync | ? | Include fsync at the end of job | 書き込みが完了したらfsyncも完了する? |
fsync_on_close | ○ | fsync files on close | ジョブ終了時にfsyncがファイルをクローズする。 |
unlink | ★ | Unlink created files after job has completed | 該当のジョブファイルへのリンクを解除する。デフォルトはtrue。 |
exitall | ○ | Terminate all jobs when one exits | 1ジョブが終了すると残りの部分も終了する。 |
stonewall | ★ | Insert a hard barrier between this job and previous | 1ジョブがエラーで終了すると残りの部分も終了する。デフォルトでは各ジョブの終了するのを待つ。 |
new_group | ○ | Mark the start of a new group (for reporting) | 新しいレポートグループの開始。 |
thread | ★? | Use threads instead of processes | |
write_bw_log | ★ | Write log of bandwidth during run | 帯域幅のログ |
bwavgtime | ★ | Time window over which to calculate bandwidth (msec) | 指定された単位の帯域幅の平均。ミリ秒単位で値は指定する。 |
write_lat_log | ★ | Write log of latency during run | レイテンシーに関するログ |
write_iops_log | ★ | Write log of IOPS during run | IOPSのログ |
iopsavgtime | ★ | Time window over which to calculate IOPS (msec) | IOPSの平均時間 |
log_avg_msec | ? | Average bw/iops/lat logs over this period of time | デフォルトは0. |
group_reporting | ○ | Do reporting on a per-group basis | 結果をjob単位でなく、グループ単位で出力 |
zero_buffers | ○ | Init IO buffers to all zeroes | バッファーをゼロにする |
refill_buffers | ? | Refill IO buffers on every IO submit | バッファーをゼロの場合に補充できるらしい。 |
scramble_buffers | ? | Slightly scramble buffers on every IO submit | |
buffer_pattern | ? | Fill pattern for IO buffers | |
buffer_compress_percentage | ? | How compressible the buffer is (approximately) | |
buffer_compress_chunk | ? | Size of compressible region in buffer | |
clat_percentiles | ★ | Enable the reporting of completion latency percentiles | パーセンタイルの報告を有効にする。完了の待ち時間。 |
percentile_list | ? | Specify a custom list of percentiles to report | |
disk_util | ★ | Log disk utilization statistics | ディスク使用率の統計情報 |
gtod_reduce | ? | Greatly reduce number of gettimeofday() calls | |
disable_lat | ? | Disable latency numbers | |
disable_clat | ? | Disable completion latency numbers | |
disable_slat | ? | Disable submission latency numbers | |
disable_bw_measurement | ○ | Disable bandwidth logging | |
gtod_cpu | ○ | Set up dedicated gettimeofday() thread on this CPU | |
unified_rw_reporting | ★ | Unify reporting across data direction | データ方向、読み取り、書き取り、トリムなどの個別にログ。 |
continue_on_error | ○ | Continue on non-fatal errors during IO | |
error_dump | ○ | Dump info on each error | |
profile | ? | Select a specific builtin performance test | |
cgroup | ? | Add job to cgroup of this name | コントロールグループ名 |
cgroup_nodelete | ? | Do not delete cgroups after job completion | |
cgroup_weight | ? | Use given weight for cgroup | |
uid | ○ | Run job with this user ID | ユーザID |
gid | ○ | Run job with this group ID | グループID |
kb_base | ○ | How many bytes per KB for reporting (1000 or 1024) | |
unit_base | ○ | Bit multiple of result summary data (8 for byte, 1 for bit) | |
hugepage-size | ? | When using hugepages, specify size of each page | |
flow_id | ? | The flow index ID to use | フローのID |
flow | ? | Weight for flow control of this job | |
flow_watermark | ? | High watermark for flow control. This option should be set to the same value for all threads with non-zero flow. | |
flow_sleep | ? | How many microseconds to sleep after being held back by the flow control mechanism |
シーケンシャルとランダム
シーケンシャルは、順番。 ランダムは、ランダム。
ディスクI/Oでも、シーケンシャルアクセスとランダムアクセスがある。 シーケンシャルアクセスのほうが早いことは容易にわかる。
じゃあ、全部シーケンシャルにすればいいじゃんと思うが、 そうもいかない事情があるんでしょうなあ。。。 空きブロックを有効に使うためとかかねぇ~。
AWSのディスクI/O高速化のお勉強>のために>fioコマンドのお勉強>のために>ディスクアクセスの仕組み と、どんどんドツボにハマっていってるこの週末なのですが、ディスクアクセスの仕組みはまた今度にしよう。
↓ページあたりをまた今度読んで勉強しよ~