問題タブ [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.

0 投票する
1 に答える
1099 参照

c++ - Linux システム コール aio_write() がエラー コード 22 (EINVAL) で失敗する

Linux の aio_write と aio_read を使用するテスト ユーティリティがあります。このテスト ユーティリティは、静的ライブラリをラップしてテストします。このライブラリはマルチスレッドのブラック ボックスです。

今まで、それはうまくいきました。しかし、今回はこのブラックボックスに大きな変更を加えたため、テスト ユーティリティは最初の IO をコミットするとすぐに失敗します。この IO は errno 22 == EINVAL で戻ります。

aio_write のマニュアル ページに基づくと、このエラーは、次のフィールドのいずれかが無効な場合に発行されます --> aio_offset、aio_reqprio、aio_nbytesgdb 内で実行し、構造体 aiocb *入力パラメーター内の他のすべての値と同様に、それらの値をテストしました。私の結論は、入力パラメーターはすべて有効であるということです。

ブラックボックス内でスレッドが機能する方法に何か変化があったのではないかと思います。これがこの問題の原因であると思われます(他の説明が見つかりません)。

私が実際に理解しようとしているのは、どのシナリオで aio_write() が EINVAL エラー コードを返すのかということです。

明確にするために、ブラックボックスを古いバージョンに置き換えると、同じテストユーティリティを使用して正常に動作します.... (入力引数が悪いバージョンの入力引数に一致することがわかったので、ここでも入力引数をテストしました)。

0 投票する
2 に答える
208 参照

c - ファイルの ASCII 値を埋める

0 またはその他の文字で満たされたファイルを作成したい。これが私の機能です

これが私のメインです

したがって、出力はゼロ値で満たされたファイルである必要がありますが、ファイルはガベージで満たされています

なんで?どうしたの?

コードは次のとおりです。

sukurti - そのファイルが存在しない場合は新しいファイルを作成し、fill - 作成したファイルを埋める

編集:ファイルへの書き込みが終了することを知っています

0 投票する
1 に答える
1897 参照

c - io_submit() は、前の操作が完了するまでブロックします

libaioを介してLinux カーネル AIOを使用しており、前の読み取り操作が完了する前に次の読み取り操作を送信する必要があります。問題は、しばらくの間ブロックされ、間隔から推測できるように、前の操作が完了するのを待つことです。io_submit()

単一io_submit()の .

そのように機能しているのは私だけですか、それとも全員ですか? 2 番目のケースでは、実行可能なものを探しているのか、それともスレッド モデルにフォールバックする必要があるのか​​を尋ねてもよろしいですか?

0 投票する
1 に答える
406 参照

linux - Linux の close() がファイル I/O をブロックしないことに依存できますか?

ファイル I/O にLinux aio ( io_submit()/ ) を使用しています。io_getevents()一部の操作には同等の aio ( open()fsync()fallocate()) がないため、メイン スレッドに影響を与えずにブロックできるワーカー スレッドを使用します。私の質問は、close()このリストに追加する必要がありますか?

すべてのファイルはO_DIRECTXFS で開かれますが、質問に対する一般的な回答と、ファイルシステムとオープンモードの選択に関する特定の回答の両方に興味があります。

close()ワーカー スレッドはクリーンアップ パスで呼び出されることが多いため、ワーカー スレッドの使用は簡単ではないことに注意してくださいclose()。クリーンアップ パスは、ワーカー スレッド リクエストを起動して待機するのに適した場所ではありません。close()したがって、このシナリオではそれが非ブロッキングであることを願っています。

この質問では、「ブロッキング」とは、I/O 操作、または I/O 操作が完了したときにのみ解放される可能性のあるロックを待機することを意味しますが、ページ フォールト サービスは除きます。

0 投票する
1 に答える
298 参照

c++ - libaio のベクトル読み取りおよび書き込み関数は直接デバイスで使用できますか?

直接デバイスでの使用に関するlibaioのドキュメントには、読み取りオフセットと書き込みオフセットはセクターに整列する必要があると記載されています。たとえば、典型的なSSD / HDDでは512バイトの倍数です。Web で入手できる情報の一部には、ソースと宛先として使用されるユーザー空間バッファーも調整する必要があると書かれています。

直接デバイスを使用する場合、ベクトルの読み取り関数と書き込み関数のアラインメントの制限は何ですか? 私は、操作のディスク側は依然としてセクターを揃える必要があると思います (結局のところ、カバーの下でブロックデバイスと通信しています)。スキャッター ギャザー リストは、小さなチャンクをユーザー空間内の整列していないターゲットに分散させることができますか?

私は debian Jessie に取り組んでおり、libaio でのベクトル I/O のサポートを確認しました。

0 投票する
1 に答える
443 参照

arrays - io_submit はすべての Oracle dbwriter I/O を待機します

背景として、私は 80 年代からデータベースのプラットフォームをチューニングしてきました。そのため、私は過去に多くの非同期 I/O の問題に対処してきました。これは新しく、奇妙です。

まず、RHEL 7.1 64 ビット (3.10.0-229) で Oracle 12c と ASM を使用しています。合計 72 個の SSD を備えた 2 つの EMC CX4-960 アレイを使用しています。合計約 105K の読み取り/秒、65K の書き込み/秒を実行しています。(はい、かなり強力なストレージ バックエンドです!) ディスク書き込みレイテンシは 2 ~ 3 ミリ秒です。Oracle dbwriters がバッファーをフラッシュする場合 (通常は大きなバッチで非同期)、次の strace フラグメントは、io_submit() と io_getevents() が数ミリ秒で完了することを示しています。その後、すべての書き込みが完了するまでに数ミリ秒かかります。次のバッチへ。(提出されたブロックの詳細を io_submit() 行で削除しました:

ここまでは順調ですね。次に、テスト中の 2 つの Tegile t3600 アレイに切り替えました。これらの人はさらに高速で、より低いレイテンシーでより多くの IOPS を提供できます。問題は、50% 以上で Oracle の「空きバッファ待機」にすぐに遭遇することです。dbwriter は追いつくことができず、フォアグラウンド書き込みやあらゆる種類の悪いことが強制されます。これほど高速なストレージでは、dbwriter が十分なバッファをフラッシュできないことは驚くべきことです。しかし、 strace はその理由を示しています。iostat は、平均ディスク書き込みレイテンシーが約 0.7ms であることを示していることに注意してください。

そのため、何らかの理由で、517 ブロックの io_submit() が返されるまでに 505 ミリ秒かかります。なんで?

なぜこれが起こっているのでしょうか?アレイが何らかの方法で OS に書き込みを連続して発行するように指示しているようです。FWIW、アレイコントローラーで書き込みのライトバックキャッシュを有効にしました。したがって、OS自体に何かがあるようです

0 投票する
1 に答える
297 参照

linux - Linux で libaio を使用して FUA リクエストを送信する

libaio を使用してブロック デバイス (/dev/sdb など) にアクセスしようとしています。私は正常に動作しますが、libaio の API を使用して FUA (Force Unit Access) を実行する方法を知りたいと思っていました。

この件に関して私が見つけたドキュメントは非常に貧弱であると言わざるを得ません。