質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

5017閲覧

linux fio(flexible I/O tester)コマンドについて

curl

総合スコア19

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2019/01/19 12:21

お世話になります。

DISK性能を測定するlinuxのfio(flexible I/O tester)コマンドについて質問があります。

fioのoptionでダイレクトIOに設定していて、
なおかつ非同期書き込み(libaio)を有効にしてDISK性能を測っている
記事を掲載しているWebサイトが多数あります。

optionの設定値 direct=1 (non-buffered I/O) ioengine=libaio(非同期 I/O)

質問ですが、ダイレクトIOを有効にしているとバッファーを使用しないため
同期IO(sync)となると思っており、ダイレクトIOと非同期IO(libaio)は相反する設定ではないのでしょうか?

ご存知の方がいらっしゃいましたら、ご回答頂けると幸いです。

以上、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ここでの「ダイレクトI/O」と「非同期I/O」は、別の概念です。ダイレクトI/O は質問者さんが書かれているようにバッファー(あるいはキャッシュ)を使わずにより直接的にデバイスへI/O操作を行うことを指しますが、非同期I/Oは、I/O操作のリクエスト発行、リクエストの処理、処理終了の通知受信と結果の取り込みの処理をバラバラ(非同期)に行い、効率的に処理を行えるよう用意された操作を指します。

HDDなどの外部デバイスの操作を例にすると、非同期I/Oの流れとしては(かなりザックリですが)

  1. ユーザープログラムがデバイスへデータ読み取りをリクエストする。システムはリクエストを受け付けると、「受け付けました」旨の終了コードなどをレスポンスとしてユーザープログラムに即時に返す。

  2. システムは受け付けたリクエストをもってデバイスへ読み取りリクエストを発行する。

  3. デバイスがリクエストに応じたデータ読み取りを終えると、レスポンスの送信であったり割り込みでシステムに通知する。

  4. システムがリクエストの実行完了をAPI仕様にのってユーザープログラムにコールバックやシグナル、割り込みなどで通知する。

  5. 実行完了を通知されたユーザープログラムは、リクエスト内容に応じたレスポンス(データ読み取り結果)を取得し、処理を継続する。

とのようなものになります。対して同期I/Oの場合、ユーザープログラムからのデータ読み取りリクエスト後、デバイスがデータ読み取り結果を返すまで戻らないかたちとなり、ユーザープログラムはその間は他の仕事ができません。外部デバイスとのI/O操作はCPU内部やメモリーとのそれとは比べものにならないほど遅いので、これを同期I/Oで処理するとユーザープログラムにとってかなりの不要な時間が費やされます。これを緩和し、最適なタイミングで動作するように処理を組み立てる仕組みが非同期I/Oです。

ですので、ダイレクトI/Oと非同期I/Oを組み合わせることでよりデバイスに対し効率的なI/O操作が期待でき、結果として速くなる(こともある)ということになります。

オライリーのサイトに参考になる記事がありました。こちらを読んでみると本回答より理解が深まるかもしれません。
バッファキャッシュとAIO(3)

投稿2019/01/19 13:51

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2019/01/21 14:26

ご回答ありがとうございます。 「非同期I/O」の認識を間違っていました。 わかりやすい説明ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問