fioのioDeepthとキューストレージの深さは同じですか?それでは、fioコマンドでiolengthパラメータを使用してキューの深さを制御する方法は何ですか?これには並列ジョブを作成しますが、ジョブを並列に実行するオプションもあります(これはマイナーまたはクラッシュではありませんか?)
私はfioがワークロードをどのように制御するか(特にこのioの深さで)理解しようとしています。 ioDeepthパラメータについて詳しく説明できる人はいますか?
アップデート#1
私の問題も柔軟なI/Oテスターフォーラムに質問する。私がそこで受けた答えはこんな感じです。
こんにちは、
2018年7月28日14:26に、Jeevan Patnaikは次のように書きました。こんにちは、
fioのIoDepthとキューストレージの深さは同じですか?したがって、fioでiolengthパラメータを使用してキューの深さを制御する方法は何ですか?
fio iolengthとオペレーティングシステムでI / Oをストレージにコミットすることによって達成されるI / Oの深さは互いに関連していますが、ほとんどの場合必ずしも同じではなく、関係はオペレーティングシステム/ストレージ/使用量によって大きく異なります。 fio ioengine/fio パラメーター。デフォルトでは、fioは特定の方法でオペレーティングシステムにI / Oを送信します。オペレーティングシステムにI / Oを送信する方法に応じて、より最適化された/異なる方法で送信することを選択できます(たとえば、要求のバッチ、大きすぎる要求をより小さな部分に分割する、I / O遅延など)。 .)).さらに、で述べたようにどのように、iolengthはasync ioengineにのみ影響します(テキストにはLinuxでdirect = 1を使用する必要があるという警告が含まれています)。
注文する?これには並列ジョブを作成しますが、ジョブを並列に実行するオプションもあります(これはマイナーまたはクラッシュではありませんか?)
簡単な要約を行いますが、キャッシュ/先読み/挿入/ブロックデバイス層(RAID/LVMなど)を扱うことはありません。
同期式fio I / Oエンジンは、単一のI / Oをオペレーティングシステムに送信し、受信したとおりに「承認」されるのを待ってから別のI / Oを送信するなどの操作を実行します。
fio I / Oエンジンが真の非同期方式でオペレーティングシステムにI / Oを送信できる場合(上記のリンクを参照)、コアは以前のI / Oが「新しい入力/出力をコミットする前に「承認済み」が発生します。 ioDeepth が 1 の場合、同期 I/O エンジンのように動作する必要がありますが、ジョブが io 深さを 32 と指定すると仮定します。待機するように選択します(透かしが何であるか、特定の時間にコミットされた数が何であるか)、iolength_batch_ *オプションによって制御されます。これは効率を向上させ、より高いスループットを達成できますが、長くなります。
fioは並列性を生成しませんペオ職業ioデプスのために並列fio操作を使用することは、特定の時間に送信された同時I / Oの量を増やす別の方法です(別のスレッド/プロセスを使用して)、同じデバイスで両方を使用すると同時に動作します(したがって2 つの場合、io 深さ 16 で非同期 I/O を送信する fio ジョブの場合、各ジョブは実際には 32 個の I/O を受け取ることができます。デバイスがあり、速度が速すぎてI / Oが非同期的に送信されても、1つのCPUが追いつくことはできません)。
私はfioがワークロードをどのように制御するか(特にこのioの深さで)理解しようとしています。 ioDeepthパラメータについて詳しく説明できる人はいますか?
私はあなたがstackexchangeでもこの質問をしたことを覚えています(fioのioDeepthは正確に何ですか?)。あなたはリンクが欲しいかもしれません https://www.spinics.net/lists/fio/msg07190.html同様の問題がある他の人を助けるために...
答え1
これは小さなことではありませんか?
直接IOを想定すると、iolength =タスクの必要に応じて動作します。
iolength = 2の順次ジョブは、一度に2つの順次IO要求を送信します。
numjobs = 2の順次ジョブには2つのスレッドがあり、各スレッドは順次IOを送信します。
これは異なるIOモードです。後者は、デバイスキャッシュによって物理IOが再び1倍に減少しても、IOバスに2倍の帯域幅を生成します。 (デバイスのキャッシュによって複数のファイルとランダムファイルを使用しない限り、2つの操作が同期状態を維持する傾向があるようですfile_service_type=
。)IOが同期的に記録されると(sync = true)、デバイスは異常なレベルの最適化(例:重複排除(SSDコントローラ)を実行しない限り、物理IOはまったく減少しません。
答え2
~によるとLinuxカーネルドキュメント:
.. オプション::io深さ=int
ファイルに対して引き続き実行される入出力単位の数。追加されます。深さ1を超えると、同期したioengineには影響しません(
verify_async
:option:を使用するときは小さいレベルを除く)。非同期エンジンでも、所望の深さを達成できないようにするオペレーティングシステムの制限を適用できます。これは、Linuxでlibaioを使用し、direct
そのオペレーティングシステムでバッファリングされたI / Oが非同期ではないため、:option:\ = 1が設定されていない場合に発生する可能性があります。 fio出力のI / O深さ分布を注意深く観察して、達成された深さが期待どおりになるようにしてください。デフォルト:1。
このチュートリアルのタイトルは次のとおりです。Fio出力の説明次の例があります。
Fioには、特定の時間にオペレーティングシステムに発行されるIOの量を制御するiolength設定があります。これは完全にアプリケーション側であるため、デバイスのIOキューと区別されます。この例では、iolengthが1に設定されているため、IO深度は常に1 100%です。
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
送信と完了は、それぞれfioが一度に送信したIOの数と一度に完了した数を示します。この出力を生成するために使用されるflutterテストの場合、iolengthのデフォルト値は1なので、IOの100%が一度に1つずつコミットされ、結果をバケット1-4に入れます。デフォルトでは、これはio深さが1より大きい場合にのみ重要です。