O IO de disco assíncrono afeta o uso de swap?

1

Eu tenho um aplicativo de servidor que requer o uso de memória enorme, mas pode levar pouco tempo. Por isso, achei que deveria ser econômico executá-lo com uma grande troca e ram normal.

Eu estava lendo sobre servir arquivos grandes do disco quando aprendi sobre o disco assíncrono io e ouvi que é melhor suportado no FreeBSD que no Linux.

A minha pergunta é: O IO de Disco Assíncrono afeta o desempenho do espaço de troca porque uma partição de troca estará fazendo muitas leituras e gravações de disco. Existe uma razão para ir para o FreeBSD? Eu tenho experiência razoável trabalhando no Linux (Ubuntu) e prefiro usá-lo para o aplicativo.

    
por cnvzmxcvmcx 07.06.2014 / 09:57

1 resposta

4
    O IO assíncrono no FreeBSD não é totalmente melhor que no Linux. Eu acho que sua fonte significou que a família de chamadas AIO ( aio_read , etc.) é implementada diretamente no kernel do FreeBSD, mas converte seus pedidos para IOCPs internamente onde possível (sockets, pipes, flat disk access, etc.) e cria threads de kernel apenas para sistema de arquivos I / O. Ao contrário disso, o Linux usa threads de userland para a família de chamadas AIO, que são mais explícitas, mas expõem seu trabalho e precisam de um contexto de thread maior. Todos os outros aspectos estão relacionados à arquitetura e ao desempenho comuns do kernel, o que depende de muitas funcionalidades, incluindo as habilidades de ajuste do sysadmin.
  1. Existem abordagens quando os encadeamentos são explicitamente necessários para AIO - o caso principal é quando um arquivo é mapeado e lido como uma região de memória, e a leitura real é tratada como falha de página. Como a falha de página interrompe um determinado fluxo de controle (ou seja, encadeamento), ele requer que uma thread separada seja manipulada independentemente. Parece que isso é muito próximo do seu suposto mecanismo, mas somente se você controlar o uso da RAM corretamente; isso significa pelo menos% em massamadvise para especificar quais regiões são necessárias e quais não são. Às vezes, o direct * read () / * write () é mais fácil porque eles não exigem manter segmentos já processados expostos à RAM.
  2. AIO por si só não se correlaciona com swap de qualquer maneira. Usar qualquer maneira de IO requer entrada e saída na melhor taxa. Mas, a questão é que, se você mantiver enormes quantidades de dados na memória de processo, ela será trocada e encerrada. Se o seu "conjunto de trabalho" (conjunto de páginas que deve estar na RAM para trabalhar sem degradação de desempenho de processo óbvio) for maior que se encaixa na memória RAM (incluindo gastos para os dados do kernel, cache de disco, etc.), você vai cair em troca constante. Nesse caso, os algoritmos devem ser adaptados para manter o conjunto de trabalho pequeno o suficiente, essa é a única solução.
  3. Particularmente para Linux, por favor, mantenha número 12309 em mente. Ele é relatado como fixo, mas o ticket perde parte importante do histórico e das consequências, portanto, o problema com a limpeza tardia do cache de disco e a troca de massa pode retornar. A diferença importante do FreeBSD é que os sistemas BSD nunca tiveram esse problema.
por 08.06.2014 / 10:31