Otimizações do kernel para operações ioctl AF_INET

2

Nossa solução de servidor lida com muitas solicitações de operação de túnel (adicionar / atualizar / excluir) usando a interface ioctl e o soquete da família de endereços AF_INET. Aprox. números são 100 operações / minuto com mais de 8k túneis no servidor.

Observamos um comportamento estranho com um número crescente de túneis - à medida que o número de túneis aumenta, a aleatoriedade de tempo gasto no kernel por ioctl aumenta.

Exemplo : por cerca de 100 túneis, avg. O tempo de operação do ioctl varia de 100 a 150 ms, mas com mais de 2000 ele varia de 100 a 10000 ms. A aleatoriedade do processo é surpreendente.

strace mostra que mais de 97% do nosso tempo de processo é gasto no ioctl, e os timers internos confirmam isso.

Existe alguma maneira de otimizar isso? Talvez ajustando os parâmetros do kernel (quais)? Como explicar a aleatoriedade?

Nosso sistema operacional é o Ubuntu Server 12.04.

    
por er453r 09.04.2014 / 13:18

1 resposta

1

Descobriu-se que ioctl não era culpado aqui. strace mostrou que era, mas uma análise mais profunda do kernel com ftrace (ou trace-cmd ) mostrou que durante ioctl processador agendador causou a maior parte da desaceleração durante a comutação de núcleo / contexto.

    
por 23.04.2014 / 13:55