Ext4 fsync становится все медленнее и медленнее по мере заполнения каталога — есть ли предел или что-то, с чем я сталкивLinux

Ответить
Anonymous
 Ext4 fsync становится все медленнее и медленнее по мере заполнения каталога — есть ли предел или что-то, с чем я сталкив

Сообщение Anonymous »

Появилась странная проблема с производительностью нашей системы журналирования. мы записываем множество небольших файлов журналов в один каталог на ext4 (ubuntu 20.04, ядро ​​5.4). каждый файл имеет размер 2-10 КБ.
сначала fsync занимает ~ 1 мс, но после того, как в каталоге появляется около 50 тысяч файлов, fsync начинает занимать 100-200 мс! и становится все хуже. к тому времени, когда у нас есть 150 тыс. файлов, на каждую fsync требуется более 500 мс, что снижает нашу пропускную способность.
детали настройки:
  • файловая система ext4 с включенным dir_index (проверено с помощью Tune2fs)
  • файлы, названные последовательно, например log_000001.txt, log_000002.txt и т.д.
  • запись с флагом O_SYNC, вызов fsync() после каждой записи
  • каждый файл закрывается после записи
  • SSD-диск (samsung 970 evo), производительность диска в порядке (проверено с помощью fio)
что мы уже пробовали:
  • переключились с O_SYNC на обычную запись + fsync - та же проблема
  • пробовал fdatasync вместо fsync - возможно, на 10 % лучше, но все равно медленно
  • проверил использование индексного дескриптора, доступно много
  • пробовал dir_nlink, но не помогло
  • отслеживал с помощью iostat, не увидел большой глубины очереди
пример кода (упрощенный):

Код: Выделить всё

int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
write(fd, data, len);
fsync(fd);  // 

Подробнее здесь: [url]https://stackoverflow.com/questions/79860501/ext4-fsync-gets-slower-and-slower-as-directory-fills-up-is-there-a-limit-or-so[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»