Per favore, kernel hacker Linux, qual è una dimensione del buffer ragionevole per write(2)
syscall in socket o file, in termini di prestazioni? È chiaro che è un pò di pagine multiple, ma quale? Importa? Cosa è "troppo piccolo" e "troppo grande"?Dimensioni del buffer raccomandate per socket e file
5
A
risposta
7
dipende da quanto è grande il tuo ritardo al peer è, diciamo che si dispone di una connessione 100 Mbps e un ritardo di 50 ms, quindi è possibile calcolare
100MBps * 0.050 sec/8 = 0.625MB = 625KB
ma la dimensione della finestra di default in Linux 2.6 è di circa 110KB, che limiterà la vostra throught fuori a circa 2.2MBps (110KB/0,050) così, per risolvere che si può si 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));
Problemi correlati
- 1. Dimensioni ottimali del buffer per la proprietà JSP e autoflush
- 2. Come vengono scelte le dimensioni del buffer?
- 3. C# FileStream: dimensioni del buffer ottimali per la scrittura di file di grandi dimensioni?
- 4. Dimensione buffer client socket asincrono
- 5. Come trovare la dimensione del buffer del socket di linux
- 6. Dimensione del buffer ottimale per il file buffer?
- 7. Android invia file di grandi dimensioni tramite socket
- 8. Buffer per Android e Protocollo
- 9. C++ invia file e testo tramite socket
- 10. Modifica la dimensione del buffer di socket predefinita in Windows
- 11. Protocol Buffer su socket in C++
- 12. Scala Buffer: dimensioni o lunghezza?
- 13. Descrittori di socket e file
- 14. getchar() e l'ordine del buffer
- 15. Che cos'è il pool di buffer mappato/pool di buffer diretti e come aumentarne le dimensioni?
- 16. ricezione di dimensioni variabili di dati tramite socket TCP
- 17. Bitmap dimensioni intestazione del file
- 18. boost :: asio :: buffer: recupero della dimensione del buffer e prevenzione dell'overflow del buffer?
- 19. Selezione automatica della dimensione del buffer per I/O file
- 20. Calcolo delle dimensioni di un buffer sprintf()
- 21. Deflater.deflate e buffer di uscita di piccole dimensioni
- 22. Buffer TCP del Flush del kernel per pacchetti `MSG_MORE` contrassegnati
- 23. PHP HTML Tidy: limite dimensioni al buffer
- 24. JS - File Reader API ottenere dimensioni del file immagine e le dimensioni
- 25. Dimensioni file HSQLDB e .lobs
- 26. dimensione buffer ottimale per la lettura di file in C
- 27. implementazione malloc da buffer di dimensioni fisse
- 28. I buffer del kernel del socket linux sono scambiati su disco?
- 29. Come funziona un buffer di socket Linux in overflow?
- 30. Differenze nelle dimensioni del file App in Android e iOS
Qualsiasi cosa meno di 128 kilobyte, perché questo è ciò che si inserisce nella coda di invio di default (a meno che tu non voglia giocare con setsockopt) . – Damon
@Damon: non sono sicuro che "qualsiasi cosa" sia una risposta giusta. I tamponi dovrebbero essere sicuramente allineati, almeno. – Cartesius00
L'impostazione predefinita funziona per la maggior parte delle persone la maggior parte delle volte (è ragionevole presumere che le persone che scrivono lo stack di rete non siano idioti completi). A meno che non sia necessario inviare regolarmente enormi quantità di dati (davvero enormi) e avere alcuni vincoli rigorosi sulla latenza, normalmente non c'è motivo di preoccuparsi. Tutto ciò che è una dimensione "ragionevole" viene semplicemente copiato nel buffer di invio e inviato, non importa quanto sia. Se non tutto si adatta, 'write' scriverà meno di quello che chiedi (restituendo l'importo). In ogni caso, funziona. – Damon