Может ли запуск 'cat' ускорить последующий произвольный доступ к файлам на Linux? - PullRequest
6 голосов
/ 24 августа 2009

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

Я думал о том, чтобы выполнить cat myfile > /dev/null перед тем, как получить к нему доступ, чтобы мои файловые страницы последовательно помещались в память, следовательно, быстрее, чем с сухим произвольным доступом.

Имеет ли этот подход смысл для вас?

Ответы [ 6 ]

7 голосов
/ 24 августа 2009

Делая это, вы можете принудительно ввести содержимое файла в системный кеш, лучше использовать posix_fadvise() (с рекомендацией POSIX_FADV_WILLNEED) или (блокирование) readahead() вызов для того, чтобы ядро ​​предварительно кэшировало данные, которые вам нужны.

EDIT: Вы также можете попробовать использовать совет POSIX_FADV_RANDOM, чтобы вообще отключить чтение. Здесь есть статья с приличным объяснением использования: Консультирование ядра Linux по вопросам файлового ввода-вывода

4 голосов
/ 24 августа 2009

Как сказали другие, вам нужно будет протестировать его в вашем конкретном случае.

Вполне возможно, что это приведет к значительному увеличению производительности. На традиционных вращающихся носителях (то есть на жестком диске) последовательный доступ (файл cat> / dev / null / fadvise) намного быстрее, чем произвольный доступ.

4 голосов
/ 24 августа 2009

Есть только один способ убедиться, что любая (возможно, преждевременная?) Оптимизация имеет смысл: сравните ее.

2 голосов
/ 24 августа 2009

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

readahead тоже хороший вызов ...

2 голосов
/ 24 августа 2009

Теоретически это может ускорить доступ (особенно, если вы получаете доступ почти ко всему из файла), но я бы не стал ставить на большую разницу.

Единственный действительно полезный подход - это сравнить его для вашего конкретного случая.

0 голосов
/ 24 августа 2009

Выполнение «cat» для большого файла может привести к вводу данных и выбросу более ценных данных из кэша;это не то, что вам нужно.

Если для вас вообще важна производительность, вы все равно будете регулярно проводить тестирование производительности (и тесты на выдержку и т. д.), поэтому продолжайте делать это и следите за своими графиками, рисунками и т. д..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...