私のUbuntuマシンでは、実行中のデフォルトのカーネルイメージがsmp(CONFIG_SMP=y
)用にビルドされています。しかし、このマシンには1つのCPUしかありません。
ユニプロセッサカーネルでは、smpカーネルとは異なり、spin_lock/unlock
null関数です。では、この設定ではどのようspin_lock()
にspin_unlock()
動作しますか?
そのようなsmp固有のコードによるパフォーマンスへの影響はありますか?
私のUbuntuマシンでは、実行中のデフォルトのカーネルイメージがsmp(CONFIG_SMP=y
)用にビルドされています。しかし、このマシンには1つのCPUしかありません。
ユニプロセッサカーネルでは、smpカーネルとは異なり、spin_lock/unlock
null関数です。では、この設定ではどのようspin_lock()
にspin_unlock()
動作しますか?
そのようなsmp固有のコードによるパフォーマンスへの影響はありますか?
現在の Linux カーネルには、「SMP 代替」という用語で検索できるパッチが含まれています。つまり、ブート中に、カーネルがユニプロセッサ マシンで実行されていることを検出すると、スピンロック関数は no-ops でホット パッチされます。
はい(おそらくいいえ)。
はい: A. スピン ロック/ロック解除は、ロックとロック解除の実際のコードを実行します。これは、コンパイル時に、1 つ以上の CPU を搭載したマシンで実行するかどうかをコンパイラが認識できないためです。B. CPU は 1 つですが、スレッドを使用している場合はそれを使用したい場合があります。
おそらくいいえ:ロックする必要がある部分にスレッドを使用せず、CPUが1つしかないため、あなたが尋ねていると思います。その場合、スピンロックは決してスピンに入らないはずです。したがって、パフォーマンスのオーバーヘッドはごくわずかです。