Agora: o desempenho de pacotes pequenos é uma droga do Xen
(movido da pergunta em si para uma resposta separada)
De acordo com um usuário na HN (um desenvolvedor KVM?), isso se deve ao pequeno desempenho do pacote no Xen e também no KVM. É um problema conhecido com virtualização e, de acordo com ele, o ESX da VMWare trata isso muito melhor. Ele também observou que o KVM está trazendo alguns novos recursos projetados para aliviar isso ( postagem original ).
Esta informação é um pouco desanimadora se estiver correta. De qualquer forma, vou tentar os passos abaixo até que algum guru Xen venha com uma resposta definitiva:)
Iain Kay, da lista de discussão xen-users, compilou este gráfico:
ObserveasbarrasTCP_CRR,compare"2.6.18-239.9.1.el5" vs "2.6.39 (com o Xen 4.1.0)".
Plano de ação atual com base nas respostas / respostas aqui e de HN :
-
Envie este problema para uma lista de discussão específica do Xen e bugzilla do xensource como sugerido por syneticon-djUma mensagem foi postada na lista de usuários xen , aguardando resposta. -
Crie um caso de teste patológico simples no nível do aplicativo e publique-o.
Um servidor de teste com instruções foi criado e publicado no GitHub . Com isso, você poderá ver um caso de uso mais real em comparação com o netperf. -
Tente uma instância guest de PV Xen de 32 bits, pois o 64-bit pode estar causando mais sobrecarga no Xen. Alguém mencionou isso em HN.Não fez diferença. -
Tente ativar o net.ipv4.tcp_syncookies no sysctl.conf, como sugerido por abofh no HN. Isso aparentemente pode melhorar o desempenho, já que o handshake ocorreria no kernel.Eu não tive sorte com isso. -
Aumente o backlog de 1024 para algo muito mais alto, também sugerido por abofh no HN. Isso também poderia ajudar, já que guest poderia potencialmente aceitar () mais conexões durante sua fatia de execução dada por dom0 (o host).
-
Verifique se o conntrack está desativado em todas as máquinas, pois ele pode reduzir pela metade a taxa de aceitação (sugerida por deubeulyou).Sim, foi desativado em todos os testes. -
Verifique se há "estouro da fila de escuta e estouro de depósitos no syncache no netstat -s" (sugerido por mike_esspe no HN).
-
Divida a manipulação de interrupção entre vários núcleos (o RPS / RFS que eu tentei habilitar anteriormente deve fazer isso, mas pode valer a pena tentar novamente). Sugerido por adamt no HN.
-
Desativando o descarregamento de segmentação TCP e a aceleração de dispersão / coleta, conforme sugerido por Matt Bailey. (Não é possível no EC2 ou em hosts VPS semelhantes)