Как ускорить чтение фиксированного набора небольших файлов в Linux? - PullRequest
2 голосов
/ 18 июня 2011

У меня есть 100'000 1kb файлов. И программа, которая их читает - это действительно медленно. Моя лучшая идея для улучшения производительности - поместить их на виртуальный диск. Но это хрупкое решение, при каждом перезапуске необходимо заново настроить виртуальный диск. (и копирование файлов тоже медленно)

Моя вторая лучшая идея - объединить файлы и работать с ними. Но это не тривиально.

Есть ли лучшее решение?

Примечание: мне нужно избегать зависимостей в программе, даже Boost.

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

Вы можете оптимизировать, храня файлы, смежные на диске.

На диске с достаточным количеством свободного места проще всего было бы вместо этого прочитать архив tar.

Кроме этого, существует / используется пакет debian для readahead.

Вы можете использовать этот инструмент для

  1. профиль нормальной работы вашего программного обеспечения
  2. редактировать список доступных файлов (обнаружен readahead)

Затем вы можете вызвать readahead с этим списком файлов (файлы будут упорядочены в порядок дисков , чтобы пропускная способность была максимальной, а время поиска - минимальным)

К сожалению, с тех пор, как я их использовал, прошло довольно много времени, поэтому я надеюсь, что вы можете зайти в Google с ответными пакетами

Вот что я сейчас нашел:

sudo apt-get install readahead-fedora

Удачи

1 голос
/ 18 июня 2011

Если ваши файлы статичны, я согласен, просто скопируйте их и поместите в RAM-диск.Возможно, будет быстрее читать непосредственно из файла TAR, но вы можете проверить это.

edit :: вместо TAR, вы также можете попробовать создать squashfs том.

Если вы не хотите этого делать или все еще нуждаетесь в большей производительности, тогда:

  1. поместите ваши данные на SSD.
  2. начните исследовать некоторыеТест производительности FS, начиная с EXT4, XFS и т.д ...
...