Por favor, hackers del kernel de Linux, ¿cuál es un tamaño de búfer razonable para write(2)
syscall a sockets o archivos, en cuanto al rendimiento? Está claro que es un múltiplo de páginas, pero ¿cuál? ¿Importa? ¿Qué es "demasiado pequeño" y "demasiado grande"?Tanto el zócalo como el archivo recomiendan tamaño de búfer
5
A
Respuesta
7
depende de cuán grande es su retraso a los pares es, digamos que usted tiene una conexión de 100 Mbps y un retraso de 50 ms, entonces se puede calcular
100MBps * 0.050 sec/8 = 0.625MB = 625KB
pero el tamaño de la ventana por defecto en Linux 2.6 es de alrededor 110KB, lo que limitará su throught a alrededor de 2,2 Mbps (110KB/0.050) lo tanto, para fijar que pueda usted 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));
Cuestiones relacionadas
- 1. Tamaño máximo del búfer del zócalo del iPhone
- 2. Tamaño del búfer en el servicio WCF
- 3. cambiar el tamaño del búfer en MediaPlayer
- 4. ¿Conecta() el bloque para el zócalo TCP?
- 5. Ver tanto el código de ensamblado como el código C
- 6. Cómo cambiar el tamaño del búfer de E/S kernel
- 7. pasando el búfer char a las funciones y obteniendo el tamaño del búfer
- 8. C: leer el archivo binario en la memoria, alterar el búfer, escribir el búfer en el archivo
- 9. Cómo expandir el tamaño del búfer de entrada de pyserial
- 10. Cómo cambiar el tamaño del búfer con boost :: iostreams?
- 11. ¿Cómo determinar el tamaño de un búfer C asignado?
- 12. ¿Cuál es el tamaño del búfer en BufferedReader?
- 13. ¿Cómo obtener información sobre el búfer/archivo actual en emacs?
- 14. impulso dinámicamente tamaño asio :: :: búfer
- 15. ¿Cuál es el tamaño del búfer para crear un archivo .zip usando Java?
- 16. Rails JS Response, representa tanto el estado como la plantilla?
- 17. Establecer tamaño de búfer de tubería
- 18. Visualizar el búfer de profundidad
- 19. Usando el búfer de protocolo como objeto de datos general?
- 20. Cálculo del tamaño de un sprintf() búfer
- 21. un archivo de texto en el búfer circular pitón
- 22. dbms_output desbordamiento de búfer de tamaño
- 23. Win32: ¿Escribir en el archivo sin almacenamiento en búfer?
- 24. Tengo el mismo archivo README tanto en Markdown como en ReStructuredText
- 25. Programación del zócalo en el nivel bajo
- 26. ¿El cierre de la corriente de entrada de un zócalo también cierra la conexión del zócalo?
- 27. obteniendo el tamaño de archivo en javascript
- 28. ¿El búfer de protocolo de Google admite el cálculo del tamaño antes de la serialización?
- 29. Reducir el tamaño del archivo de pdf
- 30. Android - Tamaño del búfer de MediaPlayer en ICS 4.0
Cualquier cosa menos de 128 kilobytes, porque eso es lo que encaja en la cola de envío por defecto (a menos que quieras jugar con setsockopt) . – Damon
@Damon: No estoy seguro de que "nada" sea una respuesta correcta. Los buffers deberían estar definitivamente alineados, al menos. – Cartesius00
El valor predeterminado funciona para la mayoría de las personas la mayor parte del tiempo (es razonable suponer que las personas que escriben la pila de la red no son idiotas completos). A menos que regularmente deba enviar grandes cantidades de datos (realmente enormes) y tenga algunas restricciones estrictas sobre la latencia, normalmente no hay motivo para molestarse. Cualquier cosa que tenga un tamaño "razonable" simplemente se copia en el búfer de envío y se envía, sin importar cuánto sea. Si no todo encaja, 'write' escribirá menos de lo que pide (devolviendo el monto). En cualquier caso, simplemente funciona. – Damon