Lutando por recursos, parte 4: Ótimo

Iremos lidar com os reguladores do subsistema de armazenamento de dados e ver o que eles permitem que você faça no sentido de E / S de bloco.



O que é especialmente interessante aqui é que estamos entrando em um território no qual alterações nas configurações feitas após o lançamento do sistema são muito menos importantes do que as decisões tomadas antes mesmo de sua implantação.

Dê uma olhada na imagem abaixo.



Apresenta quatro recursos principais que um computador moderno precisa para funcionar corretamente. O ajuste de desempenho é a arte de distribuir esses recursos de maneira otimizada entre os processos de aplicativos. Além disso, todos esses recursos não são ilimitados nem equivalentes em termos de impacto na produtividade.

O desempenho do subsistema de armazenamento é reduzido ao desempenho das tecnologias de armazenamento usadas nele: discos rígidos, SSD, SAN, NAS - eles podem variar bastante na velocidade de acesso e na taxa de transferência. E um processador poderoso e muita memória não salvarão a situação se os dispositivos de armazenamento não atenderem aos requisitos das tarefas que estão sendo resolvidas.

Se você, como especialista em Linux, pode influenciar as decisões de hardware, tente garantir que sua organização tenha uma plataforma de armazenamento adequada (ou superior). Isso salvará muitos problemas no futuro.

Agora vamos ver o que pode ser feito com a ajuda dos controles de entrada / saída (E / S).

É tudo sobre dispositivos de armazenamento


Oficialmente, o controlador de E / S é chamado blkio, mas de bom humor, responde a Blocky. Como o controlador da CPU, Blocky tem dois modos de operação:

  • Ajuste usando esferas de E / S relativas (compartilhamentos), que permitem controlar o desempenho no nível de todos ou de dispositivos de armazenamento de bloco selecionados, definindo valores no intervalo de 10 a 1000. Por padrão, 1000 é usado, portanto, qualquer alteração reduz apenas as esferas de E / S O usuário ou serviço selecionado. Por que 1000, não 1024, como no caso da CPU? Boa pergunta Aparentemente, esse é o caso quando a natureza aberta do Linux não é boa para ele.
  • Ajuste de largura de banda absoluto para limitar a velocidade de leitura e / ou gravação para um determinado usuário ou serviço. Por padrão, este modo está desativado.

A captura de tela abaixo mostra os parâmetros que podem ser ajustados usando o comando systemctl. Aqui, usamos a mágica dos prompts automáticos na tecla Tab para exibir uma lista de opções. Isso é chamado de conclusão do bash e, se você ainda não estiver usando esta função, é hora de instalar o PRM apropriado.



As esferas de E / S relativas são controladas pelos parâmetros BlockIODeviceWeight e BlockIOWeight. Antes de jogar com esses controladores, é necessário entender isso: eles funcionam apenas se o CFQ I / O Scheduler estiver ativado para o dispositivo de armazenamento.

O que é um planejador de E / S? Vamos começar de longe e lembrar que o kernel do Linux é responsável por garantir que todos os componentes de hardware do computador se comuniquem corretamente. E como todos esses componentes ao mesmo tempo querem coisas diferentes, não se pode fazer sem pedir. Bem, como, por exemplo, organizamos nossa vida, estruturando-a para trabalhar, descansar, dormir e assim por diante.

Se falamos sobre dispositivos de armazenamento, o agendador de E / S é responsável por organizar seu trabalho no kernel. Este é apenas um código de programa que define uma maneira de controlar o fluxo de dados para dispositivos de bloco, variando de unidades flash USB e discos rígidos a discos virtuais, que na verdade são arquivos em algum lugar nos dispositivos ISCI em uma SAN.

Além de todos esses dispositivos que podem ser usados ​​no Linux, existem várias tarefas que um computador deve executar. Além disso, na vida real, há o que chamamos de "casos de uso" na Red Hat. É por isso que existem planejadores diferentes focados em diferentes cenários. Esses agendadores são chamados noop, deadline e cfq. Em poucas palavras, cada um deles pode ser descrito da seguinte maneira:

  • Noop - adequado para dispositivos de armazenamento em bloco que não possuem peças rotativas (flash, ssd etc.).
  • O prazo é um agendador leve, focado em minimizar atrasos. Por padrão, ele prioriza a leitura às custas da escrita, pois a maioria dos aplicativos tropeça na leitura.
  • Cfq - focado na distribuição justa da largura de banda de E / S no nível de todo o sistema. E, como dissemos acima, este é o único planejador que suporta opções de E / S relativas para cgroups.

