Limite a velocidade de gravação do disco rígido por usuário no Linux

3

Histórico:

Eu uso um cluster com meus colegas de trabalho e, se alguém escrever muitos arquivos grandes ao mesmo tempo, não posso nem mover o cursor no vim (o horror!). Não tenho certeza se é mais relacionado ao número de arquivos abertos ou à "largura de banda" do disco rígido que está sendo usado, mas isso só acontece quando ocorre uma grande operação de gravação (inclusive o download de arquivos grandes). Eu sei que você pode limitar o espaço no disco rígido por cotas por usuário, mas eu nunca ouvi falar de ser capaz de limitar a velocidade de transferência de dados.

Pergunta

É possível limitar a quantidade de dados gravados por segundo por um usuário no linux?

    
por sequenceGeek 19.01.2012 / 01:34

3 respostas

3

Use cgroups juntamente com o scheduler CFQ I / O (o padrão para muitas distribuições). CFQ está ciente de cgroups e pode dar a qualquer usuário, grupo ou processar apenas x% do tempo de E / S do disco.

Portanto, se você tiver um cgroup chamado sequenceGeek , com 90% do máximo de recursos, poderá ter outro cgroup chamado coworkers , com 10% dos recursos. Ou algo similarmente justo.

man cgrules.conf , man cgset e man cgconfig.conf devem começar. Isso pelo menos no Fedora 16, não tinha tempo para verificar outras distribuições agora se eles tivessem nomes de arquivos de configuração similares. Provavelmente eles fazem.

EDITAR: Ah, só notei nos seus comentários que você está usando o NFS. Então sua rede pode estar saturada e você precisa usar QoS com tc e iptables . Google para Advances Linux Routing How-To , tem exemplos prontos de limitação do tráfego e criação de classes de prioridade. Ou, se possível, faça o afogamento em seu firewall / roteador / balanceador de carga.

Também pode ser uma versão antiga do kernel com problemas com NFS ou com opções ruins de montagem do NFS.

    
por 19.01.2012 / 06:00
1

Se você não conseguir mover o cursor, meu palpite é que sua CPU está aguardando o IO por muito tempo. Você pode verificar isso executando a parte superior e observando a quantia listada em %wa na parte superior.

O controlador blkio dos cgroups mencionados acima é um método de controlar a quantidade de IO que alguém ou algum grupo pode fazer. Estou com um pouco de pressa agora, mas se você ler os documentos do kernel ( /usr/share/doc/kernel-<version>/Documentation/cgroups ), tenho certeza que vai conseguir. Você precisará de um kernel bastante recente, mas acho que qualquer coisa acima de 2.6.32 (o kernel EL6) provavelmente fará.

Você precisa configurar o arquivo blkio.throttle.write_bps_device no sistema de arquivos do cgroups. Com isso, junto com o /etc/cgconfig.conf e o /etc/cgrules.conf , você pode limitar qualquer usuário ou grupo na quantidade de largura de banda armazenada.

    
por 19.01.2012 / 07:48
0

Não tenho muita certeza, mas depois de ler um pouco de man limits.conf e supondo que você seja root, sugiro adicionar limites hard para as contas de outras pessoas em data (tamanho máximo de dados), priority e nice . Algo como definir seus limites mais baixos do que os seus e, em seguida, definir a prioridade do aplicativo que você está executando para maior do que eles podem. É claro, você deve pesquisar um pouco mais e testar antes de fazer qualquer alteração, pois isso pode interferir seriamente na experiência do usuário.

Boa sorte.

    
por 19.01.2012 / 01:44