問題タブ [aio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
alignment - open: ダイレクト I/O の引数が無効です
カーネル AIO APIを介してAIOの練習をしようとしていました。ここにいくつかのコードがあります:
しかし、私のopen()
呼び出しはまだ失敗します:
そのエラーを検索しました。直接 I/O の場合はアライメントを行う必要があると言う人もいます。次のコマンドを使用します。
私block size
は 4096 を取得しました。しかし、open() 呼び出しがまだ失敗するのはなぜですか?
linux - lio_listio: すべてのリクエストが完了するまで待つ方法は?
私の C++ プログラムでは、lio_listio
呼び出しを使用して、一度に多数 (最大数百) の書き込み要求を送信します。その後、いくつかの計算を行います。完了したら、次のバッチのリクエストを送信する前に、すべての未処理のリクエストが終了するのを待つ必要があります。これどうやってするの?
今、私は呼び出しaio_suspend
ごとに 1 つの要求をループで呼び出しているだけですが、これは醜いようです。struct sigevent *sevp
への引数を使用する必要があるようlio_listio
です。私の現在の推測では、次のようにする必要があります。
- メイン スレッドで、mutex を作成し、 への呼び出しの直前にロックし
lio_listio
ます。 - への呼び出しで
lio_listio
、このミューテックスをロック解除する通知関数/シグナル ハンドラを指定します。
これで目的の動作が得られるはずですが、確実に機能しますか? シグナルハンドラコンテキストからミューテックスを操作することは許可されていますか? 同じスレッドから再度ロックしようとしたり、別のスレッドからロックを解除しようとすると、pthread ミューテックスがエラー検出を提供して失敗する可能性があることを読みましたが、この解決策はデッドロックに依存しています。
シグナルハンドラを使用したコード例:
通知関数を使用したコード例 - 余分なスレッドが作成されるため、効率が低下する可能性があります。
c - aio_write は常にバッファ全体を書き込みますか?
write
バッファ全体を書き込んでいなくても(シグナルによって中断された場合)、POSIX関数が正常に戻ることができることを私は知っています。短い書き込みを確認して再開する必要があります。
しかしaio_write
、同じ問題がありますか?ないと思いますが、ドキュメントには記載されておらず、発生しないと述べているものは何も見つかりません。
linux - ブロックレイヤーで重複したLBAリクエスト
私はblktraceを使用して、IO負荷の高いマルチスレッドIOワークロードでのブロックレイヤーの動作を理解しています。ブロックレイヤーで重複したLBAリクエストを確認できます。たとえば、元のワークロードでLBA47568への書き込み要求は1つだけです。ただし、blktraceは、LBA47568を書き込む121のリクエストを示しています。以下は、Iイベント(リクエストキューに挿入されたIO)のみをフィルタリングするblkparseログの一部です。私はこの現象がなぜ起こるのか、そしてどうすればそれを取り除くことができるのかを理解しようとしています。IOマージを回避するために、/ sys / block / sdX/nomergeでnoopIOスケジューラと値2を選択しました。よろしくお願いします。
c++ - O_DIRECT フラグを指定して libaio を使用してファイルを読み取る
非同期 libaio を使用してファイルを読み取っています。以下のコードは、私がそれを行う方法を示しています。コードは正常に動作しますが、ファイル キャッシュを回避するために O_DIRECT モードに切り替えたいと考えています。25 行目を fd = open("./testfile", O_RDONLY|O_DIRECT); に変更すると、プログラムが正しく動作しなくなります。(io_getevents はデータを返しません)。O_DIRECT フラグでも正しく動作するようにプログラムを調整するのを手伝ってくれませんか?
前もって感謝します
OS: Ubuntu 12.10 3.5.0-26-ジェネリック)
linux - Linux の open(path, O_NONBLOCK | O_RDONLY | O_DIRECT) ブロックがファイルに読み込まれる
プログラムで非同期ディスクを読み取りたい。
サーバーには多くの HDD があり、1 つの HDD が遅いと、プログラムがブロックされます。通話を非同期にしたい。
私が電話した場合:
open(パス、O_NONBLOCK | O_RDONLY | O_DIRECT)
次にプリロードすると、最大8000マイクロ秒使用されますが、プログラムがブロックされます。
スレッドプールなしで非同期ディスク読み取りを有効にすることはできますか?
linux - O_ASYNCを使用したio_submitとファイルの違いは何ですか
非同期ディスク ファイル I/O に関するこのチュートリアルを読んでいますが、明確にはなっておらず、実際にはもっと混乱しています。
2 つの異なる非同期があります。チュートリアルによる I/O モデル:
でファイルを開き、 // を使用する非同期ブロッキングI
O_ASYNC
/epoll
O 。poll
select
glibc の AIO を使用した非同期 IO
glibc はスレッド プールを使用して AIO を実装しているため、この質問で「AIO」を使用して言及しているのは、むしろカーネル AIOです。io_submit
少なくとも概念的な観点からは、大きな違いはないio_submit
ようです。複数の I/O リクエストを発行できますが、 read
withO_ASYNC
を使用すると、ファイル位置で 1 つのリクエストを発行できます。
このガイドepoll
では、Linux AIO の代替としての使用についても言及しています。
epoll。Linux は、非同期 I/O のメカニズムとしての使用を限定的にサポートしています。
epoll
バッファ モードで (つまり、 なしでO_DIRECT
) 開かれたファイルへの読み取りの場合、ファイルが として開かれている場合O_NONBLOCK
、関連する部分がメモリに格納されるまで、読み取りは EAGAIN を返します。バッファリングされたファイルへの書き込みは、別のライトバックスレッドで書き出されるため、通常は即座に行われます。ただし、これらのメカニズムは、直接 I/O が提供する I/O の制御レベルを提供しません。
epoll
AIO の代替として使用する際の問題は何ですか? 言い換えれば、[新しいインターフェイス]io_submit
が解決する必要がある問題は何ですか?
c - 非同期 I/O 操作の実行中に終了する
aio_read()
プログラムは、最初にorを使用して非同期 I/O 操作を発行しaio_write()
、次に呼び出しexit()
て自分自身を終了させることができます。
私の質問は、exit()
非同期 i/o が完了するまで呼び出しが待機するか、プログラムが直接終了するかということです。