Задать вопрос
@k-morozov

Фрагментированный ввод/вывод: быстрее ли стандартного?

Роберт Лав в своей книге "Linux: системное программирование" пишет, что readv/writev при небольщих сегментах (ядро выделяет для этого память на стеке до 8 штук) можно получить значительный прирост в производительности. Я начал тестить. https://pastebin.com/LnJr7EW8 при размере буфера в 4096 получается время примерно одинаковое. А вот если взять небольщой размер буфера - readv/writev быстрее чуть ли не в 1.5 раза. Автор писал про кол-во элементов (кол-во сегментов) - что их кол-во менее 8 дает прирост производительности, но ни слова не сказал про размер массивов в этих сегментах. Дайте пжста обратную связь:
1. корреткно ли я делал замеры времени? (может есть какая библиотека на Си или прочее?).
2. Правильно ли я инициализоровал сегменты ? (может есть упрощенная форма)
3. Как правильно подобрать размер сегмента?
4. В каких случаях лучше использовать фрагментированный ввод/вывод? (любые советы по его использованию)
  • Вопрос задан
  • 148 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
1. корреткно ли я делал замеры времени? (может есть какая библиотека на Си или прочее?).

Я подозреваю, что ты замерил в основном время вывода в stdout, если он не был перенаправлен в файл.

2. Правильно ли я инициализоровал сегменты ? (может есть упрощенная форма)

Вполне.

3. Как правильно подобрать размер сегмента?

Размеры сегментов диктуются структурой читаемых данных. Если у данных нет структуры -- читай всё с помощью read в один большой массив.

4. В каких случаях лучше использовать фрагментированный ввод/вывод? (любые советы по его использованию)

Когда данные имеют чётко выраженную структуру и время выполнения системного вызова приближается ко времени требуемому для копирования данных. Переход с read на readv позволяет не заниматься копированием данных в юзерспейсе и сэкономить N-1 системный вызов при одновременном чтении N сегментов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы