Сравнительный анализ ввода / вывода: запись больших файлов и использование fsync для небольших файлов - PullRequest
1 голос
/ 28 июля 2011

Я использую эталон ввода-вывода для измерения производительности ввода-вывода в системе. Тест производительности записывает файл на диск с использованием различных примитивов ввода / вывода (write, pwrite, mmap и т. Д.) И сообщает о производительности. В документации этого теста указано, что во избежание нереалистичных результатов, которые могут возникнуть из-за эффектов кэширования, необходимо написать файл, который по крайней мере равен размеру основной памяти в системе.

Мой вопрос: если вы используете fsync в своей программе, разве это не должно обойти эффекты кэширования, поскольку оно сбрасывает неписанные буферы ввода / вывода на диск? Я спрашиваю об этом, потому что наша система имеет 64 ГБ оперативной памяти, и запись файлов по 64 ГБ каждый раз для наших экспериментов занимает много времени. Если бы я мог написать файл меньшего размера, например 4G или 8G, тесты прошли бы быстрее.

Я использовал fsync в примере программы и убедился, что при использовании fsync эффекты кэширования обычно не видны, но мне любопытно узнать, что люди говорят, и почему авторы тестов не сделали то же самое.

Заранее спасибо.

1 Ответ

1 голос
/ 28 июля 2011

Вы правы; fsync() (или даже fdatasync()) не должен возвращаться, пока данные не будут записаны на диск.

Тест, который вы описываете, не выглядит особенно сложным.

...