Qual versão do Linux oferece o melhor desempenho para um aplicativo com grande quantidade de solicitações?

1

Sou novo no mundo Linux e estou aprendendo o máximo que posso.

Existe um aplicativo de servidor que precisa lidar com um grande número de solicitações por segundo. O servidor foi escrito para Linux usando C ++. Precisamos implantar neste servidor em um sistema operacional gratuito que nos dê o melhor desempenho possível. Se você fosse decidir, qual sistema operacional você escolheria?

    
por redclover 04.10.2009 / 07:43

9 respostas

1

Eu não acho que sua pergunta seja muito clara. Linux é o sistema operacional. a distribuição é o que empacota o Linux e outros softwares em um bom pacote para você instalar e executar.

Dito isto, os principais concorrentes para servidores Linux são:

  • RedHat / CentOS
  • Debian
  • Servidor Ubuntu?

entre distribuições, há pouca diferença entre as principais versões do software, exceto talvez o kernel. (Eu sei que o CentOS ainda está rodando 2.6.18.) Meu voto pessoal é para o Debian Estável, mas a escolha de distro é uma coisa muito pessoal. passe algum tempo na Wikipédia e no Google, bem como nos vários sites de distro antes de tomar uma decisão. e fique à vontade para fazer perguntas!

    
por 04.10.2009 / 09:03
2

Todas as distribuições modernas lhe darão praticamente o mesmo desempenho que serão baseadas no mesmo kernel (Linux 2.6.x).

Eu recomendo o Ubuntu Server Edition , é fácil de usar e fácil de usar.

    
por 04.10.2009 / 07:46
2

Tudo depende de como o aplicativo é codificado, o que ele faz e assim por diante. Versões recentes do Linux incluíram novas APIs para aumentar a alta taxa de transferência, como splice / vmsplice, introduzidas no 2.6.17. Mas, obviamente, requer que seu aplicativo seja usado. Todas as versões recentes de distros modernas terão pelo menos esse kernel, de qualquer forma.

Splice basicamente permite que você passe dados entre descritores de arquivos sem copiá-los. Você acabou de dizer ao sistema operacional, pegar muitos bytes de lá e enviá-los para lá. Reduz a cópia de dados e troca de contexto, uma vez que tudo é feito no kernel.

Aplicativos como haproxy podem usar essa chamada para preencher uma placa dual ethernet de 10 gigabits em um servidor de baixo custo.

Agora, splice / vmsplice / tee não fará muita diferença se seu aplicativo não estiver passando a maior parte do tempo copiando dados. Mas existem outros syscalls que você deseja investigar para lidar com muitas conexões simultâneas.

Por exemplo, certifique-se de usar epoll em vez de selecionar / poll. Onde o último envia uma lista de todos os FDs em que está interessado em cada chamada, epoll_create constrói uma lista no kernel, e a chamada epol_wait apenas faz referência a essa lista. Você pode ver a vantagem quando estiver ouvindo milhares de soquetes e ligar para selecionar / pesquisar dez mil vezes por segundo.

Além disso, você deseja ver as configurações de sysctl em tempo de execução. Os padrões geralmente são muito conservadores.

Finalmente, eu definitivamente recomendo que você use uma distro baseada em assinatura / suporte, como RHEL ou SLES; o tipo de serviço de suporte que eles fornecem é exatamente o que você precisa, pois eles irão ajudá-lo se houver uma regressão de desempenho no kernel, e eles serão capazes de obter a correção rapidamente.

    
por 04.10.2009 / 13:46
1

Você precisa avaliar sua aplicação específica em várias distros. Qualquer resposta que você obtiver no StackOverflow, considerando apenas as informações que você forneceu, seria pura especulação. Quando o alto desempenho é essencial, não há substituto para benchmarks.

    
por 04.10.2009 / 07:46
1

Eu diria que você tem como alvo uma versão do kernel em vez de um sistema operacional específico. Além disso, você deve procurar ajustar a camada de rede, isso pode fazer uma grande diferença.

    
por 04.10.2009 / 08:57
0

Honestamente, eu recomendaria o Arch Linux . Para um servidor, é muito fácil de configurar. É i686 ou amd64 otimizado, muito rápido. O Pacman é bom para atualizações.

Eu também não tive problemas com a estabilidade.

    
por 04.10.2009 / 07:49
0

Acho que o mais importante é descobrir qual distribuição lhe dará os melhores direitos para distribuir ainda mais seu software de servidor! Como seu servidor está executando o código C ++, provavelmente você está distribuindo seu próprio código apenas como binários. Isso pode ou não ser possível com certas distribuições. Pior, você pode estar usando certas bibliotecas GPL dentro de seu código, o que fará com que seu código "herde" a licença GPL. Não tenho certeza se você está disposto a publicar seu código como código aberto, no entanto.

Ainda assim, se o seu código depender apenas do kernel do Linux , tudo o que você precisa fazer é criar sua própria distribuição com base nisso kernel mais seu próprio código. Usar uma distribuição existente poderia tornar toda a parte de licenciamento um enorme pesadelo de licenciamento.

    
por 04.10.2009 / 10:01
0

A maioria dos linuxes fornece software pré-compilado.

Se o desempenho for seu objetivo, experimente o Gentoo: todos os pacotes e o próprio kernel são compilados em seu hardware e otimizados para funcionar melhor nele. Isso dá algum aumento de desempenho:)

    
por 04.10.2009 / 13:15
0

Concordo com algumas das respostas postadas anteriormente, se estamos falando de desempenho, seu problema não é a distro (redhat vs. ubuntu vs. ....). Eu uso o Ubuntu, mas é apenas para suporte, grande comunidade, facilidade de uso. Se você realmente quer otimizar a velocidade, eu vou te dar dois conselhos:

  1. feche / desinstale todos os daemon desnecessários. Na maioria das distro Linux, assim como no Windows, existem alguns serviços que começam por padrão, que provavelmente não são exigidos pelo seu aplicativo.

  2. se você puder, compile seu próprio kernel. Ultimamente tem crescido para incluir suporte para muita coisa (dispositivos de hardware, protocolos de rede ...). Se você é capaz de incluir apenas o que você precisa, você terá um kernel mais leve e rápido. Eu não sou experiente no Gentoo, mas se realmente compila o kernel, deixando você escolher o que deve ser incluído, é o que você precisa.

por 04.10.2009 / 21:49