Вариант 3. Конечно, простой и безопасный.Однако параллельная файловая система, совместимая с POSIX производственного качества, обладающая достаточной производительностью, достаточной для того, чтобы ее кто-то действительно хотел использовать, обычно использует вариант 1 в сочетании с более или менее задействованным механизмом, чтобы избежать конфликтов, когда, например, несколько клиентов кэшируют один и тот же файл.
Как говорится, «В компьютерных науках есть только две сложные вещи: недействительность кэша и именования и ошибки« один за другим ».
Если файловая система должна быть POSIX-совместимой, вынужно изучить семантику POSIX fs и посмотреть, как она поддерживается fs при достижении хорошей производительности (в качестве альтернативы, какие части семантики POSIX она пропускает, например NFS).Интересно, что семантика POSIX fs восходит к 1970-м годам, и почти ничего не говорится о том, как поддерживать сетевые файловые системы.
Я не знаю конкретно о pvfs2, но обычно для того, чтобы соответствовать POSIX и обеспечить достойную производительность, вариант 1 может использоваться вместе с каким-то протоколом когерентности кэша (что, например, делает Luster).Для fsync () данные должны быть переданы на сервер и зафиксированы в стабильном хранилище на сервере (дисках или в кэше записи с батарейным питанием), прежде чем fsync () вернется.И, конечно, у клиента есть некоторое ограничение на количество грязных страниц, после чего он будет блокировать дальнейшую запись () в файл, пока некоторые из них не будут переданы на сервер.