Почему опция монтирования NFS "nocto" в Linux не предотвращает сброс при закрытии?

Я узнал о закрытой политике NFS, которая заставляет каждый файл сбрасываться на сервер после его закрытия, чтобы обеспечить согласованность между клиентами. (См. http://docstore.mik.ua/orelly/networking_2ndEd/nfs/ch07_04.htm.) Это приводит к значительному снижению производительности при попытке записи большого количества маленьких файлов.

Я знаю об опции экспорта "async", очевидно, но есть также опция монтирования клиента "nocto", которая должна отключить механизм закрытия для этого клиента. Насколько я могу судить, это должно помешать клиенту сбрасывать файл при его закрытии (а также не беспокоиться о проверке целостности кэша при его открытии). Однако, похоже, это не имеет никакого эффекта: клиент все еще сбрасывает файл на сервер при закрытии, вызывая массовое ожидание.

У кого-нибудь есть идеи, почему "nocto" не дает того эффекта, на который я надеялся? Опция "async" работает, как и ожидалось, но для меня более важно, чтобы клиентский кеш был корректным в этом случае, и это просто вызывает ошибки.

Пример: набор бездисковых узлов совместно использует удаленный корень, который иногда обновляется с одного из узлов. Не критично, что каждый файл сбрасывается сразу после его закрытия, так как никакой другой узел не пытается записать в тот же файл. Однако более важно, чтобы в случае сбоя сервера во время обновления набора пакетов клиент знал, какие данные еще не были записаны на диск сервера, чтобы он мог повторить попытку, когда сервер снова заработает. При использовании опции "асинхронный" этот сценарий может привести к потере данных (поскольку сервер лжет клиенту об удалении данных на диск), в то время как отключение функции "закрыть при открытии" (и использование "синхронизации" вместо "асинхронного") должно теоретически обеспечивает такое же повышение производительности без потенциальной потери данных (поскольку несколько файловых записей будут буферизироваться и сбрасываться на сервер вместе). Сервер и другие клиенты увидят слегка устаревшее представление файловой системы (на пару секунд). Это кажется мне разумным.

Проще говоря, "async" выполняет буферизацию на стороне сервера, что значительно ускоряет процесс. Я ожидаю, что "nocto" должен выполнять буферизацию на стороне клиента с аналогичным повышением скорости за счет некоторого лага в данных, появляющихся на других клиентах.

1 ответ

Со страницы руководства nfs(5):

Если nocto если указана опция, клиент использует нестандартную эвристику для определения того, когда файлы на сервере изменились.

С использованием nocto Эта опция может повысить производительность для монтируемых только для чтения монтировок, но ее следует использовать только в том случае, если данные на сервере изменяются только изредка. В разделе DATA AND METADATA COHERENCE обсуждается поведение этой опции более подробно.

Другие вопросы по тегам