Какой выбрать планировщик для последовательного чтения миллионов файлов в каталоге с подкаталогами, чтобы минимизировать перемещения головок?

Какой выбрать планировщик для последовательного чтения миллионов файлов в каталоге с подкаталогами, чтобы минимизировать перемещения головок? Или посмотреть в сторону оптимизации кода?

В настоящий момент чтение файлов в каталоге существующей программы происходит следующим образом:
while ((file = readdir(dir))) {
    fd = open(file, O_RDONLY);
... ... ...
    buf = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
... ... ...
}


Есть подозрение, что чтение файлов происходит не в том порядке, в котором они были записаны. И возможно ли читать файлы в том порядке, в котором они были записаны, ориентируясь на inode?
  • Вопрос задан
  • 2971 просмотр
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
> Какой выбрать планировщик для последовательного чтения миллионов файлов в каталоге с подкаталогами, чтобы минимизировать перемещения головок?

Если ваше чтение происходит последовательно в один поток, планировщик ввода/вывода вам слабо поможет: ваша задача генерирует единственный запрос и блокируется до завершения его выполнения, планировщик же для какого-то видимого эффекта требует несколько запросов, которые он может переупорядочить/склеить.
По идее вам нужно сначала создать правильную нагрузку на файловую систему, например обходя каталоги и читая файлы в параллельных потоках или используя fadvise для управления чтением.

> buf = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);

не похоже на последовательное чтение.

> Есть подозрение, что чтение файлов происходит не в том порядке, в котором они были записаны

превратите его в уверенность или опровергните с помощью, например, blktrace.
Ответ написан
bak
@bak
Вам действительно нужно хранить всё это в мелких файлах? Для большого количества небольших записей лучше использовать дисковые базы данных, например leveldb.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы