Linuxのスピンロックとは何ですか?

Linuxのスピンロックとは何ですか?

Linuxスピンロックについてもっと知りたいです。誰かが私に説明できますか?

ベストアンサー1

スピンロックは、複数のプロセスによる同時変更から共有リソースを保護する方法です。リソースを修正しようとする最初のプロセスは、ロックを「取得」し、続行し、リソースに対して必要なタスクを実行します。その後、ロックを取得しようとする他のすべてのプロセスは停止し、最初のプロセスがロックを解除するのを待つため、スピンロックと呼ばれます。

Linuxカーネルは、特定のペリフェラルにデータを送信するときなど、さまざまな方法でスピンロックを使用します。ほとんどのハードウェアペリフェラルは、複数の同時状態更新を処理するように設計されていません。 2つの異なる修正を適用する必要がある場合、1つは他のものに厳密に従う必要があり、重複することはできません。スピンロックは、一度に1つの修正のみを行うために必要な保護を提供します。

スピンロックは、スピンによってそのスレッドのCPUコアが他のタスクを実行するのを妨げるために問題になります。 Linuxカーネルは、その下で実行されるユーザースペースプログラムにマルチタスクサービスを提供しますが、この一般的なマルチタスク機能はカーネルコードには拡張されません。

これは変化しており、ほとんどのLinuxの存在でした。 Linux 2.0以前では、カーネルはほぼ純粋に単一の作業プログラムでした。 CPUがカーネルコードを実行するたびに、BKL(Big Kernel Lock)と呼ばれるすべての共有リソースを保護するスピンロックがあったため、1つのCPUコアのみが使用されました。 Linux 2.2以降、BKLは徐々に複数の独立したロックに分解され、各ロックはより集中したリソースクラスを保護します。今日、カーネル2.6にはまだBKLがありますが、より細かいロックに簡単に移動できない非常に古いコードでのみ使用されています。今日、マルチコアシステムでは、各CPUが有用なカーネルコードを実行する可能性が高いです。

Linuxカーネルには汎用マルチタスク機能がないため、BKL因数分解の有用性が制限されます。カーネルスピンロックでCPUコアの回転がブロックされると、ロックが解除されるまでタスクを再割り当てできず、他のタスクを実行できません。ロックが解除されるまで、ただ座って回転させます。

ワークロードが各コアが常に単一のスピンロックを待つ程度であれば、スピンロックは巨大な16コアボックスを単一のコアボックスに効果的に切り替えることができます。これはLinuxカーネルのスケーラビリティの主な制限です。 CPU コアを 2 つから 4 つに増やすと、Linux システムの速度がほぼ 2 倍になる可能性がありますが、16 から 32 に至るほとんどのワークロードでは倍増しません。

おすすめ記事