Вопрос:Выполняет ли JVM перехват дисковых транзакций/имеет свой собственный буфер диска?
Знаете ли вы, ребята, если звонки писать на диске перехватываются JVM? Имеет ли он свой собственный буфер между приложением и ОС? Более конкретно, может ли jvm сделать операцию записи асинхронного диска синхронной с приложением?
фон:
Я запуск некоторых приложений с помощью Berkeley DB, в синхронном режиме, то есть, база данных должны возвращать вызовы db.put(key, value)
только после того, как (key, value)
пары была благополучно сохраняется на диск , Для того, чтобы установить такие параметры, я:
envConfig.setDurability(Durability.COMMIT_SYNC);
dbConfig.setDeferredWrite(false);
Выше envConfig
является EnvironmentConfig
объекта и dbconfig
является DatabaseConfig
объектом, который я использую, чтобы настроить поведение базы данных.
В любом случае, указанная выше конфигурация должна сделать каждый вызов put(...)
, чтобы вызвать транзакцию на диске (которую вы можете измерить, т. Е. С помощью iostat
на Linux), правильно? Это было бы потому, что альтернатива (COMMIT_NO_SYNC с отложенной записью) вернет вызовы на put
, не дожидаясь диска, чтобы он мог буферировать большое количество данных, чтобы писать все сразу, повышая производительность за счет безопасности.
Проблема:
Я делаю несколько тысяч вызовов put
в секунду, но количество дисковых операций в секунду не меняется почти, установлен ли я или нет вышеуказанных параметров в базе данных.