Рекомендуемый размер буфера сокета и файла - PullRequest
5 голосов
/ 01 декабря 2011

Пожалуйста, хакеры ядра Linux, каков разумный размер буфера для системного вызова write(2) в сокеты или файлы с точки зрения производительности?Понятно, что это несколько страниц, но какой?Это имеет значение?Что такое «слишком маленький» и «слишком большой»?

1 Ответ

7 голосов
/ 02 декабря 2011

зависит от того, насколько велика ваша задержка на одноранговый узел, скажем, у вас есть соединение со скоростью 100 Мбит / с и задержка 50 мс, тогда вы можете рассчитать

100MBps * 0.050 sec / 8 = 0.625MB = 625KB

, но размер окна по умолчанию в Linux 2.6 составляет около 110 КБ, что ограничивает скорость до 2,2 МБ / с (110 КБ / 0,050) итак, починить что вы можете setsockopt

int ret, sock, buf_size;
sock = socket(AF_INET, SOCK_STREAM, 0);
buf_size = 625*1024;
ret = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size));
ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...