Достойный размер буфера для чтения файлов и отправки пакетов - PullRequest
2 голосов
/ 25 марта 2011

У меня есть небольшое приложение веб-сервера, которое читает X байтов из потока файлов, а затем выводит эти байты в открытый поток TCP.

Я немного поиграл с этим и, например,размер буфера 1024, а затем увеличение его до 5120 не видел большого улучшения.Я также попытался сделать это с размером 1, к которому я увидел огромное снижение скорости.

Я знаю, что буду ограничен скоростью чтения носителя, а также сетью, поэтомуМне интересно, как установить этот номер.Могу ли я установить определенное число, которое будет оптимальным во всех ситуациях?

Ответы [ 3 ]

2 голосов
/ 25 марта 2011

Есть ли определенное число, которое я могу установить, которое будет оптимальным во всех ситуациях?

Нет, потому что это зависит от факторов, которые вы упомянули, а также от буферизациив вашей библиотеке ввода-вывода и в операционной системе.Использование некоторого значения, кратного размеру блока диска, размеру страницы памяти и / или размеру сетевого пакета (не забудьте заголовки протокола!), Как правило, является разумным шагом.

Если скорость равнаважно, тогда не копируйте блоки, хотя память вообще, если вы можете избежать этого.Например, в Linux для этого используется системный вызов sendfile.

0 голосов
/ 28 марта 2011

Более важным фактором является размер буфера отправки сокета. Установите это по крайней мере 32 КБ.

0 голосов
/ 25 марта 2011

Нет определенного номера.Но выполнение большого количества тестов с различным размером буфера и, возможно, использование инструмента сетевого моделирования для имитации различных условий сети, может очень помочь в выборе другого подходящего размера буфера.Я играл так при оптимизации клиента VoIP, и это мне очень помогло.

...