CentOSは同期書き込みまたは非同期書き込みを使用しますか?これを確認または変更する方法はありますか?
答え1
デフォルトでは、すべての書き込みは非同期です。
O_DIRECT|O_SYNC
open(2)
-o sync
アプリケーションレベルのフラグまたはファイルシステムレベル(mountコマンドのオプション)で同期するように設定できます。
答え2
Red Hatの(かなり古い)ページによると12.5。非同期I/O使用量の確認、非同期I / Oをサポートするためにlibaioを使用してください。アプリケーションはライブラリに関連付けられたりリンクされたりしません。有効化または無効化に関する言及はありません。アプリはただ使用図書館。このページでは、使用量を確認するために実行できるチェックを示します/proc/slabinfo
。
私のCentOS 6システムには2466のファイルがあり、/usr/bin
3つだけlibaioに関連付けられています。
- やり直す
- qemu-img
- qemu-io
この機能を使用するいくつかのプログラムがありますが、多くはありません。一部の人々はこれをバッファキャッシュと混同します。
追加資料:
UNIXおよびLinuxシステムのI / O操作は通常、ファイルシステムキャッシュを介して行われます。これ自体は問題ではありませんが、この追加処理にはリソースが必要です。ファイルシステムキャッシュをバイパスすると、CPU 要件が減少し、データベース以外のファイル操作のためにファイルシステムキャッシュが取得されます。 raw デバイスの操作は自動的にファイルシステムキャッシュをバイパスします。
答え3
/u/jiliagreによる言及する、デバイス固有のフラグO_SYNC
またはマウント時にファイルを強制的に開くことができます( "willtain"-o sync
を使用して、ほとんどのオープンマウントポイントをmount -o remount,sync <mtpt>
同期モードが有効になっていない場合、複雑な書き込み保存アルゴリズムが動作します。書き込み保存アルゴリズムは、次のように設計されています。限界IOタスク。ここでは、ユーザーがシステムが時折(期限後またはフラッシュする「ダーティ」ページのしきい値がある場合)にのみディスクフラッシュを実行することを好むと仮定します。フラッシュするには、カーネルスレッドにいくつかのタスクを割り当て、カーネルスレッドを「目覚めさせる」だけですpdflush
。
sysctl
一部のシステム変数を操作することで、書き込み/proc/
保存の動作を制御できます。あなたは主に以下に興味があります:
vm.dirty_background_ratio = 0
これは本質的にすべてのダーティ書き込みを目覚めさせ、フラッシュすることを強制します。
vm.dirty_writeback_centisecs = 1
これにより、ダーティページが1/100秒ごとにフラッシュされます。後者をゼロに設定したいかもしれませんが、これはタイマーを効果的に無効にします。 0に設定したいかもしれませんが、vm.dirty_ratio
少なくとも2.6.25では値が5%以下に制限されており、ここでは役に立ちません。
注#1:書き込み保存アルゴリズムはレート制限動作を採用しています。アルゴリズムが複雑であるため、完全にはわかりませんが、そのように多くのページがディスクにフラッシュされると、設定された番号に対してpdflushが呼び出され、次の瞬間にpdflushが予約されます。 pdflustedに送信された最初のチャンクの後に別のページが広がると、1秒タイマーの直前に別のチャンクが予約されると思います。
注#2:pdflushが書き込み操作を「キュー」にプッシュするブロックレベルのIOスケジューラにデータを送信するため、まだ完全に同期されていません。しかし、これが同期モードとどのように異なるかはわかりません。
PS:いいねを押すのを忘れないでください。この美しい答え。