Linux: какой самый эффективный способ чтения файла с NAS и отправки через сокет - PullRequest
0 голосов
/ 15 мая 2011

Я хотел бы написать сервер, который читает файл из NAS и отправляет его через сокет.Какой самый быстрый способ сделать это?

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 мая 2011

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 - ядро ​​будет отвечать за запрос страниц памяти из файла, отправлять их через сокет, когда это позволят буферы сокетов, и, надеюсь, разрешить код вашего приложения. быть коротким и сладким.

0 голосов
/ 15 мая 2011

Предполагая, что ваши сетевые интерфейсы с обеих сторон 1 Гбит Ethernet или медленнее, просто делайте все, что вам нравится. Ваша машина сможет заполнить их.

...