Назад | Перейти на главную страницу

Включена гиперпоточность - вызывает ошибку создания qthread в Ubuntu Precise 64 bit.

Недавно мы установили сервер HP ProLiant DL360p для тяжелой работы. По той или иной причине мы отключили гиперпоточность в BIOS системы при настройке. Будучи двухъядерной 8-ядерной системой, мы получили 16 аппаратных потоков. 32 ГБ оперативной памяти. Мы используем 64-разрядную версию Ubuntu 12.04.

Основная часть работы выполняется «синтезатором» VHDL или компилятором. Это приложение QT, но обычно оно запускается в режиме командной строки (без графического интерфейса). Этот компилятор хорошо работает последние несколько недель, благодаря системе непрерывной интеграции (Jenkins).

Сегодня мы снова включили гиперпоточность, чтобы получить доступ ко всем 32 аппаратным потокам. Однако теперь этот компилятор зависает со следующей ошибкой в ​​каждом случае, который я могу придумать:

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

Кажется, что процесс остановлен, не занят ни одним процессором, и ctrl-c его прерывает.

Я поискал в Интернете, и, похоже, это может быть связано с максимальными ограничениями потоков ОС, но я не уверен, как это изменить. В любом случае по умолчанию предполагается около 800 потоков, что должно быть более чем достаточно для этого компилятора, который выполняет только небольшое количество (может быть, 2?).

А пока мне придется отключить гиперпоточность, но мне было интересно, является ли это известной проблемой с высокопроизводительными серверами под управлением 64-разрядной Linux? Есть ли известный обходной путь? Или это, скорее, проблема с конкретным приложением?

Не могли бы вы описать, как запускается этот процесс, и предоставить нам результат ulimit -a из контекста, максимально близкого к этому?

Так как pthread_create(3) объясняет, вы столкнулись с:

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.