Para obter mais informações sobre agendadores , consulte o Guia de Ajuste de Desempenho do Red Hat Enterprise Linux 7.

O que foi toda essa discussão sobre planejadores? Além disso, na maioria dos computadores, o cfq NÃO é USADO por padrão se eles não tiverem unidades SATA. Sem saber disso, você pode alterar o BlockIOWeight até ficar azul sem nenhum efeito. Infelizmente, o systemd não irá lhe dizer: “Desculpe, você está tentando em vão alterar este parâmetro. Isso não funcionará porque o dispositivo está usando o agendador errado. "

Então, como você pode descobrir sobre esse recurso "interessante"? Como sempre, na documentação do cgroups sobre a qual escrevemos em um post anterior. É sempre útil familiarizar-se com ele antes de usar esses ou aqueles reguladores.

Passamos para o caso de uso


Novamente, passamos de palavras gerais a detalhes: deixe-me apresentar-lhe o Sr. Kryakin.

Ele está envolvido na restauração e possui dois bancos de dados no servidor de aplicativos para rastrear pedidos. Kryakin insiste que o banco de dados de pedidos de pratos de pato é muito mais importante que a base para pratos de ganso, já que os gansos são impostores no trono das aves aquáticas.

Ambos os bancos de dados são configurados como serviços e seus arquivos de unidade são assim:



De fato, os scripts neles chamados (duck.sh e goose.sh) não realizam nenhum trabalho real no banco de dados, mas apenas simulam leitura e gravação usando loops de comando dd. Ambos os scripts usam o sistema de arquivos / database, que fica em seu disco virtual.



Vamos rodar pato e ganso e ver onde eles pousam na hierarquia do cgroup:





E agora, como conhecemos os PIDs dos processos dd, vamos ao comando iotop para ver o que acontece no subsistema de armazenamento:



Bem, 12-14 MB / s ... não é rápido. Parece que o Sr. Kryakin não investiu muito no sistema de armazenamento de dados. Embora já tivéssemos dúvidas sobre sua adequação, não há muito o que surpreender.

Agora, examinamos nossas duas tarefas: PID 3301 (ganso) e PID 3300 (pato). Cada um usa E / S em torno de 6 MB / s. A tela acima tem números um pouco diferentes, mas, na realidade, eles estão pulando constantemente e, em média, essas duas tarefas compartilham igualmente a largura de banda do dispositivo de armazenamento.

Kryakin quer que o duck tenha pelo menos 5 vezes mais largura de banda de E / S do que o ganso, para que os pedidos do duck sejam sempre processados ​​primeiro. Vamos tentar usar o parâmetro BlockIOWeight para isso com os seguintes comandos:



Nós olhamos para o iotop e vemos que ele não funcionou:



Vamos verificar o planejador de E / S para o dispositivo / dev / vdb:



Interessante ... Estamos tentando alterar o agendador para cfq e nada disso resulta. Porque

O fato é que nosso sistema é executado em uma máquina virtual KVM e, a partir da versão 7.1, o planejador não pode mais ser alterado no Red Hat Enterprise Linux. E isso não é um bug, mas um recurso relacionado ao aprimoramento de mecanismos para trabalhar com dispositivos de E / S virtualizados.

Mas não vamos nos desesperar. Temos mais dois parâmetros que podem ser alterados: BlockIOReadBandwidth e BlockIOWriteBandwidth operam no nível do dispositivo de bloco e ignoram o planejador de E / S. Como conhecemos a largura de banda do dispositivo / dev / vdb (algo em torno de 14 MB / s para recepção e saída), limitando o ganso a 2 MB / s, parece que conseguimos atender ao desejo do Sr. Kryakin. Vamos tentar:





Observamos: o PID 3426, também conhecido como ganso, agora usa E / S em torno de 2 MB / s, e o PID 3425, ou seja, duck, para quase todos os 14!

Hooray, fizemos o que o cliente queria, o que significa que salvamos não apenas um certo número de gansos, mas também nossa reputação como um guru do Linux.

Source: https://habr.com/ru/post/pt427413/


All Articles