Я занят написанием чего-то, чтобы проверить скорость чтения дискового ввода-вывода в Linux.
На данный момент у меня есть что-то вроде этого для чтения файлов:
Отредактировано, чтобы изменить код на это:
const int segsize = 1048576;
char buffer[segsize];
ifstream file;
file.open(sFile.c_str());
while(file.readsome(buffer,segsize)) {}
Для файла foo.dat, который составляет 150 ГБ, при первом чтении, это занимает около 2 минут.
Однако, если я запустил его в течение 60 секунд после первого запуска, запуск займет около 3 секунд. Как это возможно? Конечно, единственное место, которое может быть прочитано с такой скоростью, это буферный кеш в ОЗУ, а файл слишком большой, чтобы поместиться в ОЗУ.
Машина имеет 50 ГБ оперативной памяти, а диск имеет крепление NFS со всеми настройками по умолчанию. Пожалуйста, дайте мне знать, где я могу посмотреть, чтобы убедиться, что этот файл действительно читается с такой скоростью? Мой код неверен? Похоже, что при первом чтении файла требуется определенное количество времени.
Отредактировано для добавления:
Выяснил, что мои файлы только читают до случайной точки. Мне удалось это исправить, изменив размер сегмента до 1024 с 1048576. Я понятия не имею, почему изменение этого параметра позволяет ifstream читать весь файл вместо остановки в произвольной точке.
Спасибо за ответы.