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
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