Enabled hyperthreading - causa erro de criação qthread no Ubuntu Precise 64 bit

6

Recentemente, configuramos um servidor HP ProLiant DL360p para um trabalho pesado pesado. Por um motivo ou outro, desativamos hyperthreading no BIOS do sistema ao configurá-lo. Sendo um sistema de 8 núcleos com CPU dupla, isso nos deu 16 encadeamentos de hardware. 32 GB de RAM. Estamos executando o Ubuntu 12.04 de 64 bits.

A maior parte do trabalho é feita por um "sintetizador" VHDL, ou compilador. É um aplicativo QT, mas normalmente é executado no modo de linha de comando (sem GUI). Este compilador tem funcionado bem nas últimas semanas, iniciado por um sistema de integração contínua (Jenkins).

Hoje reativamos o hyperthreading para obter acesso a todos os 32 segmentos de hardware. No entanto, agora este compilador trava com o seguinte erro em todos os casos que eu posso fazer:

QThread::start: Thread creation error: Resource temporarily unavailable

O processo parece estar parado, não ocupado em nenhuma CPU, e ctrl-c o interrompe.

Eu fiz algumas pesquisas on-line e parece que isso pode estar relacionado ao limite máximo de threads do sistema operacional, mas não sei como alterar isso. O padrão é supostamente em torno de 800 threads, o que deve ser mais do que suficiente para este compilador que executa apenas um pequeno número (talvez 2?).

Nesse meio tempo, terei que desabilitar o hyperthreading, mas gostaria de saber se esse é um problema conhecido com servidores high-end executando o Linux de 64 bits? Existe uma solução conhecida? Ou é mais provável que seja um problema com esse aplicativo específico?

    
por meowsqueak 03.07.2012 / 23:35

1 resposta

1

Você poderia descrever como esse processo é iniciado e nos fornecer a saída de ulimit -a de um contexto o mais próximo possível?

Como pthread_create(3) explica, você está se deparando com:

ERRORS
       EAGAIN Insufficient  resources  to create another thread, or a system-
              imposed limit on the number of threads  was  encountered.   The
              latter  case  may  occur  in  two  ways:  the RLIMIT_NPROC soft
              resource limit (set via setrlimit(2)), which limits the  number
              of  process  for  a  real user ID, was reached; or the kernel's
              system-wide limit on  the  number  of  threads,  /proc/sys/ker‐
              nel/threads-max, was reached.
    
por 06.07.2012 / 00:43