Estou procurando um comando semelhante ao ionice
and trickle
and pv -L
and tc
-, mas que coloque limites de E/S em arquivos.
ionice
olha para dispositivos de bloco na máquina local. Quero que isso funcione para E/S de arquivo em geral. Se não funcionar para encfs montados em NFS, é inútil para mim.
trickle
molda a E/S da rede - não a E/S do sistema de arquivos. Então, se meu programa acessa um arquivo no encfs, ele não terá nenhuma pista se ele está montado em cima do NFS ou de um diretório local.
tc
é semelhante a trickle
: Ele molda a E/S da rede - não a E/S do sistema de arquivos.
pv -L
só funciona em pipes. Preciso que funcione em todos os arquivos que o programa abre. Pense no Firefox: ele abre arquivos para leitura e escrita em vários threads.
Eu quero isso:
thecommand --read 5M --write 1M firefox
limitar firefox
a leitura de arquivos a 5 MB/s e a gravação a 1 MB/s.
firefox
é apenas um exemplo: quero que funcione para qualquer programa que abra arquivos diferentes para leitura e escrita.
Quero que a limitação funcione não importa se firefox
o acesso é a um arquivo local ou a um arquivo em NFS/tmpfs/encfs/SSHFS/RandomFS.
Não tem problema se ele só funcionar em programas vinculados dinamicamente (ou seja, não tem problema se ele fizer alguma mágica LD_PRELOAD).
Existe uma fera dessas?
Solução ruim:
Correr:
Grande desvantagem: não aceita opções de velocidade, mas pode ser base para outra resposta.
Embora seja uma solução ruim, a funcionalidade principal praticamente faz a coisa certa: funciona em todos os arquivos interceptando
read
ewrite
. Não importa se os arquivos estão armazenados localmente ou em um sistema de arquivos de rede. Não requer nenhuma configuração especializada que exija acesso root.Editar:
Agora transformado em uma pequena ferramenta de linha de comando: https://git.data.coop/tange/tangetools/src/branch/master/iothrottle
Não estou em condições de escrever uma resposta legal com um exemplo, mas
cgroups
posso fazer isso por você;systemd-run
é seu amigo quando se executa algo em um escopo com recursos limitados.A documentação está um pouco desatualizada, mas configurar o controle de tráfego
tc
pode ser uma opção.https://lartc.org/howto/
trickle
irá limitar a taxa do lado do modo de usuário. Geralmente muito eficaz