問題タブ [futex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
16547 参照

java - Java が定期的に futex でハングし、IO 出力が非常に低い

現在、私のアプリケーションは定期的に IO でブロックされており、出力は非常に低くなっています。いくつかのコマンドを使用してプロセスをトレースします。

jstackを使用すると、アプリが FileOutputStream.writeBytes でハングしていることがわかりました。

strace -f -c -p pidを使用してシステムコール情報を収集すると、それが見つかりました。通常の状況では、futex と write の両方のシステムコールがあります。しかし、異常になったときは、futex syscall しかありません。アプリは futex を呼び出し続けますが、すべて失敗し、次のように ETIMEDOUT をスローします。

この問題は定期的に発生し、数分または数時間継続し、再び正常になります。

特に、IO でブロックされた場合、echo 3 > /proc/sys/vm/drop_cachesを実行すると、常に一時的に正常になります。私はそれをグーグルで検索し、以下にリストする同様のプロリームを見つけました.

  1. うるう秒。動作しません。システムの ntpd が停止しています。
  2. 透過的なヒュージページのバグ。https://bugzilla.redhat.com/show_bug.cgi?id=879801 これは私の問題とよく似ていますが、私の khugepaged プロセスは正常で、負荷は常にほぼゼロです。特に drop_cachesは私のアプリケーションでも機能します。また、私のシステムもマルチコアで大容量メモリです。それは私にはうまくいきません。誰かが同じ問題に遭遇したか、この問題に精通していますか?

私のシステムに関するいくつかの情報。OS: Redhat 6.1、カーネル バージョン 2.6.31

JDK:1.7.0_05

CPU:X5650、24コア

メモリ:24GB と 48GB

0 投票する
1 に答える
2967 参照

c - Futexes and blocking in the kernel

I was reading some documentation and trying out a few samples of code that issue the futex system call in Linux. I read that if a mutex is acquired by thread_a using FUTEX_LOCK_PI, and say if another thread thread_b tries to acquire the same, the latter(thread_b) is blocked in the kernel.

What exactly is meant by "blocked in the kernel"? Is it that the execution of thread_b in userspace does not resume? In the following example, the second thread seems to issue the printf after the syscall as well. Would that not suggest that it is not blocked in the kernel? What am I missing?

The output can be found below :-

0 投票する
1 に答える
509 参照

java - Java シングル スレッド プログラムが futex と clone システム コールを使用する理由

これは、再帰を使用して、引数として渡された特定の数値の階乗を見つけるシングル スレッド Java プログラムです。

シングルスレッドとして実行されているプログラムに、なぜこれほど多くの futex と clone システムコールが使用されているのか疑問に思っていました。

0 投票する
1 に答える
233 参照

c - 待機中のスレッドをユーザー空間に戻す

futex ロックで待機しているスレッドを起こすことは可能でしょうか? シグナル メカニズムを使用してみましたが、機能していないようです。私が試すことができる他のアプローチはありますか?以下に、私が達成しようとしていることに似ているかもしれない例を追加しました。

  1. 次のようにfutexロック「lockA」を取得するスレッドAがあります:- ret = syscall(__NR_futex, &lockA, FUTEX_LOCK_PI, 1, 0, NULL, 0);

  2. スレッド A がロックを取得したため、futex ロック「lockA」を取得しようとするスレッド B とカーネル内のブロックがあります。 ret = syscall(__NR_futex, &lockA, FUTEX_LOCK_PI, 1, 0, NULL, 0);

  3. スレッド B が lockA を取得すると、別のスレッドであるスレッド C がそれを認識します。スレッド B がロックを取得しない場合、スレッド C はスレッド B がロックの待機を停止し、別のことを行うことを望みます。

基本的に、この時点で、カーネルでブロックされないように、スレッド C をスレッド B に「シグナル」させることができるかどうかを調べようとしています。そのために、次のようにスレッド B にシグナル ハンドラーを設定します。

スレッド CI から次のようにシグナルを送信してみてください:- pthread_kill(tid_of_B, SIGSYS);

私は何を間違っていますか?スレッド B を起動することはできますか? もしそうなら、別のアプローチを使用する必要がありますか?

[編集] 以下のコメントに基づいて、pthread_kill からの戻り値を確認しようとしたところ、呼び出しが返されていないことに気付きました。

0 投票する
2 に答える
790 参照

python - threading.Lock の futex ID を見つける

次のような本番環境の問題をデバッグできるように、大規模な Python プロジェクトを計測したいと考えています。

ここで、スレッドは何らかのロック (または条件変数) で 14.4 秒待機しました。

そのロックが Python コードで作成されたものなのか、サードパーティの C 拡張機能で作成されたものなのかはわかりませんが、統計的には Python が適切な推測です。

を添付した時点でstrace、この futex は既に作成されていました。アプリケーションの起動時に作成されたと思われます。

threading.Lock()オブジェクトを突き刺してthreading.Condition()、それらの基になる futex ID を見つけたいと思います。

少なくとも、これらの ID をログに記録しておけば、後で実行中のアプリケーションを strace する必要がある場合に、見た futex 呼び出しを論理的なものに解決できます。

0 投票する
1 に答える
16218 参照

linux - strace に表示される futex 競合をデバッグするには?

特定のスレッドが数秒間実行されないように見えるマルチスレッド Linux プロセスの問題をデバッグしています。strace の出力を見ると、futex を待っていることが明らかになりまし

この futex(0x44b8d20) がユーザー空間で何を参照しているか、つまり、内部で futex を使用しているロック構造にこれをマップする方法を見つけるにはどうすればよいですか。