2013-09-26 3 views
0

Вопрос:Выполняет ли 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 в секунду, но количество дисковых операций в секунду не меняется почти, установлен ли я или нет вышеуказанных параметров в базе данных.

ответ

0

Я не даю точного ответа на проблему. Но вот мой опыт работы с дисковыми операциями. В прошлом я столкнулся с проблемой, когда мое ожидание работы диска не выполнялось в указанное время.

Запись на диск всегда намного медленнее, чем запись в память. Я думаю, что запись на диск здесь зависит от аппаратного обеспечения, собственного API-интерфейса ОС и распределения ЦП, предоставляемого операции записи на диск. Таким образом, вы не должны ожидать, что запись на диске будет такой же быстрой, как вызов метода. На самом деле никакая программная логика не должна записываться с учетом определенного параметра производительности любых устройств, таких как принтер, диск и т. Д.

Если вы хотите сделать это, у вас должен быть метод сверки, который гарантирует, что операция будет завершена на 100% до следующей операции.

Смежные вопросы