Ajustando o Agendador de E / S do Linux

2

Eu preciso de uma pequena ajuda para ajustar adequadamente o Agendador de E / S do Linux para unidades giratórias.

Eu tenho um processo que grava dados em um enorme arquivo mapeado de memória (4-16TB) e está usando SHED_FIFO. O kernel então libera páginas sujas para o arquivo automaticamente com base em algumas heurísticas desconhecidas. O processo de gravação dos dados é em tempo real e de missão crítica, portanto, os lotes de gravações em disco devem ter prioridade sobre as leituras.

Eu também tenho vários outros processos que lê dados do arquivo através de mapeamento de memória que não são de missão crítica. Se o disco não conseguir acompanhar as gravações e leituras, ele deve fazer as leituras o mais rápido possível, sem afetar as gravações de modo que a máquina fique sem memória.

Agora, olhando para os diferentes agendadores de I / O, encontrei os seguintes comportamentos:

  • prazo: a leitura tem prioridade mais alta do que gravar
  • cfq: leitura e gravação tem a mesma prioridade

Um agendador que as prioridades escrevem sobre leituras parece não existir.

Agora meu pensamento inicial seria usar o scheduler "cfq" e então usar "ionic" com um alto valor nos processos de leitura que, em teoria, deveria permitir que o kernel sempre limpasse páginas sujas, eu acho?

Isso realmente funcionaria? Existe uma maneira melhor?

EDITAR:

Analisando "Conceito sobre cache de páginas Linux e pdflush" parece haver algumas configurações para o Deadline Scheduler que você pode usar:

Estamos tentando o seguinte:

  • writes_starved: 2 (padrão) = > 1
  • write_expire: 5000 (padrão) = > 500
  • read_expire: 500 (padrão) = > 5000

Isso parece razoável?

    
por ronag 28.10.2015 / 14:53

1 resposta

1

ionice permite alterar a prioridade por processo. Pelo que entendi, você tem alguns processos que escrevem e alguns que lêem. A página Man diz que se aplica ao agendador CFQ.

    
por 28.10.2015 / 17:32