Почему отправка запроса pwrite с использованием API io_submit намного медленнее, чем отправка запроса pread?

У меня есть приложение, которое читает большой объем данных с диска, а также много пишет. Я пытаюсь использовать прямой ввод-вывод для улучшения производительности ввода-вывода.

Сейчас я пользуюсь libaio реализовать асинхронный ввод-вывод, как для чтения, так и для записи. Предварительный результат показывает улучшение в стадии чтения, но большое падение в стадии написания.

Тогда я использовал strace чтобы захватить поведение во время выполнения и вот журнал стадии чтения (я удалил несколько несвязанных журналов):

8509  20:59:03.005920 io_submit(139876672323584, 16, {{pread, filedes:102, buf:0x7f36bf816000, nbytes:524288, offset:96468992}} <unfinished ...>
8509  20:59:03.007236 <... io_submit resumed> ) = 16 <0.000893>

и вот запись этапа записи:

8098  20:47:40.219194 io_submit(140277578346496, 1, {{pwrite, filedes:116, str:"\177\362\215\264\252\360\240\306\377?\265\36/\215#%\304\0343\300\230\256\3550\374 k\316\v\225\327\""..., nbytes:524288, offset:24117248}}) = 1 <0.002457>

Вообще то же самое io_submit API занимает разное время. Даже если отправлять 16 запросов на чтение одновременно, это все же быстрее, чем отправлять 1 запрос на запись.

Так это правильно? Как я могу оптимизировать мою стадию записи?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …