Мне нужно прочитать большое количество файлов, как правило, размером ~ 5 МБ (аудиофайлы), мне нужно сделать это как можно быстрее, и они могут быть расположены на SMB или AFP share.
Для локальной файловой системы / диска на этот вопрос ответили несколько раз на SO, но я не могу найти ответ, указанный c для NAS.
Разница заключается в служебных данных.
Для каждого read
вызова мне необходимо дополнительно go через сетевые и протокольные служебные данные, что может быть значительным , Таким образом, в то время как для локального жесткого диска я бы, вероятно, выбрал кратный размер блока диска (например, размер блока 8 КБ -> 32 КБ), для NAS я мог бы уменьшить количество вызовов (т. Е. Использовать гораздо больший буфер, например, 1 МБ), чтобы уменьшить нагрузку на протокол / сеть и, следовательно, увеличить пропускную способность. Я полагаю, что помимо числа вызовов, другие факторы, такие как медленный запуск TCP , также могут повлиять на это.
Просто для иллюстрации: для чтения файла 5 Мб я мог бы позвонить read
с буфером 1 МБ 5 раз или вызовом read
с буфером 32 КБ 160 раз.
Итак, вот мои вопросы:
- Для SMB / AFP верно ли предположение о служебной нагрузке ( меньше вызовов, лучшая пропускная способность )?
- В чем недостаток использования больших буферов (кроме потребления памяти - это очевидно)?
- Каков обычно рекомендуемый размер буфера?