Inizio splice
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 10 Aug 2007 12:53:42 +0000 (12:53 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 10 Aug 2007 12:53:42 +0000 (12:53 +0000)
fileadv.tex

index 67db7dd38ac0be0b4abf6f81fb8741cde9ac6666..5fa13de21efd25ed84475cd07b761ef62077f965 100644 (file)
@@ -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