0

質問:

ディスクへの書き込みの呼び出しがjvmによって傍受されるかどうか知っていますか? アプリケーションと OS の間に独自のバッファーがありますか? より具体的には、jvm は、非同期のディスク書き込み操作をアプリケーションに対して同期しているように見せることができますか?

バックグラウンド:

私はいくつかのアプリケーションを Berkeley DB で同期モードで実行しています。つまり、データベースは、ペアが安全にディスクに永続化されdb.put(key, value)た後にのみ呼び出しを返すことになっています。(key, value)このようなオプションを設定するには、次のようにします。

envConfig.setDurability(Durability.COMMIT_SYNC);
dbConfig.setDeferredWrite(false);

上記envConfigEnvironmentConfigオブジェクトでdbconfigありDatabaseConfig、データベースの動作を調整するために使用するオブジェクトです。

とにかく、上記の構成は、すべての呼び出しを行ってディスク トランザクションを発生させることになっています (これは Linuxput(...)で測定できます)。iostatこれは、別の方法 (据え置き書き込みを伴う COMMIT_NO_SYNC) がput、ディスクを待たずに への呼び出しを返すため、大量のデータを一度に書き込むためにバッファーに入れ、安全性を犠牲にしてパフォーマンスを向上させるためです。

問題:

毎秒数千回の呼び出しを行ってputいますが、データベースで上記のオプションを設定してもしなくても、毎秒のディスク トランザクション数はほとんど変わりません。

4

1 に答える 1