I думаю, стандартное монтирование CIFS поддерживает mmap(2)
для файлов (если я правильно прочитал, direct
режим должен быть выключен).
Если это так, ваш самый быстрый вариант, вероятно, - open(2)
файлов в обычном режиме и используйте sendfile(2)
для отправки файловых данных через ваши сокеты UDP. (sendfile(2)
требует сопоставления файла, что не всегда гарантируется, но клиентский код CIFS в ядре (fs/cifs/file.c:cifs_file_strict_mmap()
), по-видимому, поддерживает mmap(2)
.)
Пэт Паттерсон сообщает об ускорении на 8% с sendfile(2)
против write(2)
. Но если это сработает, это избавит вас от необходимости самостоятельно обрабатывать операции AIO - ядро будет отвечать за запрос страниц памяти из файла, отправлять их через сокет, когда это позволят буферы сокетов, и, надеюсь, разрешить код вашего приложения. быть коротким и сладким.