
Baixei muitos arquivos torrent e enquanto os estou propagando, percebi que muitas vezes quando inicio o navegador ele fica lento e o indicador de atividade do disco rígido está aceso. Normalmente, quando eu inicio um programa, ele é armazenado em cache na RAM e iniciá-lo novamente é muito rápido, e eu tenho 3 GB de RAM, então geralmente ele permanece em cache quase para sempre. Mas quando meu cliente de torrent está sendo propagado, parece que depois de uma hora os programas que executei não estão mais armazenados em cache na RAM.
Eu estava pensando que talvez seja porque as leituras de disco que o cliente de torrent realiza são armazenadas em cache e eventualmente preenchem a RAM. Mas não acho que precisem ser assim, pois são lidos apenas uma vez e é improvável que sejam lidos novamente em breve.
Portanto, minhas perguntas são: é assim que penso e, em caso afirmativo, é possível, em princípio, impedir que as leituras do disco sejam armazenadas em cache? Posso tentar editar o código-fonte do programa.
Responder1
Dependerá exatamente de qual programa de torrent você está usando. Alguns deles podem se comportar de maneiras diferentes.
Mas sim, é possível ignorar o cache do sistema, pois este é um problema comum.
Se você se sentir confortável em editar a fonte (talvez deva estar em outro StackExchange ..), descubra onde o programa torrent abre o arquivo do disco. Provavelmente uma chamada open(). Se for fdopen() então está usando stdlib e não tenho certeza se stdlib suporta E/S direta.
Esta chamada de sistema leva até três argumentos, o primeiro é o nome do arquivo, o segundo são sinalizadores e o terceiro é uma máscara opcional de criação de arquivo. As bandeiras provavelmente serão algo parecido O_RDWR
no momento. O sinalizador para "não usar cache do sistema" é O_DIRECT
e você combina sinalizadores separando-os com |
.
Portanto, o resultado do argumento flags neste caso seria O_RDWR | O_DIRECT
. Basta adicionar a nova bandeira.
Para mais informações, veja
man 2 open
Responder2
Não feche o navegador :)
O cache de E/S (usado apenas para leitura, não para gravação em um arquivo), por mais excessivo que seja, não fará com que as páginas que o programa está usando sejam trocadas.