Отложенная запись

Требования синхронности записи в системе NFS относятся только к серверной части. Клиент может отложить операцию записи, следовательно, если данные будут утеряны в результате его выхода из строя, пользователь будет знать об этом. В любом случае правила предписывают использовать асинхронную запись для полных блоков (передавать запрос WRITE, но не ждать ответа) и отложенную запись для фрагментов блоков (производя WRITE позже). Большинство реализаций UNIX сбрасывают изменения на сервер каждые 30 секунд, а также при закрытии файла. Обработку таких запросов ведут клиентские демоны biod.

Хотя серверу необходимо выполнить операцию записи на надежный носитель перед отправкой ответного сообщения, он не обязан сохранять данные именно на диске. Сервер может использовать специализированную аппаратуру, гарантирующую отсутствие потерянных данных при своем отказе. Например, некоторые серверы имеют специальную энергонезависимую память, с подпиткой от батарейки, называемую NVRAM. Сервер сбрасывает буферы NVRAM на диске через определенные промежутки времени. Это позволяет ему быстро реагировать на запросы записи, так как перенос данных на NVRAM происходит намного быстрее, чем на диск. Дисковый драйвер может оптимизировать порядок записи с NVRAM на диск, добиваясь минимизации перемещения головок. Более того, несколько изменений одного и того же буфера может быть записано на диск одной операцией. Реализации системы NFS с применением NVRAM описаны в работах.

Также используется методика, называемая сбором записей (write-gathering), уменьшающая проблему появления узкого места при записи без использования дополнительных аппаратных устройств. Она построена на том факте, что типичные клиенты NFS загружают определенное количество демонов biod для обработки операций записи. После того как клиент откроет файл и произведет в него запись, ядро сбросит изменения в кэш и пометит его для отложенной записи. Когда клиент закроет файл, ядро передаст блоки на сервер. Если на клиентской машине загружено достаточное количество демонов biod, они могут вести запись параллельно. В результате серверы часто получают сразу несколько запросов на запись одного и того же файла.

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

Некоторые серверы оборудованы устройством бесперебойного питания (uninterruptible power supply, UPS), позволяющим сбросить дисковые блоки, размещенные в кэше, в случае возникновения проблем с электропитанием. Другие серверы просто игнорируют требование синхронной записи, принятое в NFS, считая, что крах системы происходит весьма редко. Разнообразие решений и обходных путей описанной проблемы указывает на ее степень серьезности. Протокол NFSv3 разрешает клиентам и серверам безопасно использовать асинхронную запись.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий