From: Simone Piccardi Date: Fri, 10 Aug 2007 12:53:42 +0000 (+0000) Subject: Inizio splice X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=39c051cd723e36a31bd8989c01970cf712f0d2dd Inizio splice --- diff --git a/fileadv.tex b/fileadv.tex index 67db7dd..5fa13de 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -2905,16 +2905,16 @@ alla scheda di rete, senza neanche allocare un buffer nel kernel.\footnote{il lettura e scrittura via DMA.} Con i kernel della serie 2.6 ci si è accorti però che, a parte quest'ultimo -caso, l'uso di \func{sendfile} non portava significativi miglioramenti delle -prestazioni rispetto all'uso in sequenza di \func{read} e \func{write}, +caso, l'uso di \func{sendfile} non sempre portava significativi miglioramenti +delle prestazioni rispetto all'uso in sequenza di \func{read} e \func{write}, \footnote{nel caso generico infatti il kernel deve comunque allocare un buffer - ed effettuare la copia dei dati, e in tal caso il guadagno ottenibile nel - ridurre il numero di chiamate non compensa le ottimizzazioni che possono - essere fatte da una applicazione in user space che ha una maggiore - conoscenza su come questi sono strutturati.} e che anzi in certi casi si -avevano dei peggioramenti, questo ha portato alla decisione\footnote{per le - motivazioni di questa scelta si può fare riferimento a quanto illustrato da - Linus Torvalds in + ed effettuare la copia dei dati, e in tal caso spesso il guadagno ottenibile + nel ridurre il numero di chiamate al sistema non compensa le ottimizzazioni + che possono essere fatte da una applicazione in user space che ha una + maggiore conoscenza su come questi sono strutturati.} e che anzi in certi +casi si avevano dei peggioramenti, questo ha portato alla +decisione\footnote{per le motivazioni di questa scelta si può fare riferimento + a quanto illustrato da Linus Torvalds in \href{http://www.cs.helsinki.fi/linux/linux-kernel/2001-03/0200.html} {\texttt{http://www.cs.helsinki.fi/linux/linux-kernel/2001-03/0200.html}}.} di consentire l'uso della funzione soltanto quando il file da cui si legge @@ -2922,7 +2922,15 @@ supporta le operazioni di \textit{memory mapping} (vale a dire non socket) e quello su cui si scrive è un socket; in tutti gli altri casi si avrà un errore di \errcode{EINVAL}. +Nonostante i limiti illustrati resta comunque il dubbio se la scelta di +disabilitare \func{sendfile} per il trasferimento di dati fra file di dati sia +davvero corretta; la funzione infatti se non altro consente di semplificare +l'interfaccia, evitando di dover gestire l'allocazione di un buffer temporaneo +per i trasferimenti dei dati in tutti quei casi in cui non c'è necessità +effettiva di fare controlli sugli stessi. Inoltre essa avrebbe comunque il +vantaggio di evitare trasferimenti di dati da e verso l'user space. +Fino al 2.6.17 il problema % TODO documentare le funzioni tee e splice