SMP(4) | FreeBSD Kernel Interfaces Manual | SMP(4) |
名称
SMP — FreeBSD 対称性 (symmetric) マルチプロセッサカーネルの説明書式
options SMP解説
SMP カーネルは、対称性マルチプロセッサのサポートを実装しています。互換性
マルチプロセッサシステムのサポートは、 FreeBSD 上のすべての Tier-1 アーキテクチャのために存在しています。現在、これは、amd64、i386、ia64 および sparc64 を含んでいます。サポートは、 options SMP を使用することで可能にされます。 SMP が備えられていないマザーボード上で SMP カーネル設定を使用するのは許されています。I386 注
i386 システムのために、 SMP カーネルは、インテル MP 規格バージョン 1.4 に続くマザーボードをサポートしています。 i386 は、 options SMP に加えて、 device apic を必要とします。 mptable(1) コマンドは、マルチプロセッササポートの状態を見るために使用することができます。システムによって検出された CPU の数は、読み込み専用の sysctl 変数 hw.ncpu で参照可能です。
FreeBSD は、マルチプロセッサシステム上の特定の CPU を無効にすることができます。 hint.lapic.X.disabled 調整変数を使用して、これを行うことができます、ここで X は、CPU の APIC ID です。この調整変数を 1 に設定すると、対応する CPU を無効にする結果となります。
sched_ule(4) スケジューラは、CPU トポロジ検出を実装して、近代的なマルチコア CPU をよりよく利用するスケジューリングアルゴリズムを調整します。 sysctl 変数 kern.sched.topology_spec は、解析可能な XML 形式で検出された CPU ハードウェアを反映します。トップレベルの XML タグは、個別の CPU グループに関するデータを含む 1 つ以上の <group>タグを囲む、<groups>です。 CPU グループは、通常、単一のマルチコアプロセッサのコアとなることによって、共に "close"となることが検出される CPU を含みます。 <group>タグで利用可能な属性は、CPU グループと "cache-level"の入れ子のレベルに対応し、グループ中の CPU によって共有された CPU キャッシュのレベルに対応する、"level"です。 <group>タグは、<cpu>と <flags>タグを含んでいます。 <cpu>タグは、グループ中の CPU について記述します。その属性は、グループと "mask"中の CPU の数に対応し、グループに属する CPU を意味する 1 に設定された各ビット位置の整数バイナリマスクに対応している、"count"です、 <cpu>タグの内容 (CDATA) は、("mask"属性から、派生する) CPU インデックスのコンマで区切られたリストです。 <flags>タグは、(もしあれば) グループ中の CPU の関係を記述する特別なタグを含んでいます。指定可能なフラグは、現在、ハードウェアマルチスレッド化の様々な実装に対応する、"HTT"と "SMT"です。次の 2 つのクアッドコアプロセッサから成るシステムのための topology_spec 出力の例は、次の通りです:
<groups> <group level="1" cache-level="0"> <cpu count="8" mask="0xff">0, 1, 2, 3, 4, 5, 6, 7</cpu> <flags></flags> <children> <group level="2" cache-level="0"> <cpu count="4" mask="0xf">0, 1, 2, 3</cpu> <flags></flags> </group> <group level="2" cache-level="0"> <cpu count="4" mask="0xf0">4, 5, 6, 7</cpu> <flags></flags> </group> </children> </group> </groups>
この情報は、共に密接にグループ化される CPU で関連するタスクをスケージュールするカーネルによって内部的に使用されます。
FreeBSD は、i386 と AMD64 プラットフォームの Intel CPU でハイパースレッディングをサポートします。論理的な CPU を使用すると、特定の負荷の下で性能の不利益が引き起こされるので、 machdep.hyperthreading_allowed 調整変数を 0 に設定することによって論理的な CPU を無効にすることができます。
関連項目
cpuset(1), mptable(1), sched_4bsd(4), sched_ule(4), loader(8), sysctl(8), condvar(9), msleep(9), mtx_pool(9), mutex(9), rwlock(9), sema(9), sx(9)歴史
SMP カーネルの初期の歴史は、(適切に) 記録されていません。それは、3.0-current にマージされた時点である、 1997 年 4 月 26 日まで、個別の CVS ブランチで開発されていました。この日付までに 3.0-current は、Lite2 カーネルコードが既にマージされていました。FreeBSD 5.0 は、新しい同期プリミティブ (基本) のホスト、 Giant カーネルロックでの信頼よりむしろきめの細かに近づくカーネルロックをサポートします。 SMP のプロジェクトは、 BSD/OS で見つけられたきめの細かい SMP 実装からソースコードの参照を提供され、 BSDi のサポートに大きく依存しています。
また、 FreeBSD 5.0 は、ia64 と sparc64 アーキテクチャで SMP のサポートを導入しました。
作者
<fsmp@FreeBSD.org>May 7, 2008 | FreeBSD |