問題タブ [spinlock]

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 投票する
3 に答える
1470 参照

linux - Linux カーネル - さまざまな機能で Spinlock をロックおよびロック解除できますか?

私はカーネルプログラミングとロックを使ったプログラミングが初めてです。

さまざまな関数でスピンロックをロックおよびロック解除しても安全ですか? コードフローを同期するためにこれを行っています。

また、__schedule() でスピンロック (ロックとロック解除) を使用しても安全ですか? ロックを取得するためにスケジューラを待機させても安全ですか?

前もって感謝します。

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

php - 高負荷環境に適した APC ユーザーキャッシュ?

私たちは、中央キャッシュ サービス (redis) の各サーバーのローカル 2 層キャッシュとして、高負荷環境で APC ユーザー キャッシュを展開しようとしています。基本的に、Facebookが何をしたかを調べました(数年前):

http://www.slideshare.net/guoqing75/4069180-caching-performance-lessons-from-facebook http://www.slideshare.net/shire/php-tek-2007-apc-facebook

しばらくは問題なく動作しますが、負荷が高い状態で数時間経過すると、APC で問題が発生し、mod_php 全体で PHP が実行されなくなります。シンプルな PHP スクリプトでさえ応答しなくなりましたが、静的リソースは引き続き Apache によって配信されます。実際にクラッシュすることはなく、segfault もありません。APC の最新の安定版と最新のベータ版を試し、pthreads、スピン ロックを試しましたが、毎回同じ問題が発生しました。私たちは APC が消費できるメモリをはるかに多く提供しました。クラッシュの 1 分前には 2% の断片化があり、メモリの約 90% が空いていました。「クラッシュ」した場合、エラー ログには何も見つかりません。Apache を再起動するだけで解決します。スピン ロックの場合のみ、次のような php エラーが発生します。

PHP 致命的なエラー: 不明: 行 0 の不明でスタック スピンロック (0x7fcbae9fe068) が検出されました

これは、タイムアウトを使用しないため、pthreads では発生しない一種のタイムアウトのようです。

起こっていることはおそらく次のようなものです: http://notmysock.org/blog/php/user-cache-timebomb.html

いくつかの数字: サーバーには 1 秒あたり約 400 の APC ユーザー キャッシュ ヒットと 1 秒あたり約 30 の挿入 (私が思うに多くのことです) があり、1 つのリクエストには約 20 ~ 100 のユーザー キャッシュ リクエストがあります。ユーザーキャッシュには約 300.000 の変数があり、すべて ttl を使用します (中央の redis のみに ttl なしで保存します)。

APC 設定は次のとおりです。

現在、スピン ロックでコンパイルされたバージョン 3.1.13-beta を使用しており、古い PHP 5.2.6 (これはレガシー アプリです。この PHP バージョンも問題になる可能性があると聞いたことがあります)、Linux 64 ビットで使用されています。

デバッグするのは非常に困難です。apc やシステムなどから 1 分ごとに取得できる限り多くのデータを収集する監視スクリプトを作成しましたが、クラッシュの 1 分前であっても、異常なことは何も確認できません。

ここで同様の問題をたくさん見てきましたが、今のところ、問題を解決する解決策を見つけることができませんでした. そして、私がそのようなものを読んだとき:

http://webadvent.org/2010/share-and-enjoy-by-gopal-vijayaraghavan

高負荷環境では、ローカル ユーザー キャッシュに APC を使用することが最善のアイデアであるかどうかはわかりません。ここでは既に memcached を使用しましたが、APC の方がはるかに高速です。しかし、それを安定させるにはどうすればよいでしょうか。

よろしく、 アンドレアス

0 投票する
0 に答える
183 参照

linux-kernel - 以下のコンテキストは Linux カーネルでアトミックですか?

上記の例で言及されているコンテキストはアトミックですか? ここでは、私が推測するプリエンプションではなく、割り込みを無効にしているだけです。

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

linux-device-driver - ロック(スピンロックなど)とブロッキングの違いは何ですか

これは少しばかげているように思えるかもしれませんが、私は混乱しています。

  1. ロック操作とブロック操作の正確な違いは何ですか?
  2. いつブロックを使用し、いつロックを使用しますか?
  3. スピンロック、セマフォなどを使用して呼び出しプロセスをスリープ状態にすることができる場合 (私が間違っている場合は言及してください)、プロセスをスリープ状態にするために wait_queues を作成するのはなぜですか (これはブロックしていると思います)。

お答えください。

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

linux - SMP のスピンロック ロックアップを解決するには、irq と関数の両方がロックを必要としていますか?

私たちのシステム (Linux) には、spin_lock ロックアップ/デッドロックの問題がありますが、それを解決する良いアイデアがありません。スピンロックは、irq とデータ送信関数で取得できます。ロックアップは次の場合に発生しました。

  1. アプリはデータを送信しようとしており、 を介してスピンロックを取得しましたspin_lock_irqsaveが、 を呼び出していませんspin_lock_irqrestore。これは CPU1/CPU2/CPU3 で実行されます。

  2. CPU0 で irq が発生し、 を呼び出して同じスピンロックを取得しようとするとspin_lock_irq_save、システムのロックアップが発生します。のプリエンプションが無効になっているためspin_lock_irqsaveです。

CPU0 irq を無効にすることが解決策ですが、データが巨大で、すべてのデータを送信するまでに長い時間がかかります。また、irq アフィニティを使用すると、すべての CPU ですべての irq を無効にする必要がありますが、これは受け入れられません。

この問題を解決する他の方法はありますか? 経験はありますか?カーネルにはこれを解決するメカニズムがすでにあるはずだと思いますが、わかりません。

前もって感謝します!