Como posso limitar o cache usado copiando para que ainda haja memória disponível para outro cache?
Situação básica:
Eu estou copiando alguns discos NTFS no openSuSE. Cada um é 2TB. Quando faço isso, o sistema fica lento.
Meus palpites:
Eu acredito que é provável devido ao cache. O Linux decide descartar o cache útil (por exemplo, kde4 bloat, discos de máquina virtual, binários do LibreOffice, binários do Thunderbird, etc.) e preencher toda a memória disponível (24 GB no total) com material dos discos de cópia, que serão lidos apenas uma vez. então escrito e nunca mais usado. Então, toda vez que eu usar esses aplicativos (ou kde4), o disco precisa ser lido novamente, e ler o inchaço do disco novamente faz com que as coisas congelem / soluçam.
Devido ao cache ter desaparecido e ao fato de que esses aplicativos inchados precisam de muito cache, isso torna o sistema terrivelmente lento.
Como é USB, o disco e o controlador de disco não são o gargalo, portanto, usar o ionice não o torna mais rápido.
Eu acredito que é o cache em vez de apenas a placa-mãe ir muito devagar, porque se eu parar tudo copiando, ele ainda fica instável por um tempo até que ele recheie tudo. E se eu reiniciar a cópia, levará um minuto antes de ficar instável novamente. Mas também posso limitá-lo a cerca de 40 MB / s, e ele roda mais rápido novamente (não porque tenha as coisas certas armazenadas em cache, mas porque os barramentos da placa-mãe têm muita largura de banda extra para os discos do sistema). Eu posso aceitar completamente uma perda de desempenho da capacidade de IO da minha placa-mãe sendo completamente consumida (que é 100% usada, significando 0% de energia desperdiçada, o que me deixa feliz), mas não posso aceitar que esse mecanismo de cache tenha um desempenho tão terrível nesse uso específico caso.
<code># free total used free shared buffers cached Mem: 24731556 24531876 199680 0 8834056 12998916 -/+ buffers/cache: 2698904 22032652 Swap: 4194300 24764 4169536 </code>
Eu também tentei a mesma coisa no Ubuntu, o que causa um travamento total do sistema. ;)
E para esclarecer, não estou perguntando como deixar a memória livre para o "sistema", mas para "cache". Eu sei que a memória cache é automaticamente devolvida ao sistema quando necessário, mas o meu problema é que não é reservado para o armazenamento em cache de coisas específicas.
Questão:
Existe alguma maneira de informar essas operações de cópia para limitar o uso da memória, portanto, algumas coisas importantes permanecem armazenadas em cache e, portanto, qualquer lentidão é resultado do uso normal do disco e não da releitura dos mesmos arquivos usados com frequência? Por exemplo, existe uma configuração de memória máxima por processo / usuário / sistema de arquivos permitido para ser usado como cache / buffers?