ядро linux: 5.1.15 glibc: 2.29 g ++: 9.1.1 std: c ++ 17 -быстрый ext4fs HDD: Seagate ST1000LM014 1 ТБ SSHD 2.5 "
std::array<int, 10000> state;
Я пишу nbrmsgs ints из состояния в файл, открытый следующим образом:
#include <fcntl.h>
#include <unistd.h>
persistfd=open("persist", O_CREAT | O_WRONLY | O_SYNC, S_IRUSR | S_IWUSR);
с вызовом:
pwrite(persistfd, state.data(), nbrmsgs*sizeof(int), 0)
Все это использует синхронную запись. Требуется обеспечить запись данныхперед продолжением (т. е. если происходит сбой процесса после записи, данные находятся в файле, но если происходит сбой уровня ядра или аппаратного уровня, это не моя проблема)
Ранее я использовал write вместо pwrite, без указания смещения. Таким образом, это добавляло байты в конец файла.
Я следил за истекшим временем записи, и на моей платформе оно было довольно стабильным, около 1 микро,до тех пор, пока файл не достигнет определенного размера, а затем истекшее время не начнет расти, по-видимому, из-за всего, что связано с перемещением inode и всеми задачами ниже вызова библиотеки C.)
Я изменил запись на pwrite, со смещением 0, а размер файла остается постоянным.Тем не менее, я все еще вижу, как истекшее время начинает расти после ряда писем.
- Неправильно ли для меня ожидать, что истекшее время должно оставаться стабильным, когда файл не "растет"?
- Возможны ли пользовательские настройки на ext4fs или на параметры ядра, чтобы повысить вероятность того, что запись в 0 компенсирует тот же размер данных, а файл не увеличивается, а истекшее время остается стабильным?