O contexto muda muito mais lentamente em novos kernels linux

4

Estamos procurando atualizar o sistema operacional em nossos servidores do Ubuntu 10.04 LTS para o Ubuntu 12.04 LTS. Infelizmente, parece que a latência para executar um thread que se tornou executável aumentou significativamente do kernel 2.6 para o kernel 3.2. Na verdade, os números de latência que estamos recebendo são difíceis de acreditar.

Deixe-me ser mais específico sobre o teste. Nós temos um programa que tem dois threads. O primeiro thread recebe o tempo atual (em ticks usando RDTSC) e, em seguida, sinaliza uma variável de condição uma vez por segundo. O segundo thread aguarda na variável de condição e acorda quando é sinalizado. Em seguida, ele recebe o horário atual (em carrapatos usando RDTSC). A diferença entre o tempo no segundo segmento e o tempo no primeiro segmento é calculado e exibido no console. Depois disso, o segundo thread aguarda novamente a variável condition. Então, nós obtemos um thread para medir a latência da sinalização de thread uma vez por segundo como resultado.

No linux 2.6.32, essa latência está em algum lugar na ordem de 2.8-3.5 us, o que é razoável. No linux 3.2.0, essa latência está em algum lugar na ordem de 40 a 100 nós. Eu excluí todas as diferenças no hardware entre os dois hosts do host. Eles rodam em hardware idêntico (processadores dual socket X5687 {Westmere-EP} rodando a 3.6 GHz com hyperthreading, speedstep e todos os estados C desativados). Estamos alterando a afinidade para executar ambos os encadeamentos em núcleos físicos do mesmo socket (ou seja, o primeiro thread é executado no Core 0 e o segundo thread é executado no Core 1), portanto não há saltando de threads em núcleos ou saltando / comunicação entre soquetes.

A única diferença entre os dois hosts é que um está executando o Ubuntu 10.04 LTS com o kernel 2.6.32-28 (a caixa de comutação de contexto rápida) e o outro está executando o último Ubuntu 12.04 LTS com o kernel 3.2.0-23 ( a caixa de mudança de contexto lento).

Houve alguma mudança no kernel que pudesse explicar essa lentidão ridícula no tempo que leva para que um thread seja programado para ser executado?

    
por Michael Goldshteyn 24.08.2012 / 17:09

1 resposta

1

Não sei por que isso aconteceria, mas se isso for considerado uma regressão de desempenho severa para você, sugiro preencher um bug para que um membro da equipe do kernel olhe para ele.

por Colin Ian King 24.08.2012 / 19:18

Tags