Como o Linux lida com IO de disco simultâneo?

12

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

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

  2. Procure File_1, leia parte dele (até o valor readahead?), procure File_2, leia parte dele, depois volte ao File_1 de onde parou, leia mais, então procurar para File_3, etc, etc

Se for o segundo caso, o servidor está fazendo muito mais pesquisas do que o necessário, o que diminuiria significativamente as coisas. Nesse caso, há algum ajuste que eu possa fazer?

    
por Continuation 11.09.2011 / 11:55

2 respostas

14

No disco I / O existe uma coisa chamada elevador. O subsistema de disco tenta evitar a cabeça do disco em todos os pratos. Ele irá reordenar pedidos de E / S (quando não proibidos, por exemplo, por uma barreira), de modo que a cabeça se mova do interior do disco para o exterior e para trás, executando as E / Ss solicitadas no caminho.

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

No que diz respeito ao ajuste. Se você é o escritor de aplicativos, há muita coisa que você pode fazer. Você pode emitir E / Ss grandes e sequenciais sempre que puder e usar fsync () et.al. quando você precisa ter certeza de que os dados estão nos pratos.

Se você é um administrador de sistema e sabe absolutamente que as solicitações de dados de dois aplicativos saltam e elas tentam ler os arquivos em sequência (por exemplo, você tem dois DVDs sendo transcodificados em paralelo), então sim, aumentar a leitura antecipada deve ajudar. Caso contrário, você precisaria dar uma olhada em seus padrões e tamanhos de E / S, considerar seu nível de RAID (se houver) e outros fatores antes de fazer qualquer ajuste. Veja quais são os seus verdadeiros afunilamentos, antes de começar a sintonizar, pode ser difícil adivinhar o que realmente está limitando seu sistema.

    
por 11.09.2011 / 12:26
5

No linux você pode definir seu próprio algoritmo de agendamento, você tem diferentes possibilidades, eu tive que fazer uma parte dele 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 do Linux.

    
por 11.09.2011 / 12:46