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?

questionAnswers(7)

yourAnswerToTheQuestion