マルチコアマシンのバックグラウンドタスク?

マルチコアマシンのバックグラウンドタスク?

Linuxを実行するデュアルコアCPUがあるとします。

バックグラウンドで2つのシングルスレッドプロセス(nodejs)を起動すると、どのようにスケジュールされますか?

OSが最善を尽くし、各プロセスが異なるコアで実行されるように努力すると仮定できますか、それとも別のタスクを実行する必要がありますか?

ベストアンサー1

はい、追加の設定を行わずにコア全体でタスクをスケジュールします。

したがって、ibm.comのLinux SMPに関する素晴らしい記事(強調):

Linux 2.0 の初めに、SMP サポートは、システム全体にシリアルアクセスを許可する「大きなロック」で構成されていました。 SMPサポートの進展はゆっくりと行われましたが、2.6カーネルになってSMPの力がついに明らかになりました。

2.6カーネルは、SMPシステムのより良いサポートを含む新しいO(1)スケジューラを導入しました。重要なことは、キャッシュ効率を維持しながら、使用可能なCPU間でワークロードのバランスをとることができることです。キャッシュの効率性を高めるために、ジョブが単一のCPUに関連付けられているときにジョブを別のCPUに移動するには、ジョブのキャッシュをフラッシュする必要があるという図4を思い出してください。これにより、そのデータが新しいCPUのキャッシュに入るまで、ジョブのメモリアクセス待ち時間が長くなります。

2.6カーネルは、各プロセッサに対して一対の実行キュー(期限切れの実行キューとアクティブな実行キュー)を保持します。。各実行キューは140の優先順位レベルをサポートし、最初の100はリアルタイムジョブで、最後の40はユーザージョブです。ジョブは実行時間フラグメントを提供し、割り当てられた時間フラグメントを使用すると、アクティブな実行キューから期限切れの実行キューに移動します。これにより、すべてのジョブに対してCPUへの公正なアクセスが提供されます(CPUごとのロックのみ可能)。

CPU固有のジョブキューを使用すると、システム内のすべてのCPUに対して測定された負荷に基づいてジョブのバランスを調整できます。スケジューラは、200ミリ秒ごとにロードバランシングを実行してワークロードを再配布し、プロセッサコンプレックス間のバランスを維持します。 Linux 2.6スケジューラの詳細については、リソースのセクションを参照してください。

おすすめ記事