read_ahead является своего рода противоположностью delayed_write в том смысле, что чтение является противоположностью записи.
Если вы хотите читать и отправлять большие куски памяти, вам не нужно читать read_ahead, просто прочитайте большие куски и отправьте их (не так много вызовов os, чтобы сохранить здесь).
Из файла : открыть / 2 man-страницу на read_ahead:
Если вызовы read / 2 предназначены для размеров, не значительно меньших или даже превышающих размер
байт, прирост производительности не ожидается.
Вам не нужно указывать и индексировать при открытии. Просто используйте pwrite / 3 или комбинацию position / 2 и write / 2 .
Но запись в разные позиции файла может просто уменьшить усиление delayed_write
, поскольку (также man-страница file: open / 2 ):
Буферизованный
данные также сбрасываются перед другим файлом
выполняется операция записи / 2.
Если у вас есть куски данных для нескольких позиций, соберите их в список {Location, Bytes}
и время от времени пишите их с файлом : pwrite / 2 все за один раз. Это может привести к очень эффективному системному вызову writev(2)
, который записывает несколько фрагментов за один раз.