
He descargado muchos archivos torrent y mientras los estoy sembrando, he notado que muy a menudo cuando inicio el navegador es lento y el indicador de actividad del disco duro está encendido. Por lo general, cuando inicio un programa, se almacena en caché en la RAM y volver a iniciarlo es muy rápido, y tengo 3 GB de RAM, por lo que generalmente permanece en caché casi para siempre. Pero cuando mi cliente de torrent se está iniciando, parece que después de una hora los programas que ejecuté ya no están almacenados en caché en la RAM.
Estaba pensando que tal vez se deba a que las lecturas de disco que realiza el cliente torrent se almacenan en caché y eventualmente llenan la RAM. Pero no creo que sea necesario, ya que se leen sólo una vez y es poco probable que se vuelvan a leer pronto.
Entonces, mis preguntas son: ¿es así como pienso y, de ser así, es posible, en principio, evitar que las lecturas del disco se almacenen en caché? Puedo intentar editar el código fuente del programa.
Respuesta1
Dependerá exactamente del programa de torrent que estés utilizando. Algunos de ellos pueden comportarse de diferentes maneras.
Pero sí, es posible omitir el caché del sistema, ya que es un problema común.
Si se siente cómodo editando la fuente (tal vez debería estar en otro StackExchange...), busque dónde el programa torrent abre el archivo desde el disco. Lo más probable es que sea una llamada open(). Si es fdopen() entonces está usando stdlib y no estoy seguro de que stdlib admita E/S directa.
Esta llamada al sistema toma hasta tres argumentos, el primero es el nombre del archivo, el segundo son indicadores y el tercero es una máscara de creación de archivo opcional. Las banderas probablemente serán algo así como O_RDWR
en este momento. La marca para "no usar caché del sistema" es O_DIRECT
, y las marcas se combinan separándolas con |
.
Entonces el resultado del argumento flags en este caso sería O_RDWR | O_DIRECT
. Simplemente agregue la nueva bandera.
Para más información, ver
man 2 open
Respuesta2
No cierres el navegador :)
La caché de E/S (utilizada sólo para leer, no para escribir en un archivo), por excesiva que sea, no provocará que se intercambien las páginas que está utilizando el programa.