Comments 8
для «серверных» ssd (и sata, и nvme) безопасно просто использовать O_DIRECT без fsync, при этом запись пойдёт мимо буфера операционной системы сразу на накопитель, где уже будет защищена его схемами PLP.
для виртуалок, думаю, то же самое.
А мета-информация, например запись о длине файла и т.д.? Не знаю как под Linux, но под Windows также возможна запись без буферизации однако, что бы обновить размер файла, всё равно придется вызывать FlushFileBuffers (fsync).
да, разумеется, если размер файла изменился, или файл изначально был sparse, то метаинформацию надо обновить. ровно то же написано в мане к sync_file_range.
А как это сделать без fsync()?
никак.
речь про то, что вместо того, чтобы вызывать sync_file_range, можно открыть файл с O_DIRECT, результат будет тот же, производительность, скорее всего, выше (меньше сисколов, не забивается pagecache).
По своей практике, могу сказать что отказ от буферизации на скорость записи не влияет, либо влияет в меньшую сторону. Да и заменить одно на другое не так просто. Это все-равно что поменять I/O API. Не буферизированный вывод, это работа со строго выровненными блоками данных, где всю работу кеша мы берем фактически на себя. Это всё скорее про случаи где важна надежность, чем скорость.
…
Sign up to leave a comment.
Обновление производительности BonsaiDb: глубокое погружение в синхронизацию файлов