Como o Linux lida com E / S de disco simultâneo?

12

Quando um servidor Linux está servindo muitas solicitações simultâneas para ler muitos arquivos diferentes, ele faz:

  1. Procure o arquivo_1, leia o arquivo inteiro, depois procure o arquivo_2, leia o arquivo inteiro, depois procure o arquivo_3, etc etc

  2. Procure o arquivo_1, leia parte dele (até o valor do readahead?), Depois procure o arquivo_2, leia parte dele, depois procure o arquivo_1 onde parou, leia mais sobre ele e procure o arquivo_3 etc. etc

Se for o segundo caso, o servidor fará muito mais buscas do que o necessário, o que atrasaria significativamente as coisas. Nesse caso, há algum ajuste que eu poderia fazer?

Continuação
fonte

Respostas:

14

Na E / S de disco, existe uma coisa chamada elevador. O subsistema de disco tenta evitar golpear a cabeça do disco em todos os pratos. Ele reordenará as solicitações de E / S (quando não forem proibidas, por exemplo, por uma barreira), para que o cabeçote se mova do interior do disco para o exterior e vice-versa, executando as E / S solicitadas no caminho.

A segunda coisa é mesclar a solicitação de E / S. Se houver muitas solicitações dentro de uma janela de tempo curto, que acessam partes diferentes do arquivo, o subsistema de E / S tentará obter todos os dados de uma só vez, em vez de emitir várias solicitações desconexas.

Tanto quanto o ajuste. Se você é o criador do aplicativo, há muito o que fazer. Você pode emitir E / Ss grandes e seqüenciais sempre que puder e usar fsync () et.al. quando você precisar ter certeza de que os dados estão nos pratos.

Se você é um administrador de sistemas e sabe absolutamente que as solicitações de dados de 2 aplicativos saltam, e eles tentam ler arquivos seqüencialmente (por exemplo, você tem 2 DVDs sendo transcodificados em paralelo), sim, aumentar o readahead deve ajudar. Caso contrário, você precisará examinar seus padrões e tamanhos de E / S, considere seu nível de RAID (se houver) e outros fatores, antes de fazer qualquer ajuste. Veja quais são seus gargalos reais, antes de começar a ajustar, pode ser difícil adivinhar o que realmente está limitando seu sistema.

Paweł Brodacki
fonte
5

No linux, você pode definir seu próprio algoritmo de agendamento, você tem diferentes possibilidades, eu tive que fazer um trabalho sobre isso na escola e este artigo da Red Hat me ajudou muito. Embora seja especificamente para a Red Hat, você pode encontrar esses agendadores em praticamente qualquer distribuição Linux.

Lucas Kauffman
fonte