web-dev-qa-db-ja.com

ハイパースレッディングを有効にする-UbuntuPrecise64ビットでqthread作成エラーが発生します

私たちは最近、いくつかの重労働のためにHP ProLiantDL360pサーバーをセットアップしました。何らかの理由で、セットアップ時にシステムBIOSでハイパースレッディングを無効にしました。デュアルCPU8コアシステムであるため、16個のハードウェアスレッドが提供されました。 32GBのRAM。 Ubuntu 12.0464ビットを実行しています。

行われる作業の大部分は、VHDL「シンセサイザー」またはコンパイラーによって行われます。これはQTアプリケーションですが、通常はコマンドラインモード(GUIなし)で実行されます。このコンパイラは、継続的インテグレーションシステム(Jenkins)によって開始され、過去数週間は正常に実行されています。

本日、ハイパースレッディングを再度有効にして、32のハードウェアスレッドすべてにアクセスできるようにしました。ただし、このコンパイラは、私が考案できるすべての場合に次のエラーでハングします。

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

プロセスは停止していて、CPUでビジーではないように見え、ctrl-cがプロセスを中断します。

オンラインで検索したところ、これはOSの最大スレッド制限に関連しているようですが、これを変更する方法がわかりません。とにかくデフォルトはおそらく約800スレッドです。これは、少数(おそらく2?)しか実行しないこのコンパイラには十分すぎるはずです。

それまでの間、ハイパースレッディングを無効にする必要がありますが、これが64ビットLinuxを実行しているハイエンドサーバーの既知の問題であるかどうか疑問に思いました。既知の回避策はありますか?それとも、その特定のアプリケーションに問題がある可能性が高いですか?

6
davidA

このプロセスがどのように開始されるかを説明し、可能な限りそれに近いコンテキストからの_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.
_
1
Pierre Carrier